{"id":51199694,"url":"https://github.com/anolilab/lunora","last_synced_at":"2026-06-30T09:00:33.982Z","repository":{"id":366352609,"uuid":"1253483476","full_name":"anolilab/lunora","owner":"anolilab","description":"Type-safe, real-time backend framework on your own Cloudflare account — Workers, Durable Objects, D1, R2, Queues. Convex-style DX, Vite-first.","archived":false,"fork":false,"pushed_at":"2026-06-27T22:25:12.000Z","size":19064,"stargazers_count":37,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"alpha","last_synced_at":"2026-06-28T00:02:36.858Z","etag":null,"topics":["baas","backend","cloudflare","cloudflare-workers","convex","d1","durable-objects","edge","framework","full-stack","r2","realtime","serverless","sqlite","type-safe","typescript","vite","websockets"],"latest_commit_sha":null,"homepage":"https://lunora.sh","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anolilab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["anolilab"]}},"created_at":"2026-05-29T14:06:02.000Z","updated_at":"2026-06-27T23:34:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/anolilab/lunora","commit_stats":null,"previous_names":["anolilab/lunora"],"tags_count":261,"template":false,"template_full_name":null,"purl":"pkg:github/anolilab/lunora","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Flunora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Flunora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Flunora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Flunora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anolilab","download_url":"https://codeload.github.com/anolilab/lunora/tar.gz/refs/heads/alpha","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Flunora/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34935530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["baas","backend","cloudflare","cloudflare-workers","convex","d1","durable-objects","edge","framework","full-stack","r2","realtime","serverless","sqlite","type-safe","typescript","vite","websockets"],"created_at":"2026-06-28T00:00:18.776Z","updated_at":"2026-06-30T09:00:33.963Z","avatar_url":"https://github.com/anolilab.png","language":"TypeScript","funding_links":["https://github.com/sponsors/anolilab","https://github.com/sponsors/prisis"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"./.github/assets/package-og.svg\" alt=\"Lunora\" /\u003e\n\n**Type-safe, real-time backend on your own Cloudflare account. Vite-first.**\n\n[**Documentation**](https://lunora.sh/docs) · [**Website**](https://lunora.sh) · [**Packages**](https://lunora.sh/packages) · [**Quick start**](#quick-start)\n\n\u003cbr /\u003e\n\n[![typescript-image][typescript-badge]][typescript-url]\n[![FSL-1.1-Apache-2.0 licence][license-badge]][license]\n[![Status][status-badge]][status]\n[![Node][node-badge]][node]\n[![pnpm][pnpm-badge]][pnpm]\n[![CI][ci-badge]][ci]\n[![npm version][npm-version-badge]][npm-version]\n[![PRs Welcome][prs-welcome-badge]][prs-welcome]\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003cp\u003e\n        \u003csup\u003e\n            Daniel Bannert's open source work is supported by the community on \u003ca href=\"https://github.com/sponsors/prisis\"\u003eGitHub Sponsors\u003c/a\u003e\n        \u003c/sup\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## What is Lunora?\n\nLunora is **Convex DX on your own Cloudflare account**. You write type-safe queries, mutations, and actions in TypeScript; Lunora turns them into Cloudflare Workers backed by Durable Objects for real-time state, D1 for SQL, R2 for blobs, and Queues for jobs. There are no proprietary servers in the loop — only the Cloudflare account you already pay for.\n\nIt is **Vite-first**: the dev loop, codegen, and client bindings plug into a Vite project via `@cloudflare/vite-plugin`, so dev runs on workerd (the same runtime as production). A standalone CLI fallback exists for non-Vite users.\n\n## Quick start\n\n```bash\npnpm dlx lunorash@alpha init my-app\ncd my-app\npnpm dev\n```\n\n\u003e **Alpha:** the npm package is **`lunorash`** (the unscoped `lunora` name is taken on npm); the CLI binary it installs is still **`lunora`**. Install from the `@alpha` dist-tag and expect breaking changes until the first stable release.\n\n\u003e Prefer managed hosting, or just want one email when v1 is stable? **[Join the Lunora Cloud waitlist →](https://lunora.sh/cloud)**\n\nThree visible files in a fresh app:\n\n```ts\n// lunora/schema.ts\nimport { defineSchema, defineTable, v } from \"@lunora/server\";\n\nexport default defineSchema({\n    messages: defineTable({\n        author: v.string(),\n        body: v.string(),\n        ts: v.number(),\n    }),\n});\n```\n\n```ts\n// lunora/messages.ts\nimport { mutation, query, v } from \"./_generated/server\";\n\nexport const list = query.query(async ({ ctx }) =\u003e ctx.db.query(\"messages\").order(\"desc\").take(50));\n\nexport const send = mutation.input({ author: v.string(), body: v.string() }).mutation(async ({ ctx, args }) =\u003e {\n    await ctx.db.insert(\"messages\", { ...args, ts: Date.now() });\n});\n```\n\n```tsx\n// src/App.tsx\nimport { useQuery, useMutation } from \"@lunora/react\";\nimport { api } from \"../lunora/_generated/api\";\n\nexport default function App() {\n    const messages = useQuery(api.messages.list) ?? [];\n    const send = useMutation(api.messages.send);\n    return (\n        \u003cul\u003e\n            {messages.map((m) =\u003e (\n                \u003cli key={m._id}\u003e\n                    {m.author}: {m.body}\n                \u003c/li\u003e\n            ))}\n        \u003c/ul\u003e\n    );\n}\n```\n\n`pnpm dev` boots workerd, generates the client types, opens the Vite dev server, and live-reloads on every save.\n\n## Why Lunora\n\n- **End-to-end type safety.** Server schema, validators, query results, and React hooks all share one source of truth. No client codegen step you forget to re-run.\n- **Real-time by default.** Queries are reactive over WebSocket subscriptions; mutations push deltas to subscribed clients without manual cache invalidation.\n- **Your data, your account.** Everything runs on your Cloudflare resources (Workers, Durable Objects, D1, R2, Queues, KV). No vendor lock-in beyond Cloudflare itself.\n- **Scales past the single-DO ceiling.** Start simple with one Durable Object; opt into `.shardBy(key)` per function when you need tenant-level isolation, or `.global()` for geo-replicated reads, without rewriting your app.\n\n## Lunora Studio\n\nEvery app ships with **Lunora Studio** — a local admin UI for your schema, data, functions, logs, and advisors, served automatically by `pnpm dev`. Browse and edit data, run SQL, inspect live connections and function metrics, replay state with Time Travel, and read the security \u0026 performance advisories generated from your schema.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/studio-home-dark.png\" /\u003e\n    \u003cimg src=\"./.github/assets/studio-home-light.png\" alt=\"Lunora Studio — the local admin UI for your schema, data, functions, and advisors\" width=\"900\" /\u003e\n  \u003c/picture\u003e\n\u003c/div\u003e\n\n\u003e Read the [Studio deep dive →](https://lunora.sh/blog/lunora-studio-deep-dive)\n\n## Lunora vs. the alternatives\n\n|                                                  | **Lunora**             | Convex            | Firebase          | Plain Cloudflare |\n| ------------------------------------------------ | ---------------------- | ----------------- | ----------------- | ---------------- |\n| Type-safe end-to-end                             | Yes                    | Yes               | Partial           | DIY              |\n| Real-time subscriptions                          | Yes (WS, reactive)     | Yes               | Yes               | DIY              |\n| Runs on your account                             | **Yes (Cloudflare)**   | No (managed SaaS) | No (managed SaaS) | Yes              |\n| Scales past single DO                            | **Yes (`.shardBy()`)** | n/a               | n/a               | DIY (manual)     |\n| Vite-first DX                                    | **Yes**                | n/a               | n/a               | DIY              |\n| Feature breadth (auth, mail, storage, scheduler) | Add-ons (alpha)        | Broad (built-in)  | Broad (built-in)  | DIY              |\n| Cost at idle                                     | ≈ $0 (CF free tier)    | Paid              | ≈ $0 (Spark tier) | ≈ $0             |\n\nLunora has fewer batteries-included features than Convex today. The trade you make is **infrastructure ownership and cost** — at idle, Lunora is free; at scale, you pay Cloudflare prices, not SaaS prices.\n\n## Architecture\n\n```\n                        ┌────────────────────────────────────┐\n                        │  Browser / Node / RN client        │\n                        │  @lunora/client · @lunora/react    │\n                        └─────────────────┬──────────────────┘\n                                          │  HTTPS + WebSocket (RPC envelope)\n                                          ▼\n                        ┌────────────────────────────────────┐\n                        │  Vite dev (workerd)  or  Standalone │\n                        │  @lunora/vite        │  @lunora/cli │\n                        └─────────────────┬──────────────────┘\n                                          │\n                                          ▼\n                ┌─────────────────────────────────────────────────┐\n                │  Cloudflare Worker — @lunora/runtime            │\n                │  · parses RPC      · auth      · routing        │\n                │  · upgrades WS to ShardDO via idFromName(key)   │\n                └───┬──────────┬───────────┬───────────┬──────────┘\n                    │          │           │           │\n                    ▼          ▼           ▼           ▼\n                ┌───────┐  ┌────────┐  ┌──────┐  ┌──────────┐\n                │ Shard │  │Session │  │  D1  │  │R2/Queues │\n                │  DO   │  │  DO    │  │ SQL  │  │   KV     │\n                │(state)│  │ (auth) │  │      │  │          │\n                └───────┘  └────────┘  └──────┘  └──────────┘\n                  │\n                  └── SQLite-backed, WebSocket Hibernation API,\n                      subscription registry\n```\n\n## Packages\n\nAll packages are published under the [`@lunora`](https://www.npmjs.com/org/lunora) npm scope (except the unscoped umbrella `lunorash`) and live under `packages/`.\n\n\u003e This table is generated from each package's `package.json` and `project.json`. Run `pnpm run generate:packages-list` to refresh it.\n\n\u003c!-- START_TABLE_PLACEHOLDER --\u003e\n\n### Runtime\n\n| Package                                             | Version                                                                                                                                                                    | Description                                                                                                                |\n| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| [`@lunora/d1`](packages/d1/README.md)               | [![npm](https://img.shields.io/npm/v/%40lunora%2Fd1?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fd1)               | D1 adapter for Lunora .global() tables, wrapping the Sessions API for read-your-writes                                     |\n| [`@lunora/do`](packages/do/README.md)               | [![npm](https://img.shields.io/npm/v/%40lunora%2Fdo?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fdo)               | Lunora Durable Objects: ShardDO (SQLite, OCC, hibernated WebSocket subscriptions) and SessionDO                            |\n| [`@lunora/runtime`](packages/runtime/README.md)     | [![npm](https://img.shields.io/npm/v/%40lunora%2Fruntime?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fruntime)     | Lunora Worker runtime: the RPC router, shard resolver, and query coordinator                                               |\n| [`@lunora/server`](packages/server/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fserver?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fserver)       | Server primitives for Lunora: defineSchema, defineTable, query, mutation, and action                                       |\n| [`@lunora/sql-store`](packages/sql-store/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fsql-store?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fsql-store) | Internal dialect-parameterized SQL store core for Lunora .global() backends (D1, PlanetScale)                              |\n| [`@lunora/values`](packages/values/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fvalues?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fvalues)       | Validators for Lunora: the v.\\* validator suite with end-to-end return-type inference                                      |\n| [`lunorash`](packages/lunora/README.md)             | [![npm](https://img.shields.io/npm/v/lunorash?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/lunorash)                           | The Lunora umbrella package: one install for the server authoring API, worker runtime, Durable Objects, and the lunora CLI |\n\n### Client \u0026 Framework Adapters\n\n| Package                                       | Version                                                                                                                                                              | Description                                                                                                             |\n| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| [`@lunora/astro`](packages/astro/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fastro?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fastro)   | Astro integration for Lunora — single-worker composition plus reactive-loader server helpers                            |\n| [`@lunora/client`](packages/client/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fclient?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fclient) | Lunora browser SDK: WebSocket transport, optimistic updates, and an offline mutation queue                              |\n| [`@lunora/db`](packages/db/README.md)         | [![npm](https://img.shields.io/npm/v/%40lunora%2Fdb?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fdb)         | TanStack DB binding: typed, live-synced collections and a durable offline outbox over the Lunora client                 |\n| [`@lunora/nuxt`](packages/nuxt/README.md)     | [![npm](https://img.shields.io/npm/v/%40lunora%2Fnuxt?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fnuxt)     | Nuxt module for Lunora — single-worker composition (mounts /\\_lunora/\\* into Nitro) plus reactive-loader server helpers |\n| [`@lunora/react`](packages/react/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Freact?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Freact)   | React hooks for Lunora: useQuery, useMutation, useSubscription, and useAuth                                             |\n| [`@lunora/solid`](packages/solid/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fsolid?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fsolid)   | SolidJS adapter for Lunora — live queries, optimistic mutations, and reactive loaders                                   |\n| [`@lunora/studio`](packages/studio/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fstudio?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fstudio) | The Lunora Studio: a local admin UI for your schema, data, logs, and advisors                                           |\n| [`@lunora/svelte`](packages/svelte/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fsvelte?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fsvelte) | Svelte adapter for Lunora — live stores, optimistic mutations, and reactive loaders                                     |\n| [`@lunora/vue`](packages/vue/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fvue?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fvue)       | Vue adapter for Lunora — live composables, optimistic mutations, and reactive loaders                                   |\n\n### CLI\n\n| Package                                 | Version                                                                                                                                                        | Description                                                                  |\n| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |\n| [`@lunora/cli`](packages/cli/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fcli?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fcli) | The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands |\n\n### Codegen\n\n| Package                                         | Version                                                                                                                                                                | Description                                                                             |\n| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| [`@lunora/codegen`](packages/codegen/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fcodegen?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fcodegen) | Code generator for Lunora: emits \\_generated/{api,server,dataModel}.ts from your schema |\n\n### Vite Plugin\n\n| Package                                   | Version                                                                                                                                                          | Description                                                                                                        |\n| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |\n| [`@lunora/vite`](packages/vite/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fvite?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fvite) | The Lunora Vite plugin: codegen, type sync, wrangler validation, and an error overlay over @cloudflare/vite-plugin |\n\n### Dev Tools\n\n| Package                                         | Version                                                                                                                                                                | Description                                                                                                                 |\n| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |\n| [`@lunora/config`](packages/config/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fconfig?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fconfig)   | Internal shared CLI + Vite config layer for Lunora: wrangler.jsonc validation, binding inference, and .dev.vars scaffolding |\n| [`@lunora/testing`](packages/testing/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Ftesting?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Ftesting) | Testing toolkit for Lunora: an in-memory harness for queries, mutations, and actions                                        |\n\n### Advisor\n\n| Package                                         | Version                                                                                                                                                                | Description                                                                                 |\n| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |\n| [`@lunora/advisor`](packages/advisor/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fadvisor?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fadvisor) | Schema \u0026 query lints (splinter-style advisors) for Lunora, feeding the Studio Advisors view |\n\n### Add-ons\n\n| Package                                               | Version                                                                                                                                                                      | Description                                                                                                                                                     |\n| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`@lunora/ai`](packages/ai/README.md)                 | [![npm](https://img.shields.io/npm/v/%40lunora%2Fai?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fai)                 | Workers AI helper for Lunora: provider-agnostic AI SDK access from functions, Workers AI by default                                                             |\n| [`@lunora/auth`](packages/auth/README.md)             | [![npm](https://img.shields.io/npm/v/%40lunora%2Fauth?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fauth)             | Auth for Lunora — a thin better-auth wrapper: email/password, OAuth, plugins, D1-backed                                                                         |\n| [`@lunora/bindings`](packages/bindings/README.md)     | [![npm](https://img.shields.io/npm/v/%40lunora%2Fbindings?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fbindings)     | Lightweight Cloudflare binding helpers for Lunora — ctx.kv, ctx.images, ctx.analytics (+ Pipelines), ctx.vectors, ctx.r2sql — one install, per-binding subpaths |\n| [`@lunora/browser`](packages/browser/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fbrowser?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fbrowser)       | Cloudflare Browser Rendering for Lunora: ctx.browser screenshots, PDF, and scraping in actions                                                                  |\n| [`@lunora/container`](packages/container/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fcontainer?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fcontainer)   | Cloudflare Containers for Lunora: defineContainer, generated Container DO classes, and the ctx.containers action surface                                        |\n| [`@lunora/dispatch`](packages/dispatch/README.md)     | [![npm](https://img.shields.io/npm/v/%40lunora%2Fdispatch?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fdispatch)     | Shared dispatch runner for Lunora: call a Lunora function from a server-initiated context (workflow/queue/scheduled job) via /\\_lunora/scheduler/dispatch       |\n| [`@lunora/hyperdrive`](packages/hyperdrive/README.md) | [![npm](https://img.shields.io/npm/v/%40lunora%2Fhyperdrive?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fhyperdrive) | Bring-your-own Postgres/MySQL for Lunora via Cloudflare Hyperdrive: a driver-agnostic, action-only ctx.sql                                                      |\n| [`@lunora/mail`](packages/mail/README.md)             | [![npm](https://img.shields.io/npm/v/%40lunora%2Fmail?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fmail)             | Email for Lunora: Resend adapter, TSX templates, and queue-backed sends                                                                                         |\n| [`@lunora/mcp`](packages/mcp/README.md)               | [![npm](https://img.shields.io/npm/v/%40lunora%2Fmcp?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fmcp)               | Model Context Protocol server exposing a Lunora deployment to AI agents                                                                                         |\n| [`@lunora/payment`](packages/payment/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fpayment?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fpayment)       | Provider-agnostic payments for Lunora: Stripe-first adapter, webhook sync, and subscription/payment state machine                                               |\n| [`@lunora/queue`](packages/queue/README.md)           | [![npm](https://img.shields.io/npm/v/%40lunora%2Fqueue?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fqueue)           | Cloudflare Queues for Lunora: defineQueue producers + consumers, the ctx.queues surface, and the generated queue() worker handler                               |\n| [`@lunora/ratelimit`](packages/ratelimit/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fratelimit?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fratelimit)   | Rate limiting: token-bucket / fixed-window / sliding-window algorithms, deny list, sharding, pluggable stores, and procedure middleware                         |\n| [`@lunora/scheduler`](packages/scheduler/README.md)   | [![npm](https://img.shields.io/npm/v/%40lunora%2Fscheduler?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fscheduler)   | Scheduling for Lunora: runAfter / runAt and Cron Triggers via SchedulerDO                                                                                       |\n| [`@lunora/seed`](packages/seed/README.md)             | [![npm](https://img.shields.io/npm/v/%40lunora%2Fseed?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fseed)             | Schema-driven, deterministic database seeding for Lunora: realistic fake data from defineSchema                                                                 |\n| [`@lunora/storage`](packages/storage/README.md)       | [![npm](https://img.shields.io/npm/v/%40lunora%2Fstorage?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fstorage)       | R2-backed storage for Lunora: typed buckets and signed URLs                                                                                                     |\n| [`@lunora/workflow`](packages/workflow/README.md)     | [![npm](https://img.shields.io/npm/v/%40lunora%2Fworkflow?style=flat-square\u0026labelColor=292a44\u0026color=663399\u0026label=v)](https://www.npmjs.com/package/%40lunora%2Fworkflow)     | Durable workflows for Lunora: defineWorkflow over Cloudflare Workflows, generated WorkflowEntrypoint classes, and the ctx.workflows surface                     |\n\n\u003c!-- END_TABLE_PLACEHOLDER --\u003e\n\n## Documentation\n\nFull documentation lives at **[lunora.sh/docs](https://lunora.sh/docs)** — guides, core concepts, framework adapters, and per-package reference:\n\n- [Getting started](https://lunora.sh/docs/getting-started) — scaffold an app and run the dev loop in under a minute\n- [Queries, mutations \u0026 actions](https://lunora.sh/docs/concepts/queries-mutations) — the core authoring model\n- [Real-time](https://lunora.sh/docs/concepts/realtime) · [Sharding](https://lunora.sh/docs/concepts/sharding) · [RLS](https://lunora.sh/docs/concepts/rls) — the concepts that make it scale\n- [Architecture](https://lunora.sh/docs/architecture) — how the Worker, Durable Objects, and storage fit together\n- [Deployment](https://lunora.sh/docs/deployment) — ship to your own Cloudflare account\n- [Packages](https://lunora.sh/packages) — every `@lunora/*` adapter and add-on\n\n## Status\n\n**v1.0.0-alpha.1 — APIs WILL break.** This is bootstrap-quality. Nothing is on npm yet; the surface area, package boundaries, and on-disk layout will all shift before the first non-alpha tag.\n\nYou are welcome to read, file issues, and open PRs against the [`alpha`](https://github.com/anolilab/lunora/tree/alpha) branch. Just don't build a production system on it yet.\n\n## Contributing\n\nSee [`.github/CONTRIBUTING.md`](./.github/CONTRIBUTING.md). The default branch is **`alpha`**; PRs target `alpha` unless explicitly cutting a release.\n\nFor security reports, see [`SECURITY.md`](./SECURITY.md). For community guidelines, see [`.github/CODE_OF_CONDUCT.md`](./.github/CODE_OF_CONDUCT.md). For brand assets and usage rules, see [`marketing/BRAND.md`](./marketing/BRAND.md).\n\n## License\n\n[FSL-1.1-Apache-2.0](./LICENSE.md) © 2026 anolilab and contributors. Source-available; each release converts to Apache-2.0 two years after it ships.\n\n\u003c!-- badges --\u003e\n\n[typescript-badge]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge\u0026logo=typescript\n[typescript-url]: https://www.typescriptlang.org/\n[license-badge]: https://img.shields.io/badge/license-FSL--1.1--Apache--2.0-blue.svg?style=for-the-badge\n[license]: ./LICENSE.md\n[status-badge]: https://img.shields.io/badge/status-alpha-blueviolet.svg?style=for-the-badge\n[status]: #status\n[node-badge]: https://img.shields.io/badge/node-%5E22.15%20%7C%7C%20%3E%3D24.11-brightgreen.svg?style=for-the-badge\n[node]: ./package.json\n[pnpm-badge]: https://img.shields.io/badge/pnpm-11.5.3-f69220.svg?style=for-the-badge\n[pnpm]: ./package.json\n[ci-badge]: https://img.shields.io/github/actions/workflow/status/anolilab/lunora/test.yml?branch=alpha\u0026style=for-the-badge\u0026label=CI\n[ci]: https://github.com/anolilab/lunora/actions/workflows/test.yml\n[npm-version-badge]: https://img.shields.io/npm/v/lunorash/alpha?label=lunorash%40alpha\u0026color=cb3837\u0026style=for-the-badge\n[npm-version]: https://www.npmjs.com/package/lunorash\n[prs-welcome-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge\n[prs-welcome]: https://github.com/anolilab/lunora/blob/alpha/.github/CONTRIBUTING.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanolilab%2Flunora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanolilab%2Flunora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanolilab%2Flunora/lists"}