<?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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-10T16:31:49.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-10T16:31:49.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-10T16:31:49.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-16T16:37:23.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-16T16:37:23.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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 validating the new module then swapping it in 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 the watcher detects a change and debounces for 150ms, the module is re-imported with a timestamp query to bypass the cache, then it is validated for an HTTP method, and only after both pass does it remove the old route and register the new handlers while emitting route:updated, and a failure at import or validate instead emits route:failed before any swap so the old route keeps serving and the server stays alive</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/core-concepts/hot-reload</loc><lastmod>2026-06-26T10:46:01.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 memvalidasi modul baru lalu menukarnya masuk 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 watcher mendeteksi perubahan lalu mendebounce 150ms, modul diimpor ulang dengan query timestamp untuk melewati cache, lalu divalidasi punya metode HTTP, dan hanya setelah keduanya lolos pola lama dilepas dan handler baru didaftarkan sambil memancarkan route:updated, dan kegagalan saat impor atau validasi malah memancarkan route:failed sebelum pertukaran apa pun sehingga rute lama tetap melayani dan server tetap hidup</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/core-concepts/multi-service</loc><lastmod>2026-06-26T10:45:45.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 route table, 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-26T10:46:01.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 tabel rute, 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-26T10:45:45.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-10T16:31:12.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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/zero-dependency</loc><lastmod>2026-06-26T10:45:45.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:failed 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-10T16:31:49.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-26T10:45:45.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, and a custom handler that returns a non-Response also falls back to the default handler, 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-26T10:46:01.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-26T10:45:45.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, Wrap.apply labeled catch, router.catch custom handler, default handler with masked message, and the process guard that never crashes</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/error-handling/defense-in-depth</loc><lastmod>2026-06-26T10:46:01.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, Wrap.apply labeled catch, custom handler router.catch, default handler dengan pesan tersamar, dan process guard yang tidak pernah 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/error-handling/object-details</loc><lastmod>2026-06-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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 routes directory 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-26T10:46:01.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 direktori routes dan file watcher sendiri, jadi kedua developer bekerja paralel tanpa deployment terpisah atau lapisan jaringan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/getting-started/installation</loc><lastmod>2026-06-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-global-flow.png</image:loc><image:caption>Alur kontrol per-request Global Middleware: kembalikan await next() melanjutkan rantai, mengembalikan Response berhenti dan melewati handler, mengembalikan undefined adalah pass-through; melempar dialihkan ke router.catch atau 500, dan macet memicu penjaga 503 timeoutMs</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/global</loc><lastmod>2026-06-26T10:45:45.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 timeoutMs 503 guard</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/ip</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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:failed 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></url><url><loc>https://docs-deserve.neabyte.com/middleware/observability/errors</loc><lastmod>2026-06-26T10:45:45.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:failed 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></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/observability/events</loc><lastmod>2026-06-26T10:46:01.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 dipicu oleh timeout, error framework, atau context yang hilang, sementara setiap kind non-request lain bersifat internal kecuali process:failed yang selalu tetap external, 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-26T10:45:45.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 other non-request kind is internal except process:failed which always stays external, 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-26T10:46:01.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:completed dengan metrik selaras OpenTelemetry, dan request dengan status 400 atau lebih juga memancarkan request:failed 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-26T10:45:45.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:completed with OpenTelemetry-aligned metrics, and a request with status 400 or higher also emits request:failed 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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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>Pencocokan prefix Route-Specific: router.use('/api', fn) cocok dengan /api persis dan /api/users pada slash batas, tapi melewati /apiv2 dan /admin karena bukan kecocokan batas dari prefix</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/middleware-route-chain.png</image:loc><image:caption>Eksekusi Route-Specific untuk GET /api/users dalam satu rantai: logger global berjalan, auth /api berjalan pada kecocokan prefix, penjaga /admin dilewati karena tidak cocok tanpa memakai giliran, logger /api/users berjalan, lalu route handler dieksekusi, semua dalam urutan pendaftaran</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/route-specific</loc><lastmod>2026-06-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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/validation/advanced-patterns</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/advanced-patterns"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/advanced-patterns"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-select-validator.png</image:loc><image:caption>Pola selectValidator: sebuah request pada prefix bersama mencapai pemilih yang membaca method dan pathname, mengembalikan schema membangun dan men-cache validator sekali sebelum handler, dan mengembalikan undefined memanggil next sehingga request mengalir lewat tanpa disentuh</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-source-order.png</image:loc><image:caption>Urutan sumber lintas schema: kontrak query buruk melempar lebih dulu dan hanya melaporkan alasan query, sementara kontrak headers dan cookies yang datang setelahnya dalam urutan key tidak pernah berjalan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/validation/advanced-patterns</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/advanced-patterns"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/advanced-patterns"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-select-validator.png</image:loc><image:caption>The selectValidator pattern: a request on a shared prefix reaches a picker that reads the method and pathname, returning a schema builds and caches the validator once before the handler, and returning undefined calls next so the request flows through untouched</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-source-order.png</image:loc><image:caption>Source order across a schema: a bad query contract throws first and reports only the query reason, while the headers and cookies contracts that come after it in key order never run</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/validation/define-schema</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/define-schema"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/define-schema"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-contract-order.png</image:loc><image:caption>Urutan operasi Define: sebuah kontrak ber-guard pertama membatasi input string pada 10000 karakter, lalu membekukan dalam sebuah object agar guard tidak bisa memutasinya, lalu menjalankan tiap guard berurutan dengan melempar pada kegagalan pertama, dan baru kemudian menjalankan transform pada input yang sudah lolos setiap guard, sementara kontrak tanpa guard mengembalikan transform apa adanya jadi batas maupun pembekuan tidak berjalan</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-guard-verdict.png</image:loc><image:caption>Keputusan guard: mengembalikan true mengirim input ke transform, sementara mengembalikan sebuah string atau array string membuat kontrak melempar dan menjadi 422 dengan alasan itu terjaga di error.cause</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/validation/define-schema</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/define-schema"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/define-schema"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-contract-order.png</image:loc><image:caption>Define order of operations: a guarded contract first caps string input at 10000 characters, then deep freezes an object so a guard cannot mutate it, then runs each guard in order throwing on the first failure, and only then runs the transform on input that cleared every guard, while a guardless contract returns the transform untouched so neither the cap nor the freeze runs</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-guard-verdict.png</image:loc><image:caption>Guard verdicts: returning true sends the input on to the transform, while returning a string or a string array makes the contract throw and become a 422 with those reasons preserved on error.cause</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/validation/overview</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/overview"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-three-pieces.png</image:loc><image:caption>Validasi punya tiga bagian dengan satu tugas masing-masing: Validator.define membangun kontrak, Validator.check menjalankan kontrak sebagai middleware, dan ctx.get.validated mengembalikan data tervalidasi bertipe di dalam handler</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-request-flow.png</image:loc><image:caption>Alur request validasi: middleware membaca setiap sumber dengan ctx.get.body atau ctx.get.query, menjalankan kontrak yang cocok, menyimpan hasil yang lolos di context, dan handler membacanya kembali bertipe lewat ctx.get.validated</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/validation/overview</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/overview"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-three-pieces.png</image:loc><image:caption>Validation has three pieces with one job each: Validator.define builds a contract, Validator.check runs the contracts as middleware, and ctx.get.validated returns the typed validated data inside a handler</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-request-flow.png</image:loc><image:caption>The validation request flow: the middleware reads each source with ctx.get.body or ctx.get.query, runs the matching contract, stores a passing result on the context, and the handler reads it back typed through ctx.get.validated</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/validation/reading-data</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/reading-data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/reading-data"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-failure-status.png</image:loc><image:caption>Cara lemparan validasi dipetakan ke status: error yang sudah membawa status diteruskan, error dengan alasan menjadi 422 yang menjaga alasan itu, lemparan client lain menjadi 422 umum, dan membaca tanpa validator terdaftar melempar Deno.errors.NotSupported yang dipetakan ke 501 karena itu menandakan kesalahan perakitan alih-alih input buruk</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/validation/reading-data</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/reading-data"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/reading-data"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-failure-status.png</image:loc><image:caption>How a validation throw maps to a status: an error that already carries a status passes through, an error with reasons becomes a 422 keeping those reasons, any other client throw becomes a generic 422, and reading with no validator registered throws Deno.errors.NotSupported that maps to a 501 because that signals a wiring mistake rather than bad input</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/validation/validator-middleware</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/validator-middleware"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/validator-middleware"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-source-order.png</image:loc><image:caption>Urutan sumber: sebuah schema memvalidasi sumbernya dalam urutan key, jadi kontrak query yang gagal melempar 422 yang hanya membawa alasan query sementara kontrak headers dan cookies setelahnya tidak pernah berjalan</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/middleware/validation/validator-middleware</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/middleware/validation/validator-middleware"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/middleware/validation/validator-middleware"/><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/validation-source-order.png</image:loc><image:caption>Source order: a schema validates its sources in key order, so a failing query contract throws a 422 carrying only the query reason while the headers and cookies contracts after it never run</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/middleware/websocket</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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/audit-compliance</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/audit-compliance"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/audit-compliance"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/audit-compliance</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/audit-compliance"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/audit-compliance"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/bindings</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/bindings"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/bindings"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/bindings</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/bindings"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/bindings"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/distribution</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/distribution"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/distribution"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/distribution</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/distribution"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/distribution"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/getting-started</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/getting-started"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/getting-started"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/getting-started</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/getting-started"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/getting-started"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/native-apis</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/native-apis"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/native-apis"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/native-apis</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/native-apis"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/native-apis"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/notifications-updates</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/notifications-updates"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/notifications-updates"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/notifications-updates</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/notifications-updates"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/notifications-updates"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/overview</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/overview"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/overview</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/overview"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/overview"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/desktop/serving</loc><lastmod>2026-06-26T15:51:41.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/serving"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/serving"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/desktop/serving</loc><lastmod>2026-06-26T15:51:31.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/desktop/serving"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/desktop/serving"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/file-upload</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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/graceful-shutdown</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/graceful-shutdown"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/graceful-shutdown"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/graceful-shutdown</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/graceful-shutdown"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/graceful-shutdown"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/object-storage</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/object-storage"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/object-storage"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/object-storage</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/object-storage"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/object-storage"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/production-deploy</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/production-deploy"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/production-deploy"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/production-deploy</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/production-deploy"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/production-deploy"/></url><url><loc>https://docs-deserve.neabyte.com/id/recipes/streaming-data</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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/recipes/worker-pool</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/worker-pool"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/worker-pool"/></url><url><loc>https://docs-deserve.neabyte.com/recipes/worker-pool</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/recipes/worker-pool"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/recipes/worker-pool"/></url><url><loc>https://docs-deserve.neabyte.com/id/rendering/</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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, render ter-buffer membangun seluruh HTML jadi satu string lalu mengirim semuanya sekaligus sehingga klien menunggu, sementara render streaming 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.render dengan stream true, engine meresolusi dan mengompilasi template, mengembalikan readable stream seketika sehingga header response terkirim, lalu merender tiap node ke stream di latar belakang di mana kegagalan muncul sebagai event view failed</image:caption></image:image><image:image><image:loc>https://docs-deserve.neabyte.com/diagrams/stream-render-chunks.png</image:loc><image:caption>Streaming menelusuri 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 perulangan</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 ter-buffer membuat klien menunggu selama seluruh halaman dibangun sehingga byte pertama datang terlambat, melawan render streaming 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-26T10:45:45.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, the buffered render builds the whole HTML into one string and sends it all at once so the client waits, while the streaming render 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.render with stream true, the engine resolves and compiles the template, returns the readable stream at once so response headers go out, then renders each node into the stream in the background where a failure surfaces as a view failed 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 the buffered render makes the client wait while the whole page is built so the first byte lands late, against the streaming render 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-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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/download</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/download"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/download"/></url><url><loc>https://docs-deserve.neabyte.com/response/download</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/download"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/download"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/empty</loc><lastmod>2026-06-26T10:46:01.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/empty"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/empty"/></url><url><loc>https://docs-deserve.neabyte.com/response/empty</loc><lastmod>2026-06-26T10:45:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="id-ID" href="https://docs-deserve.neabyte.com/id/response/empty"/><xhtml:link rel="alternate" hreflang="en-US" href="https://docs-deserve.neabyte.com/response/empty"/></url><url><loc>https://docs-deserve.neabyte.com/id/response/html</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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-26T10:45:45.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-10T16:31:49.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-26T10:45:45.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/text</loc><lastmod>2026-06-26T10:46:01.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-26T10:45:45.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-26T10:46:01.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>Sebuah request ke garis miring static garis miring css garis miring style titik css cocok dengan mount garis miring static, prefix garis miring static-nya dipotong menjadi css garis miring style titik css, dan disajikan dari folder public, sementara request ke garis miring static garis miring titik env ditolak dengan 404 sebelum pembacaan apa pun karena segmennya diawali titik</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/static-file/basic</loc><lastmod>2026-06-26T10:45:45.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>A request to slash static slash css slash style dot css matches the slash static mount, has its slash static prefix stripped to css slash style dot css, and is served from the public folder, while a request to slash static slash dot env is rejected with 404 before any read because the segment starts with a dot</image:caption></image:image></url><url><loc>https://docs-deserve.neabyte.com/id/static-file/multiple</loc><lastmod>2026-06-26T10:46:01.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 request di bawah garis miring uploads cocok dengan mount garis miring uploads dan disajikan dari folder uploads dengan prefix itu etag nonaktif dan tanpa cache, sementara tail yang sama di bawah garis miring docs malah cocok dengan mount 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-26T10:45:45.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 a request under slash uploads matches the slash uploads mount and is served from the uploads folder with that prefix etag off and no cache, while the same tail under slash docs matches the slash docs mount 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>