<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://docs-deserve.neabyte.com/by-design/bearer-auth</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/bearer-auth"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/bearer-auth"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/bearer-auth</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/bearer-auth"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/bearer-auth"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/cache</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/cache"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/cache"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/cache</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/cache"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/cache"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/compress</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/compress"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/compress"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/compress</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/compress"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/compress"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/https-redirect</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/https-redirect"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/https-redirect"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/https-redirect</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/https-redirect"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/https-redirect"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/locale-redirect</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/locale-redirect"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/locale-redirect"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/locale-redirect</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/locale-redirect"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/locale-redirect"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/method-override</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/method-override"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/method-override"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/method-override</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/method-override"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/method-override"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/pretty-json</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/pretty-json"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/pretty-json"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/pretty-json</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/pretty-json"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/pretty-json"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/rate-limit</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/rate-limit"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/rate-limit"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/rate-limit</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/rate-limit"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/rate-limit"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/request-id</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/request-id"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/request-id"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/request-id</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/request-id"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/request-id"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/server-timing</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/server-timing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/server-timing"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/server-timing</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/server-timing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/server-timing"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/tracing</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/tracing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/tracing"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/tracing</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/tracing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/tracing"/></url><url><loc>https://docs-deserve.neabyte.com/by-design/xss</loc><lastmod>2026-06-09T10:15:08.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/xss"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/xss"/></url><url><loc>https://docs-deserve.neabyte.com/id/by-design/xss</loc><lastmod>2026-06-09T10:23:42.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/by-design/xss"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/by-design/xss"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/context-object</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/context-object"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/context-object"/></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/context-object</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/context-object"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/context-object"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/file-based-routing</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/file-based-routing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/file-based-routing"/></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/file-based-routing</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/file-based-routing"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/file-based-routing"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/hot-reload</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/hot-reload"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/hot-reload"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/hot-reload-principles.png</image:loc><image:caption>An abstract view of why reloading stays safe, where applying a file change live rests on three mechanisms that hold together, isolating each file with a try catch so a bad one never crashes the others, busting the module cache with a timestamp query so stale code never contaminates the new, and reloading in sequence by removing then registering after a debounce, which together deliver live edits with no downtime, no crash, and no contamination</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/hot-reload-route-sequence.png</image:loc><image:caption>The route reload sequence as the watcher runs it, where Deno.watchFs detects a change and debounces for 150ms, FastRouter.remove drops the old pattern, the module is re-imported with a timestamp query to bypass the cache, then it is validated for an HTTP method and its handlers register while emitting route:reloaded, and any failure in that step instead emits reload:error so the server stays alive and other routes are unaffected</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/hot-reload</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/hot-reload"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/hot-reload"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/hot-reload-principles.png</image:loc><image:caption>Pandangan abstrak kenapa reload tetap aman, di mana menerapkan perubahan berkas secara live bertumpu pada tiga mekanisme yang berpegangan bersama, mengisolasi tiap berkas dengan try catch agar yang buruk tak pernah membuat yang lain crash, membuang cache modul dengan query timestamp agar kode basi tak pernah mengontaminasi yang baru, dan memuat ulang secara berurutan dengan menghapus lalu mendaftar setelah debounce, yang bersama menghadirkan edit live tanpa downtime, tanpa crash, dan tanpa kontaminasi</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/hot-reload-route-sequence.png</image:loc><image:caption>Urutan reload rute sebagaimana watcher menjalankannya, di mana Deno.watchFs mendeteksi perubahan lalu mendebounce 150ms, FastRouter.remove melepas pola lama, modul diimpor ulang dengan query timestamp untuk melewati cache, lalu divalidasi punya metode HTTP dan handler-nya didaftarkan sambil memancarkan route:reloaded, dan kegagalan apa pun di langkah itu malah memancarkan reload:error sehingga server tetap hidup dan rute lain tak terpengaruh</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/multi-service</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/multi-service"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/multi-service"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/process-overview.png</image:loc><image:caption>One Deno process running an API, Auth, and Web router, each on its own port with a client connecting to each</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/router-isolation.png</image:loc><image:caption>Each router keeps its own FastRouter, middleware, and watcher in isolation, with the Web router also holding a DVE engine</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/shared-code-state.png</image:loc><image:caption>Services importing shared modules and communicating through an in-process session store, event bus, and cache</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/event-bus.png</image:loc><image:caption>The API service emits an event to the EventBus, which notifies the Auth and Web services</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/per-service-middleware.png</image:loc><image:caption>Each service composes its own middleware chain before its routes: API runs CORS then BodyLimit, Auth runs SecHeaders, Web runs routes with DVE</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/observability.png</image:loc><image:caption>A single OTel middleware collects spans from every service and exports them to an OTel Collector, then on to Jaeger, Grafana, or Datadog</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/reverse-proxy.png</image:loc><image:caption>A reverse proxy such as Nginx or Caddy maps each hostname to a per-service port: api.example.com to 3001, auth.example.com to 3002, and example.com to 3003</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/scaling-out.png</image:loc><image:caption>Extracting services from a single process into separate API, Auth, and Web processes</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/multi-service</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/multi-service"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/multi-service"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/process-overview.png</image:loc><image:caption>Satu proses Deno menjalankan router API, Auth, dan Web, masing-masing di port sendiri dengan satu klien terhubung ke tiap port</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/router-isolation.png</image:loc><image:caption>Setiap router punya FastRouter, middleware, dan watcher sendiri secara terisolasi, dengan router Web juga memegang DVE engine</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/shared-code-state.png</image:loc><image:caption>Service mengimpor modul shared dan berkomunikasi lewat session store, event bus, dan cache dalam proses</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/event-bus.png</image:loc><image:caption>Service API memancarkan event ke EventBus, yang memberi tahu service Auth dan Web</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/per-service-middleware.png</image:loc><image:caption>Setiap service menyusun rantai middleware sendiri sebelum rutenya: API menjalankan CORS lalu BodyLimit, Auth menjalankan SecHeaders, Web menjalankan rute dengan DVE</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/observability.png</image:loc><image:caption>Satu middleware OTel mengumpulkan span dari setiap service dan mengekspornya ke OTel Collector, lalu ke Jaeger, Grafana, atau Datadog</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/reverse-proxy.png</image:loc><image:caption>Reverse proxy seperti Nginx atau Caddy memetakan tiap hostname ke port per-service: api.example.com ke 3001, auth.example.com ke 3002, dan example.com ke 3003</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/scaling-out.png</image:loc><image:caption>Mengekstrak service dari satu proses menjadi proses API, Auth, dan Web yang terpisah</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/philosophy</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/philosophy"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/philosophy"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/philosophy-beliefs-to-features.png</image:loc><image:caption>Each of the four core beliefs maps to a concrete feature you can reach today, where fewer moving parts leads to zero dependency, structure is the API leads to file-based routing, build on the platform leads to native HTTP and streams, and experience that scales leads to built for teams</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/philosophy-principle-web.png</image:loc><image:caption>An abstract view of how the beliefs think as one mind, where a single root idea of staying as small as the problem feeds all four beliefs, the beliefs reinforce one another down the chain, and together they converge on the conclusion that simple is safe because less code means less that can go wrong</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/philosophy</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/philosophy"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/philosophy"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/philosophy-beliefs-to-features.png</image:loc><image:caption>Masing-masing dari empat keyakinan inti memetakan ke fitur konkret yang bisa dipakai hari ini, di mana lebih sedikit bagian bergerak menuju zero dependency, struktur adalah API menuju file-based routing, bangun di atas platform menuju HTTP dan stream native, dan pengalaman yang ikut tumbuh menuju dibangun untuk tim</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/philosophy-principle-web.png</image:loc><image:caption>Pandangan abstrak bagaimana keyakinan berpikir sebagai satu pikiran, di mana satu ide akar tetap sekecil masalah memberi makan keempat keyakinan, keyakinan saling menguatkan menyusuri rantai, dan bersama mereka menyatu pada kesimpulan bahwa sederhana itu aman sebab makin sedikit kode berarti makin sedikit yang bisa salah</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/request-handling</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/request-handling"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/request-handling"/></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/request-handling</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/request-handling"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/request-handling"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/route-patterns</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/route-patterns"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/route-patterns"/></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/route-patterns</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/route-patterns"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/route-patterns"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/worker-pool</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/worker-pool"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/worker-pool"/></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/worker-pool</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/worker-pool"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/worker-pool"/></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/zero-dependency</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/zero-dependency"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/zero-dependency"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-supply-chain.png</image:loc><image:caption>A Node project pulls app code through the npm registry into hundreds of transitive dependencies where any update can be hostile, while a Deserve project uses only the Deno runtime and a few audited JSR modules</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-runtime-primitives.png</image:loc><image:caption>Deserve draws request handling, file watching, security primitives, and permission flags straight from the built-in Deno runtime, so no npm package is needed</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-process-guard.png</image:loc><image:caption>A process sentinel interposes known termination calls, so self-targeted Deno.exit and process.exit are blocked and unhandled rejections are trapped while a kill aimed at another pid still passes through, keeping the process alive and emitting a process error event</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-best-effort.png</image:loc><image:caption>What the guard protects against, self termination, uncaught faults, and denial of service, set beside what it does not do, since it is not a sandbox and untrusted code still runs, so it pairs with Deno permission flags and dependency review</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/zero-dependency</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/core-concepts/zero-dependency"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/core-concepts/zero-dependency"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-supply-chain.png</image:loc><image:caption>Proyek Node menarik kode aplikasi lewat registry npm ke ratusan dependensi transitif yang pembaruannya bisa berbahaya, sementara proyek Deserve hanya memakai runtime Deno dan sedikit modul JSR yang teraudit</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-runtime-primitives.png</image:loc><image:caption>Deserve mengambil penanganan request, pemantauan berkas, primitif keamanan, dan flag izin langsung dari runtime Deno bawaan, jadi tidak butuh paket npm</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-process-guard.png</image:loc><image:caption>Sebuah sentinel proses menyela panggilan terminasi yang dikenal, jadi Deno.exit dan process.exit ke diri sendiri diblokir dan unhandled rejection ditangkap sementara kill ke pid lain tetap lewat, menjaga proses tetap hidup dan memancarkan event process error</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/zero-dep-best-effort.png</image:loc><image:caption>Apa yang dilindungi guard, terminasi diri, fault tak tertangkap, dan denial of service, disandingkan dengan apa yang tidak dilakukannya, karena ini bukan sandbox dan kode tak tepercaya tetap berjalan, jadi ia berpasangan dengan flag izin Deno dan review dependensi</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/error-handling/default-behavior</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/default-behavior"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/default-behavior"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/default-error-behavior.png</image:loc><image:caption>When an error occurs, the request routes to a custom handler if router.catch is defined, otherwise to the default handler that returns JSON or HTML by Accept, then a single response</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/error-handling/default-behavior</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/default-behavior"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/default-behavior"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/default-error-behavior.png</image:loc><image:caption>Saat error terjadi, request diarahkan ke custom handler jika router.catch terdefinisi, jika tidak ke default handler yang mengembalikan JSON atau HTML sesuai Accept, lalu satu response</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/error-handling/defense-in-depth</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/defense-in-depth"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/defense-in-depth"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/defense-in-depth.png</image:loc><image:caption>Five layered error defenses: route handler try/catch, WrapMware labeled catch, router.catch custom handler, default handler with masked message, and the process guard that never crashes</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/error-handling/defense-in-depth</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/defense-in-depth"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/defense-in-depth"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/defense-in-depth.png</image:loc><image:caption>Lima lapis pertahanan error: try/catch route handler, WrapMware labeled catch, custom handler router.catch, default handler dengan pesan tersamar, dan process guard yang tidak pernah crash</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/error-handling/object-details</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/object-details"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/object-details"/></url><url><loc>https://docs-deserve.neabyte.com/id/error-handling/object-details</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/error-handling/object-details"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/error-handling/object-details"/></url><url><loc>https://docs-deserve.neabyte.com/examples</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/examples"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/examples"/></url><url><loc>https://docs-deserve.neabyte.com/id/examples</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/examples"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/examples"/></url><url><loc>https://docs-deserve.neabyte.com/getting-started/built-for-teams</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/built-for-teams"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/built-for-teams"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-junior-ships.png</image:loc><image:caption>A junior ships on day one: creating routes/products/index.ts triggers the watcher's file-created event, the module is imported and its GET handler registered, and the route answers GET /products on the next request, with no restart and no shared config edit so there is no merge conflict</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-shared-rules.png</image:loc><image:caption>Shared rules in one place: securityHeaders() registered with router.use(fn) reaches every route, while basicAuth() registered with router.use('/admin', fn) reaches only /admin/*, so one developer can own auth and another own logging without touching each other's route files</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-many-hands.png</image:loc><image:caption>Many hands, one process: a single Deno process runs an API router owned by dev A on port 3001 and an Auth router owned by dev B on port 3002, each with its own routesDir and file watcher, so the two developers work in parallel without separate deployments or network glue</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/getting-started/built-for-teams</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/built-for-teams"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/built-for-teams"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-junior-ships.png</image:loc><image:caption>Junior merilis di hari pertama: membuat routes/products/index.ts memicu event file-created dari watcher, modulnya diimpor dan handler GET-nya didaftarkan, lalu rute menjawab GET /products pada request berikutnya, tanpa restart dan tanpa edit config bersama sehingga tidak ada konflik merge</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-shared-rules.png</image:loc><image:caption>Aturan bersama di satu tempat: securityHeaders() yang didaftarkan dengan router.use(fn) menjangkau setiap rute, sedangkan basicAuth() yang didaftarkan dengan router.use('/admin', fn) hanya menjangkau /admin/*, jadi satu developer bisa memegang auth dan yang lain memegang logging tanpa menyentuh berkas rute satu sama lain</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/team-many-hands.png</image:loc><image:caption>Banyak tangan, satu proses: satu proses Deno menjalankan router API milik dev A di port 3001 dan router Auth milik dev B di port 3002, masing-masing dengan routesDir dan file watcher sendiri, jadi kedua developer bekerja paralel tanpa deployment terpisah atau lem jaringan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/getting-started/installation</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/installation"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/installation"/></url><url><loc>https://docs-deserve.neabyte.com/id/getting-started/installation</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/installation"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/installation"/></url><url><loc>https://docs-deserve.neabyte.com/getting-started/quick-start</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/quick-start"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/quick-start"/></url><url><loc>https://docs-deserve.neabyte.com/id/getting-started/quick-start</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/quick-start"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/quick-start"/></url><url><loc>https://docs-deserve.neabyte.com/getting-started/routes-configuration</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/routes-configuration"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/routes-configuration"/></url><url><loc>https://docs-deserve.neabyte.com/id/getting-started/routes-configuration</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/routes-configuration"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/routes-configuration"/></url><url><loc>https://docs-deserve.neabyte.com/getting-started/server-configuration</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/server-configuration"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/server-configuration"/></url><url><loc>https://docs-deserve.neabyte.com/id/getting-started/server-configuration</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/getting-started/server-configuration"/><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/getting-started/server-configuration"/></url><url><loc>https://docs-deserve.neabyte.com/id/</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/"/></url><url><loc>https://docs-deserve.neabyte.com/</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/basic-auth</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/basic-auth"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/basic-auth"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/basic-auth</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/basic-auth"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/basic-auth"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/body-limit</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/body-limit"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/body-limit"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/body-limit</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/body-limit"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/body-limit"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/cors</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/cors"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/cors"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/cors</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/cors"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/cors"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/csrf</loc><lastmod>2026-06-09T01:34:32.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/csrf"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/csrf"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/csrf</loc><lastmod>2026-06-09T01:34:24.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/csrf"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/csrf"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/global</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/global"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/global"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-global-registration.png</image:loc><image:caption>Pendaftaran dan posisi Global Middleware: tiap router.use(fn) menambahkan entry path-kosong yang cocok untuk setiap request dan berjalan sebelum route matching, dalam urutan pendaftaran</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/global</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/global"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/global"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-global-registration.png</image:loc><image:caption>Global Middleware registration and position: each router.use(fn) appends a path-empty entry that matches every request and runs before route matching, in registration order</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-global-flow.png</image:loc><image:caption>Global Middleware per-request control flow: return await next() continues the chain, returning a Response stops and skips the handler, returning undefined is pass-through; throwing routes to router.catch or 500, and stalling triggers the requestTimeoutMs 503 guard</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/ip</loc><lastmod>2026-06-09T01:34:32.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/ip"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/ip"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/ip</loc><lastmod>2026-06-09T01:34:24.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/ip"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/ip"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/observability/errors</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/errors"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/errors"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-process-fault.png</image:loc><image:caption>Unhandled rejection, uncaught error, dan terminasi diri yang diblokir masing-masing jadi event process:error yang membawa origin dan error-nya, jadi proses tetap berjalan tanpa downtime dan kesalahan tertangkap di listener router.on yang sama alih-alih hilang karena crash</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-catch-vs-on.png</image:loc><image:caption>Satu request gagal menyebar ke dua hook independen, di mana router.catch membentuk Response yang diterima klien dengan status dan body terkontrol, dan router.on mencatat kegagalan yang sama ke log dan metrik tanpa memengaruhi balasan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/observability/errors</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/errors"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/errors"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-process-fault.png</image:loc><image:caption>Unhandled rejections, uncaught errors, and blocked self-termination each become a process:error event carrying its origin and error, so the process keeps running with no downtime and the fault is captured in the same router.on listener instead of being lost to a crash</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-catch-vs-on.png</image:loc><image:caption>One failed request fans out to two independent hooks, where router.catch shapes the Response the client receives with a controlled status and body, and router.on records the same failure into logs and metrics without affecting the reply</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/observability/events</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/events"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/events"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-event-channel.png</image:loc><image:caption>Event request bernilai external secara default tapi jadi internal ketika timeout, error framework, atau context yang hilang yang memicunya, sementara setiap kind non-request selalu internal, jadi merutekan berdasarkan field type menjaga lalu lintas klien normal tetap di luar kanal alert kesalahan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/observability/events</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/events"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/events"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-event-channel.png</image:loc><image:caption>A request event is external by default but becomes internal when a timeout, a framework error, or a missing context produced it, while every non-request kind is always internal, so routing on the type field keeps normal client traffic out of the fault alert channel</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/observability/logging</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/logging"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/logging"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-request-lifecycle.png</image:loc><image:caption>Setiap request yang selesai memancarkan request:complete dengan metrik selaras OpenTelemetry, dan request dengan status 400 atau lebih juga memancarkan request:error yang membawa error asli, jadi satu listener router.on menyebarkan amplop yang sama ke satu baris access log, peringatan request lambat yang disaring berdasarkan durasi, dan laporan error</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/observability/logging</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/logging"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/logging"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-request-lifecycle.png</image:loc><image:caption>Every finished request emits request:complete with OpenTelemetry-aligned metrics, and a request with status 400 or higher also emits request:error carrying the original error, so one router.on listener fans the same envelope into an access log line, a slow request warning filtered by duration, and an error report</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/observability/overview</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/overview"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-single-bus.png</image:loc><image:caption>Sinyal server, rute, view, request, dan proses semua menyatu ke satu event bus yang menyebarkan tiap event ke satu listener router.on, tempat kamu menyaring berdasarkan kind event, dan emit jadi no-op selama belum ada listener terdaftar</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/observability/overview</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/observability/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/observability/overview"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/obs-single-bus.png</image:loc><image:caption>Server, route, view, request, and process signals all funnel into a single event bus that fans every event to one router.on listener, where you filter by event kind, and the emit is a no-op while no listener is registered</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/route-specific</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/route-specific"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/route-specific"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/route-specific</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/route-specific"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/route-specific"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-route-matching.png</image:loc><image:caption>Route-Specific prefix matching: router.use('/api', fn) matches /api exactly and /api/users on a boundary slash, but skips /apiv2 and /admin because they are not boundary matches of the prefix</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-route-chain.png</image:loc><image:caption>Route-Specific execution for GET /api/users in one chain: the global logger runs, the /api auth runs on a prefix match, the /admin guard is skipped because it does not match without consuming a turn, the /api/users logger runs, then the route handler executes, all in registration order</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/security-headers</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/security-headers"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/security-headers"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/security-headers</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/security-headers"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/security-headers"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/session</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/session"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/session"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/session</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/session"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/session"/></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/websocket</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/websocket"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/websocket"/></url><url><loc>https://docs-deserve.neabyte.com/middleware/websocket</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/websocket"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/websocket"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/file-upload</loc><lastmod>2026-06-09T12:00:17.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/file-upload"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/file-upload"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/file-upload</loc><lastmod>2026-06-09T12:00:11.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/file-upload"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/file-upload"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/streaming-data</loc><lastmod>2026-06-09T12:00:17.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/streaming-data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/streaming-data"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/streaming-data</loc><lastmod>2026-06-09T12:00:11.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/streaming-data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/streaming-data"/></url><url><loc>https://docs-deserve.neabyte.com/id/rendering/</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/"/></url><url><loc>https://docs-deserve.neabyte.com/rendering/</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/"/></url><url><loc>https://docs-deserve.neabyte.com/id/rendering/performance</loc><lastmod>2026-06-09T01:34:32.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/performance"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/performance"/></url><url><loc>https://docs-deserve.neabyte.com/rendering/performance</loc><lastmod>2026-06-09T01:34:24.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/performance"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/performance"/></url><url><loc>https://docs-deserve.neabyte.com/id/rendering/streaming</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/streaming"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/streaming"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-vs-blocking.png</image:loc><image:caption>Berdampingan, ctx.render membangun seluruh HTML jadi satu string lalu mengirim semuanya sekaligus sehingga klien menunggu, sementara ctx.streamRender mengompilasi di awal, mengembalikan ReadableStream, dan menulis tiap node saat diproduksi sehingga byte pertama keluar lebih cepat</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-pipeline.png</image:loc><image:caption>Rute meng-await ctx.streamRender, engine meresolusi dan mengompilasi template, membuat TransformStream, mengembalikan sisi readable seketika sehingga header response terkirim, lalu merender ke sisi writable di latar belakang di mana kegagalan muncul sebagai event view error</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-chunks.png</image:loc><image:caption>Streaming melooping node template tingkat atas dan menulis tiap potongan yang diproduksi secara berurutan, jadi node teks ter-flush sendiri, tetapi blok each membangun semua barisnya jadi satu string dulu lalu ter-flush sebagai satu potongan, artinya granularitas streaming per node tingkat atas bukan per item loop</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-ttfb.png</image:loc><image:caption>Perbandingan time to first byte di mana render membuat klien menunggu selama seluruh halaman dibangun sehingga byte pertama datang terlambat, melawan streamRender yang mem-flush node pertama tepat setelah compile sehingga byte pertama datang lebih awal sementara potongan berikutnya terus berdatangan sampai stream ditutup</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/rendering/streaming</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/streaming"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/streaming"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-vs-blocking.png</image:loc><image:caption>Side by side, ctx.render builds the whole HTML into one string and sends it all at once so the client waits, while ctx.streamRender compiles up front, returns a ReadableStream, and writes each node as produced so the first bytes leave early</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-pipeline.png</image:loc><image:caption>The route awaits ctx.streamRender, the engine resolves and compiles the template, creates a TransformStream, returns the readable side at once so response headers go out, then renders into the writable side in the background where a failure surfaces as a view error event</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-chunks.png</image:loc><image:caption>Streaming loops the top-level template nodes and writes each produced chunk in order, so a text node flushes on its own, but an each block builds all its rows into one string first and then flushes as a single chunk, meaning the streaming granularity is per top-level node rather than per loop item</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-ttfb.png</image:loc><image:caption>A time to first byte comparison where render makes the client wait while the whole page is built so the first byte lands late, against streamRender which flushes the first node right after compile so the first byte lands early while later chunks keep arriving until the stream closes</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/rendering/syntax</loc><lastmod>2026-06-09T01:34:32.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/syntax"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/syntax"/></url><url><loc>https://docs-deserve.neabyte.com/rendering/syntax</loc><lastmod>2026-06-09T01:34:24.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/rendering/syntax"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/rendering/syntax"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/custom</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/custom"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/custom"/></url><url><loc>https://docs-deserve.neabyte.com/response/custom</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/custom"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/custom"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/data</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/data"/></url><url><loc>https://docs-deserve.neabyte.com/response/data</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/data"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/file</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/file"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/file"/></url><url><loc>https://docs-deserve.neabyte.com/response/file</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/file"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/file"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/html</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/html"/></url><url><loc>https://docs-deserve.neabyte.com/response/html</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/html"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/json</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/json"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/json"/></url><url><loc>https://docs-deserve.neabyte.com/response/json</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/json"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/json"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/redirect</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/redirect"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/redirect"/></url><url><loc>https://docs-deserve.neabyte.com/response/redirect</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/redirect"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/redirect"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/stream</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/stream"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/stream"/></url><url><loc>https://docs-deserve.neabyte.com/response/stream</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/stream"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/stream"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/text</loc><lastmod>2026-06-09T01:34:40.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/text"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/text"/></url><url><loc>https://docs-deserve.neabyte.com/response/text</loc><lastmod>2026-06-09T01:34:14.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/text"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/text"/></url><url><loc>https://docs-deserve.neabyte.com/id/static-file/basic</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/static-file/basic"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/static-file/basic"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-url-to-file.png</image:loc><image:caption>Memanggil router.static dengan prefix garis miring static dan path titik garis miring public mendaftarkan pola garis miring static garis miring bintang bintang, lalu tiap request prefix garis miring static-nya dipotong dari ctx.pathname dan sisanya digabung di bawah public, jadi garis miring static memetakan ke public garis miring index titik html, garis miring static garis miring css garis miring style titik css memetakan ke public garis miring css garis miring style titik css, dan segmen apa pun yang diawali titik atau titik titik atau path yang lolos dari base ditolak dengan 404 sebelum pembacaan apa pun</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/static-file/basic</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/static-file/basic"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/static-file/basic"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-url-to-file.png</image:loc><image:caption>Calling router.static with the prefix slash static and path dot slash public registers the pattern slash static slash star star, then each request has its slash static prefix sliced off ctx.pathname and the remainder joined under public, so slash static maps to public slash index dot html, slash static slash css slash style dot css maps to public slash css slash style dot css, and any segment starting with a dot or dot dot or a path escaping the base is rejected with 404 before any read</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/static-file/multiple</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/static-file/multiple"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/static-file/multiple"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-multiple-dirs.png</image:loc><image:caption>Tiga panggilan static masing-masing mengikat satu prefix url ke foldernya sendiri dengan kebijakan cache sendiri, di mana garis miring admin menyajikan folder admin garis miring dist dengan etag aktif dan cache satu hari, garis miring uploads menyajikan folder uploads dengan etag nonaktif dan tanpa cache, dan garis miring docs menyajikan folder docs garis miring build dengan etag aktif dan cache satu jam</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-prefix-dispatch.png</image:loc><image:caption>Satu request memilih prefix static yang diawalinya, jadi GET garis miring uploads garis miring img garis miring a titik png cocok dengan pola garis miring uploads, prefiksnya dipotong, dan disajikan dari folder uploads dengan etag nonaktif dan tanpa cache, sementara tail yang sama pada GET garis miring docs garis miring img garis miring a titik png malah cocok dengan pola garis miring docs dan disajikan dari docs garis miring build dengan etag aktif dan cache satu jam, membuktikan prefix yang cocok menentukan folder sekaligus kebijakan cache</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/static-file/multiple</loc><lastmod>2026-06-09T05:07:47.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/static-file/multiple"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/static-file/multiple"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-multiple-dirs.png</image:loc><image:caption>Three static calls each bind one url prefix to its own folder with its own cache policy, where slash admin serves the admin slash dist folder with etag on and a one day cache, slash uploads serves the uploads folder with etag off and no cache, and slash docs serves the docs slash build folder with etag on and a one hour cache</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/static-prefix-dispatch.png</image:loc><image:caption>One request picks the static prefix it starts with, so GET slash uploads slash img slash a dot png matches the slash uploads pattern, has its prefix sliced off, and is served from the uploads folder with that prefix etag off and no cache, while the same tail under GET slash docs slash img slash a dot png matches the slash docs pattern instead and is served from docs slash build with etag on and a one hour cache, proving the matched prefix decides both folder and cache policy</image:caption></image:image></url></urlset>