{"id":346923,"date":"2025-10-30T10:58:34","date_gmt":"2025-10-30T09:58:34","guid":{"rendered":"https:\/\/nextcloud.com\/?p=346923"},"modified":"2025-11-14T08:54:53","modified_gmt":"2025-11-14T07:54:53","slug":"websockets-in-nextcloud","status":"publish","type":"post","link":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/","title":{"rendered":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI"},"content":{"rendered":"\n<p>Nextcloud Hub 25 Autumn adds WebSockets support to the AppAPI ecosystem. <\/p>\n\n\n\n<p>With the new HaRP proxy, External Apps (ExApps) can expose WebSocket endpoints securely through the Nextcloud domain. How does it benefit your apps? The answer is simple: no more polling, lower latency, and cleaner architectures for your real\u2011time features.<\/p>\n\n\n\n<p>In this article, we explain what WebSockets are, their role in the Nextcloud ecosystem, and how we use them ourselves in Nextcloud Hub apps.<\/p>\n\n\n\n<p>Special thanks to Alexander Piskun, software engineer with Nextcloud\u2019s Integrations Team, for contributing to this article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are WebSockets<\/h2>\n\n\n\n<p>WebSockets are a communication protocol that enables a persistent, two-way connection between a client and a server via HTTP to exchange updates. The server can then push messages to the browser without repeated one-off HTTP requests. In simple words, WebSockets eliminate the need for the client to constantly ask the server for updates, and instead, they have an ongoing &#8220;conversation&#8221;. This is ideal for live dashboards, collaborative editors, progress streaming, presence indicators, and chat apps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How WebSockets work in the Nextcloud ecosystem<\/h2>\n\n\n\n<p>Nextcloud&#8217;s AppAPI lets you build external apps (ExApps) as microservices in any language, packaged as containers and integrated into the Nextcloud UI. Historically, the built\u2011in AppAPI proxy didn&#8217;t support WebSockets, which made enabling real\u2011time features difficult or even impossible for ExApps.<\/p>\n\n\n\n<p>With our latest update, <a href=\"https:\/\/nextcloud.com\/blog\/nextcloud-hub25-autumn\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nextcloud Hub 25 Autumn<\/a>, we introduced <a href=\"https:\/\/docs.nextcloud.com\/server\/stable\/admin_manual\/exapps_management\/AppAPIAndExternalApps.html#harp\" target=\"_blank\" rel=\"noreferrer noopener\">HaRP (Nextcloud AppAPI HaProxy Reverse Proxy)<\/a>, recommended for Nextcloud 32+ deployments. HaRP sits behind your main reverse proxy and routes requests directly to ExApps. This includes WebSocket traffic while validating user sessions with Nextcloud. That means WebSockets now work end\u2011to\u2011end for ExApps without passing through the PHP stack.<\/p>\n\n\n\n<p>The server reaches ExApps through HaRP, and HaRP can proxy requests from the web UI without going through the Nextcloud server, saving resources, improving performance, and supporting additional protocols like WebSockets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lower latency, better interoperability, and a future-proof path<\/h2>\n\n\n\n<p>What makes WebSockets great: <\/p>\n\n\n\n<ul class=\"wp-block-list nc-list\">\n<li class=\"nc-list\">You have lower latency and fewer moving parts. WebSockets maintain a single, long\u2011lived connection per client instead of polling endpoints at intervals.<\/li>\n\n\n\n<li class=\"nc-list\">Your app can run in any language, since ExApp backends can be Python, Node, Go, whatever your team uses. AppAPI handles lifecycle and integration.<\/li>\n\n\n\n<li class=\"nc-list\">It&#8217;s a future\u2011proof path. HaRP is the recommended deploy daemon for AppAPI; the older Docker Socket Proxy workflow is on the path to deprecation, so adopting HaRP readies your app for what is next.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">How we use WebSockets in Nextcloud Hub apps<\/h2>\n\n\n\n<p>We use WebSockets in our own applications too. For example, in Nextcloud Office (Collabora integration) and optionally in Nextcloud Text if the Nextcloud Files High-Performance Backend is installed. WebSockets help us enable real-time collaboration features in those apps: changes made by one person are propagated immediately to others, and they see the content update in real time.<\/p>\n\n\n<section class=\"simple-slider-section \" id=\"\">\r\n\t<div class=\"\">\r\n                    <div class=\"owl-carousel simple_slider_slideshow\" id=\"\">\r\n                                    <div class=\"gallery_item\" id=\"334523\">\r\n                        <a href=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes.png\" class=\"simple_slider_slideshow_link\">\r\n                            <img decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes.png\" class=\"attachment-full size-full\" alt=\"Nextcloud Hub 25 Autumn: Office - Writer colors\" srcset=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes.png 1920w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes-300x169.png 300w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes-1024x576.png 1024w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes-768x432.png 768w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Writer-color-codes-1536x864.png 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>                        <\/a>\r\n                                            <\/div>\r\n                                    <div class=\"gallery_item\" id=\"334539\">\r\n                        <a href=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing.png\" class=\"simple_slider_slideshow_link\">\r\n                            <img decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing.png\" class=\"attachment-full size-full\" alt=\"Nextcloud Hub 25 Autumn: Collectives - Landing page design polishing\" srcset=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing.png 1920w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing-300x169.png 300w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing-1024x576.png 1024w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing-768x432.png 768w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Collectives_-Landing-page-design-polishing-1536x864.png 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>                        <\/a>\r\n                                            <\/div>\r\n                                    <div class=\"gallery_item\" id=\"334733\">\r\n                        <a href=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support.png\" class=\"simple_slider_slideshow_link\">\r\n                            <img decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support.png\" class=\"attachment-full size-full\" alt=\"Nextcloud Hub 25 Autumn: Nextcloud Whiteboard library and grid support\" srcset=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support.png 1920w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support-300x169.png 300w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support-1024x576.png 1024w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support-768x432.png 768w, https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/Whiteboard-library-support-1536x864.png 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>                        <\/a>\r\n                                            <\/div>\r\n                                    <div class=\"gallery_item\" id=\"216420\">\r\n                        <a href=\"https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck.png\" class=\"simple_slider_slideshow_link\">\r\n                            <img decoding=\"async\" width=\"3024\" height=\"1719\" src=\"https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck.png\" class=\"attachment-full size-full\" alt=\"Nextcloud Office file widget in Deck\" srcset=\"https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck.png 3024w, https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck-300x171.png 300w, https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck-1013x576.png 1013w, https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck-768x437.png 768w, https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck-1536x873.png 1536w, https:\/\/nextcloud.com\/c\/uploads\/2024\/05\/Nextcloud-Office-file-widget-in-Deck-2048x1164.png 2048w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/>                        <\/a>\r\n                                            <\/div>\r\n                            <\/ul>\r\n        \t<\/div>\r\n<\/section>\r\n<script>\r\n    jQuery(document).ready(function ($) {\r\n        var owl_simple_slider = $('.simple_slider_slideshow');\r\n        owl_simple_slider.owlCarousel({\r\n            loop: false,\r\n            stagePadding: 50,\r\n            autoplay: true,\r\n            margin:10,\r\n            dots: false,\r\n            nav:true,\r\n            responsive:{\r\n                0:{\r\n                    items:1\r\n                },\r\n                600:{\r\n                    items:1\r\n                },\r\n                800:{\r\n                    items:1\r\n                },\r\n                1000:{\r\n                    items:1\r\n                }\r\n            },\r\n            onDragged: owl_stop_autoplay,\r\n            autoplayHoverPause:true,\r\n            onInitialized: function (event) {\r\n\t\t\t\t\/\/ Remove role=\"presentation\" from arrows\r\n\t\t\t\t$('.owl-prev, .owl-next').removeAttr('role');\r\n\t\t\t\t$('.owl-prev, .owl-next').attr('tabindex', 0);\r\n\t\t\t}\r\n        });\r\n\r\n        \/\/ Assign original indices to real (non-cloned) items\r\n\t\towl_simple_slider.find('.owl-item:not(.cloned)').each(function (i) {\r\n\t\t\t$(this).attr('data-original-index', i);\r\n\t\t});\r\n\r\n\t\t\/\/ Focus handling for links, buttons, inputs, etc.\r\n\t\towl_simple_slider.on('focusin', '.owl-item a, .owl-item button, .owl-item input', function () {\r\n\t\t\tconst $focusedItem = $(this).closest('.owl-item');\r\n\r\n\t\t\tif (!$focusedItem.length || $focusedItem.hasClass('cloned')) {\r\n\t\t\t\/\/ Try to find the real item (not a clone)\r\n\t\t\tconst realIndex = $focusedItem.data('original-index');\r\n\t\t\tif (typeof realIndex !== 'undefined') {\r\n\t\t\t\towl_simple_slider.trigger('to.owl.carousel', [realIndex, 300, true]);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst index = $focusedItem.data('original-index');\r\n\t\t\tif (typeof index !== 'undefined') {\r\n\t\t\towl_simple_slider.trigger('to.owl.carousel', [index, 300, true]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n        owl_simple_slider.on('click', function(e) {\r\n            owl_stop_autoplay();\r\n        });\r\n        function owl_stop_autoplay() {\r\n            \/\/console.log('autoplay stopped.');\r\n            owl_simple_slider.trigger('stop.owl.autoplay');\r\n        }\r\n\r\n    });\r\n<\/script>\r\n\n\n\n<p>We also use them in Nextcloud Collectives and Nextcloud Deck, as those are based on Nextcloud Text, to automatically update the content if others make changes. For example, reorder the page list or edit the content on Nextcloud Deck cards. In this case, the real-time features also rely on the Nextcloud Files High-Performance Backend.<\/p>\n\n\n\n<p>Another interesting example is Nextcloud Whiteboard. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example: WebSockets in Nextcloud Whiteboard app<\/h3>\n\n\n\n<p>The Nextcloud Whiteboard WebSocket backend acts as the session controller for each whiteboard. It keeps a roster of sockets per board room, announces when someone joins or leaves, and tracks which client is allowed to act as the active editor so the app efficiently decides who should make changes to the board state. <\/p>\n\n\n\n<p>It simply relays the design payloads that clients send, full scene snapshots, incremental updates, and binary attachments, to everyone else in the room. <\/p>\n\n\n\n<p>For low-latency signals such as cursor trails, viewport following, or presenter cues, it uses a \u201cvolatile\u201d lane that favors immediacy over reliability, so the UI stays responsive even if an occasional packet is lost.<\/p>\n\n\n\n<p>The same server endpoint handles collaboration extras like image fetch requests, \u201cfollow this user\u201d commands, start and stop of presenting, and the triggers that tell the headless recorder to begin or end a capture. <\/p>\n\n\n\n<p>If you scale out, the service can plug into Redis streams for room fan-out and exposes metrics so operators can watch connection counts and cache health, but otherwise it\u2019s a lean relay dedicated to keeping the live collaboration loop tight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Other updates for developers in Nextcloud Hub 25 Autumn<\/h2>\n\n\n\n<p>Within the Nextcloud ecosystem, you can create apps in any programming language. At your service are our\u00a0<a href=\"https:\/\/docs.nextcloud.com\/server\/latest\/developer_manual\/_static\/openapi.html#\/\" target=\"_blank\" rel=\"noreferrer noopener\">complete API documentation<\/a> and a\u00a0growing library of ready tutorials. Check out the AppAPI and External Apps manual to read more about managing ExApps, using AppAPI, and HaRP.<\/p>\n\n\n\n<p>Nextcloud Hub 25 Autumn brings more updates for developers of Nextcloud apps, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list nc-list\">\n<li class=\"nc-list\">Migration of the Nextcloud ecosystem to the Vue3 framework<\/li>\n\n\n\n<li class=\"nc-list\">Mobile framework upgrades<\/li>\n\n\n\n<li class=\"nc-list\">Many updates in Nextcloud APIs<\/li>\n\n\n\n<li class=\"nc-list\">And more<\/li>\n<\/ul>\n\n\n\n<p>Read more about all the new features in the <a href=\"https:\/\/nextcloud.com\/blog\/nextcloud-hub25-autumn\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nextcloud Hub 25 Autumn<\/a> release blog.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>More in the Nextcloud Hub 25 Autumn blog series:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list nc-list\">\n<li class=\"nc-list\"><a href=\"https:\/\/nextcloud.com\/blog\/nextcloud-hub25-autumn\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nextcloud Hub 25 Autumn: Your digital workspace, ready in no time<\/a><\/li>\n\n\n\n<li class=\"nc-list\"><a href=\"https:\/\/nextcloud.com\/blog\/reclaim-your-schedule-and-your-privacy-with-nextcloud-calendar-discover-the-2025-updates\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reclaim your schedule and your privacy with Nextcloud Calendar. Discover the 2025 updates!<\/a><\/li>\n\n\n\n<li class=\"nc-list\"><a href=\"https:\/\/nextcloud.com\/blog\/how-to-automate-tasks-with-open-source-ai-agent-tools-in-nextcloud-assistant\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to automate tasks with open source AI agent tools in Nextcloud Assistant<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nextcloud.com\/blog\/top-10-tips-to-fight-virtual-meeting-fatigue-with-nextcloud-talks-2025-updates\/\" target=\"_blank\" rel=\"noreferrer noopener\">Top 10 tips to fight virtual meeting fatigue with Nextcloud Talk\u2019s 2025 updates<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Nextcloud Hub 25 Autumn: Your digital workspace, ready in no time<\/h2>\n\n\n\n<p>Watch our launch presentation to discover all the new features of Nextcloud Hub 25 Autumn. Wish to experience them first-hand right away? Sign up for an instant trial or get the new version now!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Introducing Nextcloud Hub 25 Autumn: your digital workspace, ready in no time!\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/3jcYJGQgenI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<section class=\"promo-section   has_custom_bg_image no-overlay full-width \" id=\"cta\" style=\"background-image: url(https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/nextcloud-hub25autumn-featured-image-final-bg2-2.jpg);\" data-expiration=\"\">\n\t<div class=\"container\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-12\">\n\t\t\t\t<div class=\"text-block\">\n\t\t\t\t\t<div class=\"icon\"><img decoding=\"async\" src=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/09\/download-icon.svg\" alt=\"Nextcloud - Get Nextcloud Hub 25 Autumn now!\"\/><\/div><h2>Get Nextcloud Hub 25 Autumn now!<\/h2><p>Start your instant trial right away or download the latest version!<\/p>\n\t\t\t\t\t\t<div class=\"btns-inline-centered\">\n\t\t\t\t\t\t\t<a class=\"c-btn btn-white\" href=\"https:\/\/nextcloud.com\/instant-trial\/\" target=\"_blank\">Try now<\/a><a class=\"c-btn btn-white-outline\" href=\"https:\/\/nextcloud.com\/install\/\" target=\"_blank\">Download Nextcloud Hub<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>WebSockets support in the Nextcloud AppAPI enables lower latency, no polling, and cleaner architectures for real\u2011time features. <\/p>\n","protected":false},"author":33,"featured_media":347001,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"publish_to_discourse":"","publish_post_category":"22","wpdc_auto_publish_overridden":"1","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"697887","discourse_permalink":"https:\/\/help.nextcloud.com\/t\/websockets-in-nextcloud-creating-real-time-apps-via-appapi\/234975","wpdc_publishing_response":"success","wpdc_publishing_error":"","footnotes":""},"categories":[11,292,12,1],"tags":[],"class_list":["post-346923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-developer-tutorials","category-general","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud<\/title>\n<meta name=\"description\" content=\"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud\" \/>\n<meta property=\"og:description\" content=\"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\" \/>\n<meta property=\"og:site_name\" content=\"Nextcloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Nextclouders\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-30T09:58:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T07:54:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mikhail Korotaev\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nextclouders\" \/>\n<meta name=\"twitter:site\" content=\"@nextclouders\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mikhail Korotaev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\"},\"author\":{\"name\":\"Mikhail Korotaev\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/c4131c923c11769c06b82290f98f8ac8\"},\"headline\":\"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI\",\"datePublished\":\"2025-10-30T09:58:34+00:00\",\"dateModified\":\"2025-11-14T07:54:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\"},\"wordCount\":934,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png\",\"articleSection\":[\"Blog\",\"Developer Tutorials\",\"General\",\"Uncategorized\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\",\"url\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\",\"name\":\"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud\",\"isPartOf\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png\",\"datePublished\":\"2025-10-30T09:58:34+00:00\",\"dateModified\":\"2025-11-14T07:54:53+00:00\",\"description\":\"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.\",\"breadcrumb\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage\",\"url\":\"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png\",\"contentUrl\":\"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png\",\"width\":1920,\"height\":1080,\"caption\":\"Featured image: WebSockets in Nextcloud, creating real\u2011time apps via AppAPI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nextcloud.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#website\",\"url\":\"https:\/\/nextcloud.com\/nl\/\",\"name\":\"Nextcloud\",\"description\":\"Regain control over your data\",\"publisher\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nextcloud.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#organization\",\"name\":\"Nextcloud\",\"url\":\"https:\/\/nextcloud.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nextcloud.com\/c\/uploads\/2022\/10\/nextcloud-logo-blue-transparent.svg\",\"contentUrl\":\"https:\/\/nextcloud.com\/c\/uploads\/2022\/10\/nextcloud-logo-blue-transparent.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"Nextcloud\"},\"image\":{\"@id\":\"https:\/\/nextcloud.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Nextclouders\/\",\"https:\/\/x.com\/nextclouders\",\"https:\/\/www.linkedin.com\/company\/10827569\/\",\"https:\/\/youtube.com\/nextcloud\",\"https:\/\/www.instagram.com\/nextclouders\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/c4131c923c11769c06b82290f98f8ac8\",\"name\":\"Mikhail Korotaev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/50239e6d041bd078acdbbdad43132efabac4ca0799ae3eb97ec30bc09b62e515?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/50239e6d041bd078acdbbdad43132efabac4ca0799ae3eb97ec30bc09b62e515?s=96&d=mm&r=g\",\"caption\":\"Mikhail Korotaev\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud","description":"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/","og_locale":"nl_NL","og_type":"article","og_title":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud","og_description":"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.","og_url":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/","og_site_name":"Nextcloud","article_publisher":"https:\/\/www.facebook.com\/Nextclouders\/","article_published_time":"2025-10-30T09:58:34+00:00","article_modified_time":"2025-11-14T07:54:53+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","type":"image\/png"}],"author":"Mikhail Korotaev","twitter_card":"summary_large_image","twitter_creator":"@nextclouders","twitter_site":"@nextclouders","twitter_misc":{"Geschreven door":"Mikhail Korotaev","Geschatte leestijd":"5 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#article","isPartOf":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/"},"author":{"name":"Mikhail Korotaev","@id":"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/c4131c923c11769c06b82290f98f8ac8"},"headline":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI","datePublished":"2025-10-30T09:58:34+00:00","dateModified":"2025-11-14T07:54:53+00:00","mainEntityOfPage":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/"},"wordCount":934,"commentCount":0,"publisher":{"@id":"https:\/\/nextcloud.com\/nl\/#organization"},"image":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage"},"thumbnailUrl":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","articleSection":["Blog","Developer Tutorials","General","Uncategorized"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/","url":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/","name":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI - Nextcloud","isPartOf":{"@id":"https:\/\/nextcloud.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage"},"image":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage"},"thumbnailUrl":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","datePublished":"2025-10-30T09:58:34+00:00","dateModified":"2025-11-14T07:54:53+00:00","description":"Discover WebSockets support in the Nextcloud AppAPI for lower latency, no polling, and cleaner architectures for real\u2011time features.","breadcrumb":{"@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#primaryimage","url":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","contentUrl":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","width":1920,"height":1080,"caption":"Featured image: WebSockets in Nextcloud, creating real\u2011time apps via AppAPI"},{"@type":"BreadcrumbList","@id":"https:\/\/nextcloud.com\/nl\/blog\/websockets-in-nextcloud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nextcloud.com\/nl\/"},{"@type":"ListItem","position":2,"name":"WebSockets in Nextcloud: creating real\u2011time apps via AppAPI"}]},{"@type":"WebSite","@id":"https:\/\/nextcloud.com\/nl\/#website","url":"https:\/\/nextcloud.com\/nl\/","name":"Nextcloud","description":"Regain control over your data","publisher":{"@id":"https:\/\/nextcloud.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nextcloud.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/nextcloud.com\/nl\/#organization","name":"Nextcloud","url":"https:\/\/nextcloud.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/nextcloud.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/nextcloud.com\/c\/uploads\/2022\/10\/nextcloud-logo-blue-transparent.svg","contentUrl":"https:\/\/nextcloud.com\/c\/uploads\/2022\/10\/nextcloud-logo-blue-transparent.svg","width":"1024","height":"1024","caption":"Nextcloud"},"image":{"@id":"https:\/\/nextcloud.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Nextclouders\/","https:\/\/x.com\/nextclouders","https:\/\/www.linkedin.com\/company\/10827569\/","https:\/\/youtube.com\/nextcloud","https:\/\/www.instagram.com\/nextclouders\/"]},{"@type":"Person","@id":"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/c4131c923c11769c06b82290f98f8ac8","name":"Mikhail Korotaev","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/nextcloud.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/50239e6d041bd078acdbbdad43132efabac4ca0799ae3eb97ec30bc09b62e515?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/50239e6d041bd078acdbbdad43132efabac4ca0799ae3eb97ec30bc09b62e515?s=96&d=mm&r=g","caption":"Mikhail Korotaev"}}]}},"featured_media_url":"https:\/\/nextcloud.com\/c\/uploads\/2025\/10\/WebSockets-in-Nextcloud-creating-real\u2011time-apps-via-AppAPI.png","_links":{"self":[{"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/posts\/346923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/comments?post=346923"}],"version-history":[{"count":14,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/posts\/346923\/revisions"}],"predecessor-version":[{"id":351502,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/posts\/346923\/revisions\/351502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/media\/347001"}],"wp:attachment":[{"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/media?parent=346923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/categories?post=346923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nextcloud.com\/nl\/wp-json\/wp\/v2\/tags?post=346923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}