An Arrow.js starter template with file-based routing, layouts, reactive state, composables, and a full testing setup — built for AI-assisted development, with context files and slash commands for Claude Code, Codex, and Copilot included.
Stack: Arrow.js · Vite · Tailwind CSS v4 · Vitest · Playwright
Prerequisites: Bun 1.4+ (or Node.js 22.12+ with npm, without a lockfile)
bunx degit go4cas/quiver my-app
cd my-app
bun install
bun run devOpen http://localhost:5173. You can also click Use this template on GitHub, or clone the repository directly.
Browser support: the router is built on the Navigation API — Chrome/Edge 102+, Safari 26.2+, Firefox 147+.
Quiver ships with context files and Claude Code slash commands that make AI assistants immediately productive in this codebase:
AGENTS.md— the single source of truth, read directly by Codex and GitHub Copilot: conventions, Arrow.js rules, composables, theming, folder structureCLAUDE.md— loaded automatically by Claude Code; importsAGENTS.mdso every tool shares one context/add-page,/add-layout,/add-component,/add-state,/add-composable,/add-theme,/add-feature,/add-test— Claude Code slash commands for the most common tasks
See the AI Tooling guide for usage examples.
| Command | Description |
|---|---|
bun run dev |
Start the Vite dev server |
bun run build |
Production build to dist/ |
bun run preview |
Preview the production build locally |
bun run test |
Run unit tests once (Vitest) |
bun run test:watch |
Run unit tests in watch mode |
bun run test:e2e |
Run end-to-end tests (Playwright) |
bun run typecheck |
Type-check src/ via JSDoc (tsc) |
bun run docs:dev |
Start the documentation site locally |
bun run docs:build |
Build the documentation site |
bun run docs:preview |
Preview the built documentation site |
src/
├── framework/ # Router, DI, store, app bootstrap — framework internals
├── pages/ # File-based routes — add your pages here
├── layouts/ # Page wrapper components — add your layouts here
├── components/ # Reusable UI components — add your components here
├── state/ # Global reactive state modules — add your stores here
├── composables/ # Reusable logic functions — add your composables here
├── utils/ # Pure helper functions
└── main.js # App entry point
tests/
├── framework/ # Unit tests for framework utilities (Vitest)
├── composables/ # Unit tests for composables (Vitest)
└── e2e/ # End-to-end tests (Playwright)
- Getting started — what to add, what to leave alone
- Why Quiver — an honest comparison with the alternatives
- Feature workflow — step-by-step walkthrough for adding a feature
- Getting started — install, scripts, folder structure, createApp
- Components — component(), local state, built-in components
- Routing — file-based routing, guards, useMeta, router API
- Layouts — page layouts, DI keys, creating new layouts
- State — reactive() stores, built-in state modules
- Composables — useRoute, useRouter, useForm, useFetch, useToast, provide/inject
- Testing — unit tests and E2E tests
- Troubleshooting — common gotchas and their fixes
Bug reports, fixes, and documentation improvements are welcome. Please read CONTRIBUTING.md before opening a PR.
MIT