{"id":49576123,"url":"https://github.com/cacheplane/dawnai","last_synced_at":"2026-06-12T03:01:41.005Z","repository":{"id":355277927,"uuid":"1210070282","full_name":"cacheplane/dawnai","owner":"cacheplane","description":"Build LangGraph agents like Next.js apps.","archived":false,"fork":false,"pushed_at":"2026-06-06T23:09:53.000Z","size":2753,"stargazers_count":84,"open_issues_count":7,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-07T01:12:05.840Z","etag":null,"topics":["agents","ai","developer-tools","framework","langchain","langgraph","typescript"],"latest_commit_sha":null,"homepage":"https://dawnai.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cacheplane.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T03:58:13.000Z","updated_at":"2026-06-06T23:00:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"58184a1e-2160-4756-8bf5-71f11b59dab7","html_url":"https://github.com/cacheplane/dawnai","commit_stats":null,"previous_names":["cacheplane/dawnai"],"tags_count":89,"template":false,"template_full_name":null,"purl":"pkg:github/cacheplane/dawnai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cacheplane%2Fdawnai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cacheplane%2Fdawnai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cacheplane%2Fdawnai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cacheplane%2Fdawnai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cacheplane","download_url":"https://codeload.github.com/cacheplane/dawnai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cacheplane%2Fdawnai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34226629,"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-12T02:00:06.859Z","response_time":109,"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":["agents","ai","developer-tools","framework","langchain","langgraph","typescript"],"created_at":"2026-05-03T17:04:59.765Z","updated_at":"2026-06-12T03:01:40.992Z","avatar_url":"https://github.com/cacheplane.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/brand/dawn-logo-horizontal-black-on-white.png\" alt=\"Dawn\" width=\"360\" /\u003e\n\u003c/p\u003e\n\n# Dawn\n\n[![CI](https://github.com/cacheplane/dawnai/actions/workflows/ci.yml/badge.svg)](https://github.com/cacheplane/dawnai/actions/workflows/ci.yml)\n[![OpenSSF Scorecard](https://github.com/cacheplane/dawnai/actions/workflows/scorecard.yml/badge.svg)](https://github.com/cacheplane/dawnai/actions/workflows/scorecard.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-111827.svg)](./LICENSE)\n\nThe TypeScript meta-framework for LangGraph. Author AI agents and workflows as filesystem routes, get end-to-end types and a local dev server for free, and deploy to LangSmith with one command.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/brand/quickstart.gif\" alt=\"Dawn quickstart — scaffold a route and invoke it in under a minute\" width=\"900\" /\u003e\n\u003c/p\u003e\n\n## Why Dawn?\n\n- **Kill the LangGraph boilerplate.** Export one `agent({ model, systemPrompt })` descriptor. Dawn discovers it, wires route-local tools into the generated graph, and emits a `langgraph.json` package ready for LangSmith.\n- **Filesystem-routed agents.** Filesystem routes under `src/app/` — colocate state schemas, tools, middleware, and tests next to the route they belong to. No more ad-hoc folders.\n- **A real local dev loop.** `dawn dev` runs your routes locally with LangSmith-style endpoints. Iterate in seconds, then verify the generated deployment artifact before shipping.\n- **Typed end to end (TypeScript).** Route params, state, and tool I/O are generated as TypeScript types. `dawn verify` is your pre-deploy gate.\n\n## Without Dawn / With Dawn\n\nSame LangGraph deployment shape, less code to author.\n\n### Without Dawn\n\n```ts\n// graph.ts\nimport { StateGraph, MessagesAnnotation, START, END } from \"@langchain/langgraph\"\nimport { ToolNode } from \"@langchain/langgraph/prebuilt\"\nimport { ChatOpenAI } from \"@langchain/openai\"\nimport { tool } from \"@langchain/core/tools\"\nimport { z } from \"zod\"\n\nconst greet = tool(async ({ name }) =\u003e `Hello, ${name}!`, {\n  name: \"greet\",\n  description: \"Greet a user by name.\",\n  schema: z.object({ name: z.string() }),\n})\n\nconst model = new ChatOpenAI({ model: \"gpt-4o-mini\" }).bindTools([greet])\nconst tools = new ToolNode([greet])\n\nasync function callModel(state: typeof MessagesAnnotation.State) {\n  return { messages: [await model.invoke(state.messages)] }\n}\n\nfunction shouldContinue(state: typeof MessagesAnnotation.State) {\n  const last = state.messages.at(-1) as any\n  return last?.tool_calls?.length ? \"tools\" : END\n}\n\nexport const graph = new StateGraph(MessagesAnnotation)\n  .addNode(\"agent\", callModel)\n  .addNode(\"tools\", tools)\n  .addEdge(START, \"agent\")\n  .addConditionalEdges(\"agent\", shouldContinue, [\"tools\", END])\n  .addEdge(\"tools\", \"agent\")\n  .compile()\n```\n\n```json\n// langgraph.json\n{\n  \"dependencies\": [\".\"],\n  \"graphs\": { \"hello\": \"./graph.ts:graph\" },\n  \"node_version\": \"22\",\n  \"env\": \".env\"\n}\n```\n\n### With Dawn\n\n```ts\n// src/app/(public)/hello/[tenant]/index.ts\nimport { agent } from \"@dawn-ai/sdk\"\n\nexport default agent({\n  model: \"gpt-4o-mini\",\n  systemPrompt: \"You are a helpful assistant for the {tenant} organization.\",\n})\n```\n\n```ts\n// src/app/(public)/hello/[tenant]/tools/greet.ts\nexport default async ({ name }: { name: string }) =\u003e `Hello, ${name}!`\n```\n\n`dawn build` emits the `langgraph.json` for you.\n\n## Quickstart\n\n1. Create a new app.\n\n```bash\npnpm create dawn-ai-app my-dawn-app\ncd my-dawn-app\npnpm install\n```\n\n2. Validate the app and generate types in one call.\n\n```bash\npnpm exec dawn verify\n```\n\n3. Run the scaffolded route. The route path must be quoted because it contains `(`, `)`, and `[]`.\n\n```bash\necho '{\"tenant\":\"acme\"}' | pnpm exec dawn run '/hello/[tenant]'\n```\n\n4. Optionally start the local runtime in one terminal and send the same route through `--url` from another terminal.\n\n```bash\npnpm exec dawn dev --port 3001\necho '{\"tenant\":\"acme\"}' | pnpm exec dawn run '/hello/[tenant]' --url http://127.0.0.1:3001\n```\n\n## 30-Second Route\n\nDawn routes live under `src/app` and export one runtime entry. New agent routes should use the `agent()` descriptor from `@dawn-ai/sdk`; Dawn discovers the route, wires route-local tools into the generated graph, generates types, and produces a `langgraph.json` package for LangSmith.\n\n```ts\nimport { agent } from \"@dawn-ai/sdk\"\n\nexport default agent({\n  model: \"gpt-4o-mini\",\n  systemPrompt: \"You are a helpful assistant for the {tenant} organization.\",\n  retry: { maxAttempts: 3, baseDelay: 250 },\n})\n```\n\nAdd `state.ts` for a route state schema, `tools/*.ts` for route-local tools, `middleware.ts` for access control, and `run.test.ts` for colocated scenarios.\n\nThe built-in `agent()` route materializes to a LangChain chat model. Dawn infers providers for known model families; set `provider` explicitly to one of the supported built-in provider ids for aliases, ambiguous model names, local models, or provider-router model ids. Raw `graph` and `chain` routes can still instantiate any provider directly.\n\n---\n\n⭐ [Star Dawn on GitHub](https://github.com/cacheplane/dawnai) · 📚 [Read the docs](https://dawnai.org/docs/getting-started) · 💬 [Ask in GitHub Discussions](https://github.com/cacheplane/dawnai/discussions)\n\n## Learn more\n\n- [Getting started](https://dawnai.org/docs/getting-started)\n- [Routes](https://dawnai.org/docs/routes)\n- [Tools](https://dawnai.org/docs/tools)\n- [State](https://dawnai.org/docs/state)\n- [CLI](https://dawnai.org/docs/cli)\n- [Dev server](https://dawnai.org/docs/dev-server)\n- [Testing](https://dawnai.org/docs/testing)\n- [Deployment](https://dawnai.org/docs/deployment)\n\n---\n\nContributions welcome — see [CONTRIBUTING.md](./CONTRIBUTING.md). Repo layout and dev commands in [CONTRIBUTORS.md](./CONTRIBUTORS.md). Security: [SECURITY.md](./SECURITY.md). Please follow the [Code of Conduct](./CODE_OF_CONDUCT.md).\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcacheplane%2Fdawnai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcacheplane%2Fdawnai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcacheplane%2Fdawnai/lists"}