anolilab/lunora/lunora-quickstart
Claude Code and agent skill by anolilab/lunora
- community
- ext:[{"type":"plugin","description":"Custom plugin integration"}]
Checking that the SKILL.md file is still in the repository.
Creates a new Lunora project or adds Lunora to an existing app, then gets
Install
npx vskill@latest install anolilab/lunora/lunora-quickstartSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Lunora Quickstart
Get a working Lunora project with one live query/mutation round-trip.
Skip this skill when lunora/ already exists (just build, and run lunora codegen after edits) or when the task is only auth (lunora-setup-auth).
Workflow
- New project:
lunora init <name> --vite <framework>or-t <template>.
Existing app: lunora init --here.
lunora codegento generatelunora/_generated/.- Start the dev server in the background (
lunora dev --background). - Write or adapt a query + mutation and use them from a component.
lunora verify(wrangler config + codegen dry-run +tsc --noEmit) passes,
and the client re-renders live after a mutation.
Path 1: new project
Two scaffold paths take different flags.
--vite <framework> applies the Lunora layer over the official create-vite base. Use it for a plain SPA: react (the default), vue, solid, svelte, or vanilla (overlay-only, not in the picker). -t react|vue|solid|svelte is accepted as an alias for the same overlay.
-t / --template <type> fetches a whole-project template from gh:anolilab/lunora/templates/<type>:
-t value | Stack | |
|---|---|---|
next | Next.js App Router (OpenNext) + a standalone Lunora worker | |
vinext | Next.js App Router on Vite (vinext), one worker (experimental) | |
vinext-pages | Next.js Pages Router on Vite (vinext), one worker (experimental) | |
tanstack-start-react | TanStack Start (React), SSR with live-loader routes | |
tanstack-start-solid | TanStack Start (Solid) | |
tanstack-start-react-rspack | TanStack Start (React) on Rsbuild, one worker | |
rspack-react | React SPA on Rsbuild (@lunora/rspack) | |
solid-v2 | Solid 2.0 SPA (@solidjs/web, vite-plugin-solid 3) | |
astro | Astro, Lunora composed into the adapter worker | |
sveltekit | SvelteKit, Lunora composed into the adapter worker | |
nuxt | Nuxt (Vue), Lunora mounted in Nitro | |
analog | AnalogJS (Angular), Lunora mounted in Nitro | |
expo | React Native (Expo) app + a Lunora worker | |
standalone | Worker-only backend, no frontend |
There is no vite template value; -t vite errors. Solid 2.0 is a template rather than an overlay because create-vite's Solid base is still 1.x, so --vite solid stays on Solid 1.x.
In a non-interactive shell, init errors unless it gets a name and a framework (or --yes, which takes the React overlay). As an agent, pass --vite or -t explicitly; if the user stated no preference, use --vite react.
Other flags:
--add takes a comma-separated list of `ai | auth | auth-ui | backup | browser
queue | storage | workflow. --ref <branch|tag|commit> pins the template source (e.g. --ref alpha); --from <dir>` copies from a local templates root.
Path 2: add Lunora to an existing app
This detects the framework from package.json, scaffolds lunora/schema.ts and lunora/messages.ts (skipped if a schema exists), and patches or creates the Vite config with the lunora() plugin. SvelteKit, Nuxt and Astro wire Lunora through their server entry instead, so their Vite config is left alone. It then prints framework-specific next steps: the packages to install, the provider to mount, and how to compose the worker. Follow those; the CLI does not edit framework-owned files.
Templates and --vite overlays map #lunora/* to ./lunora/* in package.json imports, which is why their function files import #lunora/_generated/server.js. A --here project has no such mapping; its starter uses the relative ./_generated/server. Match whichever the project already uses.
Client provider
Create the LunoraClient once at module scope (not inside a component, or every render opens a new socket) and wrap the app in the framework provider:
LunoraClient is also exported by @lunora/client. Other adapters: @lunora/vue, @lunora/solid, @lunora/svelte, @lunora/angular (provideLunora / injectLunoraClient), and @lunora/react-native (createLunoraClient, re-exporting @lunora/react). @lunora/astro and @lunora/nuxt mount Lunora server-side. VITE_LUNORA_URL is optional; the same-origin default is right for local dev.
First function
lunora/schema.ts:
lunora/todos.ts:
Run lunora codegen, then call it from a component. Argument and return types are inferred from the generated api, so no casts are needed:
useQuery returns undefined while loading, then re-renders whenever a mutation changes the queried rows. A function in a folder nests in api: lunora/billing/invoices.ts is api.billing.invoices.*.
Dev server
lunora dev runs the worker (behind Vite via @cloudflare/vite-plugin in Vite projects), codegen-on-save, and the embedded Studio at /__lunora. It does not exit on its own.
- User at the keyboard: ask them to run
lunora devin a terminal. - Agent: run
lunora dev --background. It detaches, waits until the server
answers, prints Dev server running at <url> (pid <n>), and exits. When an AI agent is detected (Claude Code, Cursor, Codex, …), plain lunora dev does this automatically with JSON logs; LUNORA_AGENT_MODE=0 opts out. Avoid a bare foreground lunora dev in your own shell, since it blocks until killed.
A second lunora dev reports the running instance instead of starting another (.lunora/dev.json is the lockfile). GET /_lunora/status returns {"ok":true} once the worker is up. Vite defaults to http://localhost:5173. lunora dev --tunnel shares the worker on a public *.trycloudflare.com URL (needs cloudflared).
Shipping
Use lunora-deploy for bindings, secrets and environments.
Next steps
- Auth:
lunora-setup-auth. - Add-ons:
lunora add <feature>(e.g.email,storage,crons,
presence; lunora registry list for all). Mail, storage and scheduling have their own skills: lunora-setup-mail, lunora-setup-storage, lunora-setup-scheduler.
- Schema and function rules:
lunora-functions. Schema changes on live data:
lunora-migration-helper.
Security
- Security scanPassed, 96 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/cli/skills/lunora-quickstart/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Extension points
pluginCustom plugin integration
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/anolilab/lunora/lunora-quickstart)