{"_id":"@auraui/router","_rev":"5-41dbe7765d352c3d0aa78b224bb84e72","name":"@auraui/router","dist-tags":{"latest":"0.3.0"},"versions":{"0.0.0":{"name":"@auraui/router","version":"0.0.0","keywords":["auraui","aura-ui","web-components","reserved"],"author":{"name":"Aleksandr Buryakov"},"license":"MIT","_id":"@auraui/router@0.0.0","maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"homepage":"https://auraui.dev","bugs":{"url":"https://github.com/aura-ui/router/issues"},"dist":{"shasum":"83af26931527007eb24d0c89e0722c6b8bc4fa7a","tarball":"https://registry.npmjs.org/@auraui/router/-/router-0.0.0.tgz","fileCount":4,"integrity":"sha512-ioutq/q/qFpgQjgsCk+zh02ZJ4zCq/s/jIvbfyV9aMPJI9tSAm1R3JRbCTN6TP73ZLy2Wl6DCjxxEMsiq9tgAA==","signatures":[{"sig":"MEQCIEu0Y3aKJ2LxE4pwmyKwGO8BjfArAIr12NZluDK6XDEmAiAbkCISddxFCRto0gDZNSGtsxmelTLt3oH5mfRdwWoxFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2147},"main":"./index.js","type":"module","exports":{".":"./index.js"},"gitHead":"c0726b82d70dcd87bd661fda50f168c675d2061a","_npmUser":{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"},"repository":{"url":"git+https://github.com/aura-ui/router.git","type":"git","directory":"reserve/auraui"},"_npmVersion":"10.9.2","description":"Name reserved for Aura UI — Web Components platform. Real packages coming soon.","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/router_0.0.0_1784590714251_0.8375519004520409","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@auraui/router","version":"0.0.1","keywords":["aura-ui","web-components","custom-elements","router","html-first","mpa","spa"],"author":{"name":"Aleksandr Buryakov"},"license":"MIT","_id":"@auraui/router@0.0.1","maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"homepage":"https://github.com/aura-ui/router#readme","bugs":{"url":"https://github.com/aura-ui/router/issues"},"dist":{"shasum":"64b1537e0c8fc37a8669dab69b2b688a1f169d7c","tarball":"https://registry.npmjs.org/@auraui/router/-/router-0.0.1.tgz","fileCount":294,"integrity":"sha512-7fnCLjIPJ9w+JQc8XTSGl6nHyQppwmpY8zGXHbWsBdYl3PX7XBuGN8VySF3PU3DM9ja6NUdEDiZoZ9efLTnHVg==","signatures":[{"sig":"MEUCIHH9Q8xrGPXOpFamwI7V4a6RamSm7LZIYHzJ2kODCczlAiEAt4dmyj2qjCwfkE1V28K3k+FKoCSymG7t5UYNh1JzaOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":641851},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"48f1a94abfac90c335cfb7ebccaf07ce3e26feb0","scripts":{"dev":"vite","lint":"eslint .","size":"size-limit","test":"jest","bench":"tsx bench/run-all.ts","build":"node scripts/build-lib.mjs","check":"npm run lint && npm run build:smoke","smoke":"node scripts/smoke-dist.mjs","format":"prettier --write .","prepare":"husky","preview":"vite preview","bench:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs bench/run-all.ts","lint:fix":"eslint . --fix","size:vite":"node scripts/measure-app-bundle.mjs","build:demo":"vite build","commitlint":"commitlint --edit","lint:watch":"chokidar \"src/**/*.{ts,tsx}\" -c \"npm run lint\"","bench:cache":"tsx src/modules/aura-cache/bench/aura-swr-cache.bench.ts","build:smoke":"npm run build && npm run smoke","size:report":"npm run size && npm run size:analyze","format:check":"prettier --check .","size:analyze":"size-limit --why","bench:cache:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs src/modules/aura-cache/bench/aura-swr-cache.bench.ts","prepublishOnly":"npm run build","bench:dom-patch":"tsx bench/scenarios/dom-patch.bench.ts","bench:data-graph":"tsx bench/scenarios/data-graph.bench.ts","bench:route-tree":"tsx bench/scenarios/route-tree.bench.ts","bench:url-matcher":"tsx bench/scenarios/url-matcher.bench.ts","bench:matched-chain":"tsx bench/scenarios/matched-chain.bench.ts","bench:prefetch-plan":"tsx bench/scenarios/prefetch-plan.bench.ts","bench:transition-plan":"tsx bench/scenarios/transition-plan.bench.ts","bench:navigation-pipeline":"tsx bench/scenarios/navigation-pipeline.bench.ts"},"_npmUser":{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"},"repository":{"url":"git+https://github.com/aura-ui/router.git","type":"git"},"_npmVersion":"10.9.2","description":"Declarative routing for Web Components — HTML-first, MPA→SPA.","directories":{},"sideEffects":false,"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","jest":"^30.4.2","vite":"^8.0.10","husky":"^9.1.7","jsdom":"^26.1.0","eslint":"^9.39.4","esbuild":"^0.28.1","globals":"^17.5.0","ts-jest":"^29.4.11","prettier":"^3.8.3","@eslint/js":"^9.39.4","size-limit":"^12.1.0","typescript":"^6.0.3","@types/jest":"^30.0.0","chokidar-cli":"^3.0.0","highlight.js":"^11.11.1","@commitlint/cli":"^20.5.2","typescript-eslint":"^8.59.1","urlpattern-polyfill":"^10.1.0","eslint-plugin-import":"^2.32.0","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-security":"^4.0.0","jest-environment-jsdom":"^30.4.1","@size-limit/esbuild-why":"^12.1.0","@size-limit/preset-small-lib":"^12.1.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/router_0.0.1_1785399826140_0.12595165351314885","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@auraui/router","version":"0.1.0","keywords":["aura-ui","auraui","web-components","custom-element","custom-elements","client-side-routing","lit","router","html-first","mpa","spa","progressive-enhancement","typescript"],"author":{"name":"Aleksandr Buryakov"},"license":"MIT","_id":"@auraui/router@0.1.0","maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"homepage":"https://github.com/aura-ui/router#readme","bugs":{"url":"https://github.com/aura-ui/router/issues"},"dist":{"shasum":"c665b36113c144904d24d347e75a75adee3444a1","tarball":"https://registry.npmjs.org/@auraui/router/-/router-0.1.0.tgz","fileCount":295,"integrity":"sha512-a6+t0nbhhbD+78dkmyAdTeCGZLLeTjD03eRPgN5G/kfsN041HITWRD4sa/r/X4+INy631X3YkLJ0SBhEqhoOCw==","signatures":[{"sig":"MEYCIQDqnsqgW6vw0qSyWiuLKflUn1mED4ujIZfcDbdCDIN5CwIhAOQdpgBdY55IfFJujpLt5emd0DQp+aoqpwfrjzjRxSwg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":658238},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"259fc336f9c1c12606c59383148ab339510e8e27","scripts":{"dev":"vite","lint":"eslint .","size":"size-limit","test":"jest","bench":"tsx bench/run-all.ts","build":"node scripts/build-lib.mjs","check":"npm run lint && npm run build:smoke","smoke":"node scripts/smoke-dist.mjs","format":"prettier --write .","prepare":"husky","preview":"vite preview","bench:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs bench/run-all.ts","lint:fix":"eslint . --fix","size:vite":"node scripts/measure-app-bundle.mjs","build:demo":"vite build","commitlint":"commitlint --edit","lint:watch":"chokidar \"src/**/*.{ts,tsx}\" -c \"npm run lint\"","bench:cache":"tsx src/modules/aura-cache/bench/aura-swr-cache.bench.ts","build:smoke":"npm run build && npm run smoke","size:report":"npm run size && npm run size:analyze","format:check":"prettier --check .","size:analyze":"size-limit --why","bench:cache:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs src/modules/aura-cache/bench/aura-swr-cache.bench.ts","prepublishOnly":"npm run build","bench:dom-patch":"tsx bench/scenarios/dom-patch.bench.ts","bench:data-graph":"tsx bench/scenarios/data-graph.bench.ts","bench:route-tree":"tsx bench/scenarios/route-tree.bench.ts","bench:url-matcher":"tsx bench/scenarios/url-matcher.bench.ts","bench:matched-chain":"tsx bench/scenarios/matched-chain.bench.ts","bench:prefetch-plan":"tsx bench/scenarios/prefetch-plan.bench.ts","bench:transition-plan":"tsx bench/scenarios/transition-plan.bench.ts","bench:navigation-pipeline":"tsx bench/scenarios/navigation-pipeline.bench.ts"},"_npmUser":{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"},"repository":{"url":"git+https://github.com/aura-ui/router.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML-first declarative router. Real HTML pages with client navigation (MPA→SPA). Works with plain HTML or Web Components.","directories":{},"sideEffects":false,"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","jest":"^30.4.2","vite":"^8.0.10","husky":"^9.1.7","jsdom":"^26.1.0","eslint":"^9.39.4","esbuild":"^0.28.1","globals":"^17.5.0","ts-jest":"^29.4.11","prettier":"^3.8.3","@eslint/js":"^9.39.4","size-limit":"^12.1.0","typescript":"^6.0.3","@types/jest":"^30.0.0","chokidar-cli":"^3.0.0","highlight.js":"^11.11.1","@commitlint/cli":"^20.5.2","typescript-eslint":"^8.59.1","urlpattern-polyfill":"^10.1.0","eslint-plugin-import":"^2.32.0","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-security":"^4.0.0","jest-environment-jsdom":"^30.4.1","@size-limit/esbuild-why":"^12.1.0","@size-limit/preset-small-lib":"^12.1.0","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/router_0.1.0_1786380244882_0.8927088304747448","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@auraui/router","version":"0.2.0","keywords":["aura-ui","auraui","web-components","custom-element","custom-elements","client-side-routing","lit","router","html-first","mpa","spa","progressive-enhancement","typescript"],"author":{"name":"Aleksandr Buryakov"},"license":"MIT","_id":"@auraui/router@0.2.0","maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"homepage":"https://github.com/aura-ui/router#readme","bugs":{"url":"https://github.com/aura-ui/router/issues"},"dist":{"shasum":"2493324a3f5d048ba3bce9f14559e78fbdb6972d","tarball":"https://registry.npmjs.org/@auraui/router/-/router-0.2.0.tgz","fileCount":322,"integrity":"sha512-IEn2GYS97cv3V1J63Py3d2cZkb9PZZl+W7iyEW3stFWi+ILj2mF6w5RvmqQnkJpCMoTZZ9mi7OaoTTRNqxtbZA==","signatures":[{"sig":"MEQCIBwD/8zNVOoF82Zy5EVqAB3N+KTg4DO47dJedUEU3IDjAiA2JjisHKc8hR/s/6I3MVDqSmuRY57ElQ+wrs0ZcZTNmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":732042},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7f90ccd9e6e448abac2f91f321c76241d068d618","scripts":{"dev":"vite","lint":"eslint .","size":"size-limit","test":"jest","bench":"tsx bench/run-all.ts","build":"node scripts/build-lib.mjs","check":"npm run lint && npm run build:smoke","smoke":"node scripts/smoke-dist.mjs","format":"prettier --write .","prepare":"husky","preview":"vite preview","bench:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs bench/run-all.ts","lint:fix":"eslint . --fix","size:vite":"node scripts/measure-app-bundle.mjs","build:demo":"vite build","commitlint":"commitlint --edit","lint:watch":"chokidar \"src/**/*.{ts,tsx}\" -c \"npm run lint\"","bench:cache":"tsx src/modules/aura-cache/bench/aura-swr-cache.bench.ts","build:smoke":"npm run build && npm run smoke","size:report":"npm run size && npm run size:analyze","format:check":"prettier --check .","size:analyze":"size-limit --why","bench:cache:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs src/modules/aura-cache/bench/aura-swr-cache.bench.ts","prepublishOnly":"npm run build","bench:dom-patch":"tsx bench/scenarios/dom-patch.bench.ts","bench:data-graph":"tsx bench/scenarios/data-graph.bench.ts","bench:route-tree":"tsx bench/scenarios/route-tree.bench.ts","bench:url-matcher":"tsx bench/scenarios/url-matcher.bench.ts","bench:matched-chain":"tsx bench/scenarios/matched-chain.bench.ts","bench:prefetch-plan":"tsx bench/scenarios/prefetch-plan.bench.ts","bench:transition-plan":"tsx bench/scenarios/transition-plan.bench.ts","bench:navigation-pipeline":"tsx bench/scenarios/navigation-pipeline.bench.ts"},"_npmUser":{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"},"repository":{"url":"git+https://github.com/aura-ui/router.git","type":"git"},"_npmVersion":"11.17.0","description":"HTML-first declarative router. Real HTML pages with client navigation (MPA→SPA). Works with plain HTML or Web Components.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","jest":"^30.4.2","vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","eslint":"^9.39.4","esbuild":"^0.28.2","globals":"^17.11.0","ts-jest":"^29.4.12","prettier":"^3.9.6","@eslint/js":"^9.39.4","size-limit":"^13.0.3","typescript":"npm:@typescript/typescript6@^6.0.2","@types/jest":"^30.0.0","chokidar-cli":"^3.0.0","highlight.js":"^11.12.0","@commitlint/cli":"^21.2.2","typescript-eslint":"^8.67.0","@typescript/native":"npm:typescript@^7.0.2","urlpattern-polyfill":"^10.1.0","eslint-plugin-import":"^2.32.0","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-security":"^4.0.0","jest-environment-jsdom":"^30.4.1","@size-limit/esbuild-why":"^13.0.3","@size-limit/preset-small-lib":"^13.0.3","@commitlint/config-conventional":"^21.2.2"},"_npmOperationalInternal":{"tmp":"tmp/router_0.2.0_1787345064815_0.5210851193250265","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@auraui/router","version":"0.3.0","description":"HTML-first declarative router. Real HTML pages with client navigation (MPA→SPA). Works with plain HTML or Web Components.","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"sideEffects":false,"publishConfig":{"access":"public"},"scripts":{"dev":"vite","build":"node scripts/build-lib.mjs","build:demo":"vite build","build:smoke":"npm run build && npm run smoke","preview":"vite preview","prepublishOnly":"npm run build","smoke":"node scripts/smoke-dist.mjs","size":"size-limit","size:analyze":"size-limit --why","size:vite":"node scripts/measure-app-bundle.mjs","size:report":"npm run size && npm run size:analyze","test":"jest","bench:cache":"tsx src/modules/aura-cache/bench/aura-swr-cache.bench.ts","bench:cache:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs src/modules/aura-cache/bench/aura-swr-cache.bench.ts","bench":"tsx bench/run-all.ts","bench:gc":"node --expose-gc node_modules/tsx/dist/cli.mjs bench/run-all.ts","bench:url-matcher":"tsx bench/scenarios/url-matcher.bench.ts","bench:matched-chain":"tsx bench/scenarios/matched-chain.bench.ts","bench:transition-plan":"tsx bench/scenarios/transition-plan.bench.ts","bench:prefetch-plan":"tsx bench/scenarios/prefetch-plan.bench.ts","bench:dom-patch":"tsx bench/scenarios/dom-patch.bench.ts","bench:route-tree":"tsx bench/scenarios/route-tree.bench.ts","bench:navigation-pipeline":"tsx bench/scenarios/navigation-pipeline.bench.ts","bench:data-graph":"tsx bench/scenarios/data-graph.bench.ts","lint":"eslint .","lint:fix":"eslint . --fix","lint:watch":"chokidar \"src/**/*.{ts,tsx}\" -c \"npm run lint\"","check":"npm run lint && npm run build:smoke","format":"prettier --write .","format:check":"prettier --check .","commitlint":"commitlint --edit","prepare":"husky"},"repository":{"type":"git","url":"git+https://github.com/aura-ui/router.git"},"keywords":["aura-ui","auraui","web-components","custom-element","custom-elements","client-side-routing","lit","router","html-first","mpa","spa","progressive-enhancement","typescript"],"author":{"name":"Aleksandr Buryakov"},"license":"MIT","bugs":{"url":"https://github.com/aura-ui/router/issues"},"homepage":"https://github.com/aura-ui/router#readme","devDependencies":{"@commitlint/cli":"^21.2.2","@commitlint/config-conventional":"^21.2.2","@eslint/js":"^9.39.4","@size-limit/esbuild-why":"^13.0.3","@size-limit/preset-small-lib":"^13.0.3","@types/jest":"^30.0.0","@typescript/native":"npm:typescript@^7.0.2","chokidar-cli":"^3.0.0","esbuild":"^0.28.2","eslint":"^9.39.4","eslint-plugin-import":"^2.32.0","eslint-plugin-security":"^4.0.0","eslint-plugin-unicorn":"^64.0.0","globals":"^17.11.0","highlight.js":"^11.12.0","husky":"^9.1.7","jest":"^30.4.2","jest-environment-jsdom":"^30.4.1","jsdom":"^30.0.1","prettier":"^3.9.6","size-limit":"^13.0.3","ts-jest":"^29.4.12","tsx":"^4.23.12","typescript":"npm:@typescript/typescript6@^6.0.2","typescript-eslint":"^8.67.0","urlpattern-polyfill":"^10.1.0","vite":"^8.2.2"},"gitHead":"d053de643a2b48627e1e5c144616c91685997ef7","_id":"@auraui/router@0.3.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-GEFQVFXtUdOS0rUSwyHArzLKsYMu6lQVmPB8M/2873gFTKw/wP7vdmVRA7oosdaXgmaxwIHbVHhuu9J7lITMjw==","shasum":"8eb7d8d6bd64d03f2d6c665daa197e8f8c49e396","tarball":"https://registry.npmjs.org/@auraui/router/-/router-0.3.0.tgz","fileCount":322,"unpackedSize":733984,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB/+2Hi9an4ipG1P4LQR2dCBYbpcF6AfjMiyZ8wvJ+yYAiEA1bd68hnsEEe1JFoIAoIN75b/jr4Jj5nmzl39ZB7aU0w="}]},"_npmUser":{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"},"directories":{},"maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router_0.3.0_1787606742424_0.7711750166943694"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-20T23:38:34.159Z","modified":"2026-08-24T21:25:42.751Z","0.0.0":"2026-07-20T23:38:34.394Z","0.0.1":"2026-07-30T08:23:46.279Z","0.1.0":"2026-08-10T16:44:05.067Z","0.2.0":"2026-08-21T20:44:24.955Z","0.3.0":"2026-08-24T21:25:42.570Z"},"bugs":{"url":"https://github.com/aura-ui/router/issues"},"author":{"name":"Aleksandr Buryakov"},"license":"MIT","homepage":"https://github.com/aura-ui/router#readme","keywords":["aura-ui","auraui","web-components","custom-element","custom-elements","client-side-routing","lit","router","html-first","mpa","spa","progressive-enhancement","typescript"],"repository":{"type":"git","url":"git+https://github.com/aura-ui/router.git"},"description":"HTML-first declarative router. Real HTML pages with client navigation (MPA→SPA). Works with plain HTML or Web Components.","maintainers":[{"name":"aleksandr.buryakov","email":"toltek7@gmail.com"}],"readme":"﻿# Aura Router\r\n\r\n[![npm version](https://img.shields.io/npm/v/@auraui/router.svg)](https://www.npmjs.com/package/@auraui/router)\r\n[![CI](https://github.com/aura-ui/router/actions/workflows/ci.yml/badge.svg)](https://github.com/aura-ui/router/actions/workflows/ci.yml)\r\n[![Live demo](https://img.shields.io/badge/demo-live-brightgreen)](https://aura-ui.github.io/router-preview/)\r\n[![license](https://img.shields.io/npm/l/@auraui/router.svg)](./LICENSE)\r\n\r\n**Keep the HTML. Upgrade the navigation.**\r\n\r\nHTML-first client navigation for complete static or server-rendered HTML pages – with nested layouts, route lifecycle hooks, and no framework adapter.\r\n\r\nYour host keeps serving real pages. Aura adopts the HTML already on screen and upgrades marked links after load.\r\n\r\nTry it: [Live demo](https://aura-ui.github.io/router-preview/) · [Open in StackBlitz](https://stackblitz.com/github/aura-ui/router-playground) · [Source](https://github.com/aura-ui/router-preview) · [Article](https://dev.to/aura-ui/why-i-built-an-spa-router-for-html-and-web-components-25dm)\r\n\r\n```bash\r\nnpm install @auraui/router\r\n```\r\n\r\n[10-minute tutorial](./docs/tutorial.md) · [Quick start](#quick-start) · [Guide](./docs/guide.md) · [Recipes](./docs/recipes/) · [MAGA](https://github.com/aura-ui/MAGA)\r\n\r\n## Why Aura Router?\r\n\r\n- **Keep your pages.** Every URL can return useful HTML before Aura runs.\r\n- **Add SPA navigation.** Mark existing links and update only the view regions affected by the new route.\r\n- **Grow without a rewrite.** Add nested layouts, lifecycle hooks, prefetching, and caching when you need them.\r\n\r\nWorks with plain HTML, Web Components, and Lit. Your backend or static host keeps rendering complete pages.\r\n\r\n## Design principles\r\n\r\nAura Router follows [**MAGA**](https://github.com/aura-ui/MAGA) — and its discipline **MANA** (Minimal, Aligned, Native, Additive):\r\n\r\n- **Minimal** — the smallest layer that upgrades navigation, not a second application model\r\n- **Aligned** — ordinary `<a href>` stays a link; the URL stays a URL\r\n- **Native** — URL, history, DOM, and HTML responses remain the substrate\r\n- **Additive** — without JavaScript, marked links can still fall back to the server\r\n\r\nMANA does not ban abstractions. It is how Aura judges them.\r\n\r\nVision and full essay: [aura-ui/MAGA](https://github.com/aura-ui/MAGA)\r\n\r\n## How it works\r\n\r\n1. The browser requests a normal URL.\r\n2. Your host returns a complete HTML page.\r\n3. Aura adopts the content already on screen.\r\n4. Marked same-origin links use client navigation from then on.\r\n\r\n> **MPA first. SPA when ready.**\r\n\r\n## Quick start\r\n\r\nFor a complete two-page migration—including direct URLs, first-paint adoption, no-JavaScript fallback, and troubleshooting—follow [Static site → SPA in 10 minutes](./docs/tutorial.md).\r\n\r\n**1. Keep the page you already have**\r\n\r\n```html\r\n<main id=\"content\">\r\n  <h1>Home</h1>\r\n</main>\r\n```\r\n\r\nServe a complete page for every URL and keep the same selector around the content you want Aura to update.\r\n\r\n**2. Declare routes. Mark the links.**\r\n\r\n```html\r\n<a href=\"/about/\" data-aura-link>About</a>\r\n\r\n<aura-outlet></aura-outlet>\r\n<aura-router extract=\"#content\">\r\n  <aura-route path=\"/\" view=\"/\"></aura-route>\r\n  <aura-route path=\"/about/\" view=\"/about/\"></aura-route>\r\n</aura-router>\r\n```\r\n\r\n`extract` tells Aura which region to take from each complete HTML response. On the first flat page, Aura adopts the matching region already on screen instead of fetching it again.\r\n\r\n**3. Start Aura once**\r\n\r\n```js\r\nimport { AuraRouter } from '@auraui/router';\r\n\r\nAuraRouter.install();\r\n```\r\n\r\nThat is the upgrade: every URL still opens as a normal page, while marked links navigate through Aura after startup.\r\n\r\n## Change the page. Keep the layout.\r\n\r\nNested routes keep shared UI mounted while the child view changes – useful for dashboards, workspaces, and settings screens.\r\n\r\n```html\r\n<aura-router extract=\"#content\">\r\n  <aura-route path=\"/workspace/\" layout=\"workspace-shell\">\r\n    <aura-route path=\".\" view=\"/workspace/\"></aura-route>\r\n    <aura-route path=\"settings\" view=\"/workspace/settings/\"></aura-route>\r\n  </aura-route>\r\n</aura-router>\r\n\r\n<template id=\"workspace-shell\">\r\n  <nav><!-- durable chrome --></nav>\r\n  <aura-outlet></aura-outlet>\r\n</template>\r\n```\r\n\r\nDirect nested URLs need matching outlet-shaped HTML and an `aura-router-ssr` marker. See the [nested layout recipe](./docs/recipes/nested.md).\r\n\r\n## Add features when you need them\r\n\r\n- [Lifecycle hooks](./docs/guide/05-lifecycle-and-data.md#lifecycle-hooks) – guard, load, ready, leave, and unmount\r\n- [Prefetch and cache](./docs/recipes/prefetch-cache.md) – configure link prefetch and route-scoped view, data, or DOM cache policies\r\n- [Authentication guards](./docs/recipes/auth.md) – protect client navigation without hiding server responsibilities\r\n- [First-paint adoption](./docs/recipes/first-paint.md) – reuse flat or nested HTML on startup\r\n- [404 handling](./docs/recipes/not-found.md) – keep client and server fallbacks honest\r\n- [Programmatic navigation](./docs/guide/09-api-reference.md#programmatic-api) – navigate from application code\r\n\r\n## Compatibility\r\n\r\nAura Router targets modern browsers with ES modules, Custom Elements, History API, and `fetch`. Parameterized routes require `URLPattern`.\r\n\r\nIt runs in the browser; it is not a Node SSR runtime. Your server or static host remains in control of the HTML response.\r\n\r\n## Project\r\n\r\nCurrent release: **0.3.0**\r\n\r\n**Documentation:** [Guide](./docs/guide.md) · [Recipes](./docs/recipes/) · [MAGA](https://github.com/aura-ui/MAGA) · [Playground](./playground/) · [Known limitations](./LIMITATIONS.md)\r\n\r\n**Development:** [Changelog](./CHANGELOG.md) · [Roadmap](./ROADMAP.md) · [Contributing](./CONTRIBUTING.md) · [Security](./SECURITY.md)\r\n\r\n**Community:** [Article on DEV.to](https://dev.to/aura-ui/why-i-built-an-spa-router-for-html-and-web-components-25dm) · [GitHub Discussions](https://github.com/aura-ui/router/discussions) · [hello@aura-ui.dev](mailto:hello@aura-ui.dev) · [npm](https://www.npmjs.com/package/@auraui/router)\r\n\r\n## License\r\n\r\nMIT covers source code only – not the project name or logos. See [LICENSE](./LICENSE) and [TRADEMARKS.md](./TRADEMARKS.md).\r\n","readmeFilename":"README.md"}