{
  "markdown": "<div align=\"center\">\n\n<img src=\"apps/web/public/logo.png\" alt=\"Orbit\" height=\"72\" />\n\n# Orbit\n\n**A free, realtime, keyboard-first task manager.**\n\nIssues, boards, sprints, projects and docs that update the moment anyone changes\nanything. The polish you expect from a paid task manager, with no per-seat bill\nat the end of the month.\n\n**No pricing. No billing. No paid tiers. Not now, not later.**\n\n[![CI](https://github.com/Noveum/orbit/actions/workflows/ci.yml/badge.svg)](https://github.com/Noveum/orbit/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n[![Stars](https://img.shields.io/github/stars/Noveum/orbit?style=flat&color=5a63c8)](https://github.com/Noveum/orbit/stargazers)\n[![Commits](https://img.shields.io/github/commit-activity/t/Noveum/orbit?color=5a63c8)](https://github.com/Noveum/orbit/commits/main)\n[![Last commit](https://img.shields.io/github/last-commit/Noveum/orbit?color=5a63c8)](https://github.com/Noveum/orbit/commits/main)\n\n[![Good first issues](https://img.shields.io/github/issues/Noveum/orbit/good%20first%20issue?label=good%20first%20issues&color=7057ff)](https://github.com/Noveum/orbit/labels/good%20first%20issue)\n[![PRs welcome](https://img.shields.io/badge/PRs-welcome-0e8a16.svg)](CONTRIBUTING.md)\n[![Bun](https://img.shields.io/badge/built%20with-Bun-000000?logo=bun)](https://bun.sh)\n[![Sponsored by Noveum AI](https://img.shields.io/badge/sponsored%20by-Noveum%20AI-5a63c8)](https://noveum.ai)\n\n[**Live demo**](https://orbit.noveum.ai) · [**Documentation**](https://noveum.github.io/orbit/) · [**Quick start**](#quick-start) · [**Self-host**](docs/self-hosting.md) · [**Contribute**](CONTRIBUTING.md) · [**Roadmap**](docs/roadmap.md)\n\n</div>\n\n> **Self-hosting status: Preview.** The repository supports local evaluation,\n> but it is not yet a supported production release. Review the current\n> limitations in [the readiness tracker](docs/open-source-readiness.md).\n\n<div align=\"center\">\n  <img src=\"docs/assets/screenshots/board-dark.png\" alt=\"The Orbit board, dark theme\" width=\"100%\" />\n</div>\n\n---\n\n## Why Orbit exists\n\nA task manager costs around 18 dollars per person per month. For a team of\ntwenty that is over four thousand dollars a year to keep a list of tasks in\norder.\n\nThe alternatives were not a real answer. The free ones are slow and feel like\nfilling in a form. The self-hosted ones are heavy to run. The cheap ones are\ncheap for a reason, and every one of them eventually asks for a card.\n\nSo we built the task manager we wanted, made it free and open-sourced it. Not free-with-an-asterisk,\nnot free-for-three-users, not free-until-we-raise. There is no billing code in\nthis repository and there is no plan to add any.\n\nOrbit is sponsored by [Noveum AI](https://noveum.ai), who pay for the hosted\ninstance and the engineering time. Everything is Apache-2.0, so you can run it\nyourself and never depend on us at all.\n\n## Screenshots\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/issues-dark.png\" alt=\"Issue list\" /><br /><sub><b>Issues</b>, as a fast list or a board. Every property changes from the keyboard.</sub></td>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/command-palette-light.png\" alt=\"Command palette\" /><br /><sub><b>Command palette.</b> Cmd K, then go anywhere or do anything.</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/sprints-dark.png\" alt=\"Sprints\" /><br /><sub><b>Sprints</b> with scope, points, burndown and carryover.</sub></td>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/doc-light.png\" alt=\"Docs\" /><br /><sub><b>Docs</b> with a rich editor, living beside the issues they describe.</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/html-doc-dark.png\" alt=\"HTML page\" /><br /><sub><b>HTML pages</b> as one self-contained file, with a live preview and their own URL.</sub></td>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/html-doc-light.png\" alt=\"HTML page, light theme\" /><br /><sub>Source, split, or preview. CSS and script stay in the file.</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/standup-dark.png\" alt=\"Standup\" /><br /><sub><b>Standup</b>: the whole workspace as a Kanban, filtered to one person with a click.</sub></td>\n<td width=\"50%\"><img src=\"docs/assets/screenshots/analytics-light.png\" alt=\"Analytics\" /><br /><sub><b>Analytics</b>: scope, throughput, churn and distributions.</sub></td>\n</tr>\n</table>\n\n<sub>More in [`docs/assets/screenshots`](docs/assets/screenshots), every screen in both themes.</sub>\n\n## What it does\n\n| | |\n| --- | --- |\n| **Issues** | Priorities, labels, states, estimates, assignees, multiple reviewers and relations. Fast list or drag-and-drop board |\n| **Sprints and cycles** | Timeboxed planning with scope, points, burndown and carryover |\n| **Projects and milestones** | Group work that spans teams and sprints |\n| **Docs** | Rich editor, collections, comments, public share links, self-contained HTML pages |\n| **Standup** | The whole workspace as a Kanban, filtered to work a person owns or reviews by clicking their tile |\n| **Analytics** | Scope, throughput, churn, and distribution by assignee, project, label and estimate |\n| **Search and views** | Filters over everything, saved and shared or kept private |\n| **Realtime** | Every change fans out over a websocket to exactly the people allowed to see it |\n| **Keyboard first** | Cmd K for everything, `g` to navigate, single keys to act. Press `?` |\n| **MCP server** | AI agents read the board and file work, with your permissions, over OAuth |\n| **Notifications** | In-app inbox, with per-event preferences and quiet hours |\n| **GitHub** | Pull requests linked to the issues they close |\n| **Auth** | Passkeys, Google, GitHub, email OTP. Password optional and off by default |\n| **Roles** | Admin, member, contributor and guest, enforced on the server |\n| **Themes** | Light and dark, both first class |\n\n## Quick start\n\nYou need [Bun](https://bun.sh) 1.3 or newer and Docker. That is the whole list.\n\n```bash\ngit clone https://github.com/Noveum/orbit.git\ncd orbit\n\nbun install\ncp .env.example .env\n\nbun run infra:up        # postgres, redis and minio\nbun run db:push         # create the schema\nbun run db:test-setup   # create the test databases\nbun run db:seed         # load a demo workspace\n\nbun run dev             # http://localhost:3000\n```\n\nSign in as **`alex@orbit.example`**. The seed loads three teams, seven people,\nthirty two issues, projects, sprints and docs, so there is something to click on\nstraight away.\n\nThen press <kbd>Cmd</kbd> <kbd>K</kbd>, and open a second tab and change\nsomething in one to watch the other update.\n\n| Service | Port |\n| --- | --- |\n| web | 3000 |\n| realtime (development only) | 3100 |\n| postgres | 5434 |\n| redis | 6380 |\n| minio | 9010 |\n\nFull walkthrough in [docs/getting-started.md](docs/getting-started.md).\n\n## Reference deployment (Preview)\n\nThe setup below describes the Noveum AI deployment profile. It is not a\nprovider-neutral production support commitment.\n\nOrbit is one Next.js app. It needs Postgres, Redis and an S3-compatible bucket,\nall of which have free tiers, so a small team can run it for nothing.\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FNoveum%2Forbit&root-directory=apps%2Fweb&env=DATABASE_URL,REDIS_URL,BETTER_AUTH_SECRET,BETTER_AUTH_URL,NEXT_PUBLIC_APP_URL,RESEND_API_KEY,EMAIL_FROM&project-name=orbit&repository-name=orbit)\n\nThe button prompts for Resend so a fresh deployment can send sign-in codes. You\ncan instead configure password, Google or GitHub sign-in. Production refuses to\nbuild or start without one complete method; see [Authentication](docs/configuration.md#authentication).\n\nTwo things that are not optional and produce confusing failures if you get them\nwrong:\n\n- **Root directory is `apps/web`, and functions run on node.** Do not set\n  `bunVersion` in `apps/web/vercel.json`. It moves every function to the Bun\n  runtime, where the websocket upgrade at `/api/ws` silently never happens and\n  the browser retries forever against a socket that never opens.\n- **Never set `NEXT_PUBLIC_REALTIME_URL` in production.** The socket is served\n  from the page's own origin, and Orbit ignores this variable in production.\n  Leaving it set only makes the deployment configuration misleading.\n\nSupabase for Postgres, Upstash for Redis, Cloudflare R2 for files and Resend for\nemail is the combination we run. Other providers have not yet been certified by\nthis project.\n\nFull guide, including running it on your own server behind nginx:\n[docs/self-hosting.md](docs/self-hosting.md).\n\n## For AI agents\n\nOrbit ships an MCP server, so Claude, Cursor, VS Code or anything else that\nspeaks MCP can read your board and do work in it.\n\n```bash\nclaude mcp add --transport http orbit https://orbit.example.com/mcp\n```\n\nOAuth only, no API keys. You pick the workspace, re-verify a passkey and approve\nthe scopes, and the grant is revocable from settings. **An agent never has more\npermission than the person who authorised it**, because the tools run through\nthe same policy as everything else. A token with only `orbit.read` is not shown\nthe write tools at all.\n\nSixty odd tools covering issues, sprints, projects and docs. Things that work\ntoday:\n\n> \"What is blocking the Realtime Sync Engine project?\"\n>\n> \"File a bug on Engineering: passkey sign-in fails on Safari when no credential\n> is registered. High priority, assign it to me.\"\n>\n> \"Summarise what each person closed yesterday.\"\n\n[docs/mcp.md](docs/mcp.md) has the setup and the full tool list.\n\n## Documentation\n\n| | |\n| --- | --- |\n| [Getting started](docs/getting-started.md) | Run it locally in five minutes |\n| [Concepts](docs/concepts.md) | Workspaces, teams, issues, sprints, projects, docs, views |\n| [Self-hosting](docs/self-hosting.md) | Vercel, Supabase, Upstash, R2, or your own server |\n| [Configuration](docs/configuration.md) | Every environment variable |\n| [Keyboard shortcuts](docs/keyboard-shortcuts.md) | All of them |\n| [MCP server](docs/mcp.md) | Connect an AI assistant |\n| [Integrations](docs/integrations.md) | GitHub |\n| [Architecture](docs/architecture.md) | How a change reaches every screen |\n| [Testing](docs/testing.md) | Running and writing tests |\n| [Troubleshooting](docs/troubleshooting.md) | The failures we actually hit |\n| [Roadmap](docs/roadmap.md) | What is next, and what we will not do |\n\n## How it is built\n\n```\napps/web                  Next.js 16: UI, REST handlers, auth, /api/ws, /mcp\napps/realtime             Websocket host, local development only, never deployed\npackages/realtime-server  Connection hub: tickets, scopes, presence, Redis fan-out\npackages/realtime-client  Browser client: subscribe, patch, reconnect\npackages/mcp-server       MCP tools and the handler behind /mcp\npackages/core             Domain operations shared by REST, MCP and the hub\npackages/services         Markdown, storage, email, notifications, Slack, GitHub\npackages/db               Drizzle schema, migrations, client, seed\npackages/shared           Zod validators, domain types, event contracts, policy\n```\n\nTypeScript throughout, in strict mode with `any` as a lint error. Next.js 16 and\nReact 19. Postgres through Drizzle. Redis for realtime fan-out. Bun as the\ntoolchain, node as the runtime, because a Vercel function can only upgrade a\nwebsocket on node.\n\nA change writes to Postgres, bumps a monotonic `sync_id`, publishes to Redis,\nand the hub fans it out to the connections whose scope entitles them to see it.\nThe client patches its cache rather than refetching, so your scroll position and\nselection survive. [docs/architecture.md](docs/architecture.md) has the detail.\n\n## Contributing\n\nContributions are wanted, and not only code. Docs, bug reports, translations,\naccessibility and design all count.\n\n```bash\nbun run verify   # lint, comment policy, types, tests. The same four CI runs\n```\n\nGood places to start:\n\n- [**Good first issues**](https://github.com/Noveum/orbit/labels/good%20first%20issue), scoped small with the file paths written into the description\n- [**Help wanted**](https://github.com/Noveum/orbit/labels/help%20wanted), everything we would like a hand with\n- [**The roadmap**](docs/roadmap.md), for the bigger pieces\n\nA few house rules that will otherwise surprise you in review: **Bun only**, no\nnpm or pnpm. **No comments in code**, the build fails on them, so put the\nmeaning in names and the prose in the pull request. **No `any`**, no non-null\nassertions. **No em-dashes.** And a feature is not done until it has a test that\nwould fail if the feature broke.\n\nFull guide in [CONTRIBUTING.md](CONTRIBUTING.md). The repository carries its own\ncontext files, [`CLAUDE.md`](CLAUDE.md) and [`AGENTS.md`](AGENTS.md), so your\neditor picks up the conventions without you explaining them each time.\n\n## Contributors\n\n<a href=\"https://github.com/Noveum/orbit/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=Noveum/orbit\" alt=\"Contributors\" />\n</a>\n\nYour face goes here. Genuinely, even for a typo fix.\n\n## Community\n\n- [**Discussions**](https://github.com/Noveum/orbit/discussions) for questions and ideas\n- [**Issues**](https://github.com/Noveum/orbit/issues) for bugs and concrete work\n- [**Security**](SECURITY.md) for anything that should not be public\n\nIf Orbit is useful to you, a star helps other people find it.\n\n## Sponsor\n\n<div align=\"center\">\n  <a href=\"https://noveum.ai\">\n    <b>Sponsored by Noveum AI</b>\n  </a>\n</div>\n\n[Noveum AI](https://noveum.ai) builds evaluation and observability tooling for AI\nsystems, and pays for Orbit's hosting and engineering time. Orbit is not a\nfunnel for it. There is no upsell, no \"contact sales\" and no gated feature. We\nneeded a task manager, we could not find a free one that was good, so we built one\nand gave it away.\n\n## License\n\n[Apache License 2.0](LICENSE). Use it, run it, change it, ship it, commercially\nor otherwise. The patent grant protects you, and the [NOTICE](NOTICE) asks only\nthat a public fork picks its own name so nobody confuses your build with this\none.\n\n<div align=\"center\">\n<sub>Built by <a href=\"https://noveum.ai\">Noveum AI</a> and <a href=\"https://github.com/Noveum/orbit/graphs/contributors\">everyone who has contributed</a>.</sub>\n</div>\n",
  "bytes": 14356,
  "sha": "cb587d3a6b7a925c08bb980f398af16195a1a8fa24a683a76e499b8f09b9547b",
  "repo_slug": "noveum/orbit",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_noveum_orbit_dbf16c51/readme"
}