Orbit
A free, realtime, keyboard-first task manager.
Issues, boards, sprints, projects and docs that update the moment anyone changesanything. The polish you expect from a paid task manager, with no per-seat billat the end of the month.
No pricing. No billing. No paid tiers. Not now, not later.
Live demo · Documentation · Quick start · Releases · Changelog · Self-host · Contribute
Self-hosting status: Preview. The repository supports local evaluation,but it is not yet a supported production release. Review the currentlimitations in the readiness tracker.
Latest source release
2026.09.08 adds similar-issue suggestions during creation, a workspaceproject updates feed, and comment moderation for members and admins. It alsoupdates dependencies, preview deployment controls, documentation, and screenshots.
Read the full changelog andupgrade guide before updating an existing installation.Releases use dated source tags; self-hosting remains Preview.
Why Orbit exists
A task manager costs around 18 dollars per person per month. For a team oftwenty that is over four thousand dollars a year to keep a list of tasks inorder.
The alternatives were not a real answer. The free ones are slow and feel likefilling in a form. The self-hosted ones are heavy to run. The cheap ones arecheap for a reason, and every one of them eventually asks for a card.
So we built the task manager we wanted, made it free and open-sourced it. Not free-with-an-asterisk,not free-for-three-users, not free-until-we-raise. There is no billing code inthis repository and there is no plan to add any.
Orbit is sponsored by Noveum AI, who pay for the hostedinstance and the engineering time. Everything is Apache-2.0, so you can run ityourself and never depend on us at all.
Screenshots
| Issues, as a fast list or a board. Every property changes from the keyboard. | Command palette. Cmd K, then go anywhere or do anything. |
| Sprints with scope, points, burndown and carryover. | Docs with a rich editor, living beside the issues they describe. |
| HTML pages as one self-contained file, with a live preview and their own URL. | Source, split, or preview. CSS and script stay in the file. |
| Standup: the whole workspace as a Kanban, filtered to one person with a click. | Analytics: scope, throughput, churn and distributions. |
| Project updates: health reports from across the workspace in one feed. | Similar issues: review an existing task before creating another. |
More in docs/assets/screenshots, every screen in both themes.
What it does
| Issues | Priorities, labels, states, estimates, assignees, multiple reviewers and relations. Similar-issue suggestions during creation. Fast list or keyboard-accessible drag-and-drop board |
| Sprints and cycles | Timeboxed planning with scope, points, burndown and carryover |
| Projects and milestones | Group work across teams and sprints, track health, and read workspace project updates |
| Docs | Rich editor, collections, comments, public share links, self-contained HTML pages |
| Standup | The whole workspace as a Kanban, filtered to work a person owns or reviews by clicking their tile |
| Analytics | Scope, throughput, churn, and distribution by assignee, project, label and estimate |
| Search and views | Filters over everything, saved and shared or kept private |
| Realtime | Every change fans out over a websocket to exactly the people allowed to see it |
| Keyboard first | Cmd K for everything, g to navigate, single keys to act. Press ? |
| MCP server | AI agents read the board and file work, with your permissions, over OAuth |
| Notifications | In-app inbox, with per-event preferences and quiet hours |
| Slack (gated) | Personal notification DMs, mapped-channel issue unfurls, and member sync after an operator completes the Slack rollout |
| GitHub | Pull requests linked to the issues they close |
| Auth | Passkeys, Google, GitHub, email OTP. Password optional and off by default |
| Roles | Admin, member, contributor and guest, enforced on the server |
| Themes | Light and dark, both first class |
Quick start
You need Bun 1.3 or newer and Docker. That is the whole list.
git clone https://github.com/Noveum/orbit.git
cd orbit
bun install
cp .env.example .env
bun run infra:up # postgres, redis and minio
bun run db:push # create the schema
bun run db:test-setup # create the test databases
bun run db:seed # load a demo workspace
bun run dev # http://localhost:3000
Sign in as [email protected]. The seed loads three teams, seven people,thirty two issues, projects, sprints and docs, so there is something to click onstraight away.
Then press Cmd K, and open a second tab and changesomething in one to watch the other update.
| Service | Port |
|---|---|
| web | 3000 |
| realtime (development only) | 3100 |
| postgres | 5434 |
| redis | 6380 |
| minio | 9010 |
Full walkthrough in docs/getting-started.md.
Reference deployment (Preview)
The setup below describes the Noveum AI deployment profile. It is not aprovider-neutral production support commitment.
Orbit is one Next.js app. It needs Postgres, Redis and an S3-compatible bucket,all of which have free tiers, so a small team can run it for nothing.
The button prompts for Resend so a fresh deployment can send sign-in codes. Youcan instead configure password, Google or GitHub sign-in. Production refuses tobuild or start without one complete method; see Authentication.
Two things that are not optional and produce confusing failures if you get themwrong:
- Root directory is
apps/web, and functions run on node. Do not setbunVersioninapps/web/vercel.json. It moves every function to the Bunruntime, where the websocket upgrade at/api/wssilently never happens andthe browser retries forever against a socket that never opens. - Never set
NEXT_PUBLIC_REALTIME_URLin production. The socket is servedfrom the page's own origin, and Orbit ignores this variable in production.Leaving it set only makes the deployment configuration misleading.
Supabase for Postgres, Upstash for Redis, Cloudflare R2 for files and Resend foremail is the combination we run. Other providers have not yet been certified bythis project.
Full guide, including running it on your own server behind nginx:docs/self-hosting.md.
For AI agents
Orbit ships an MCP server, so Claude, Cursor, VS Code or anything else thatspeaks MCP can read your board and do work in it.
claude mcp add --transport http orbit https://orbit.example.com/mcp
OAuth only, no API keys. You pick the workspace, re-verify a passkey and approvethe scopes, and the grant is revocable from settings. An agent never has morepermission than the person who authorised it, because the tools run throughthe same policy as everything else. A token with only orbit.read is not shownthe write tools at all.
Sixty odd tools covering issues, sprints, projects and docs. Things that worktoday:
"What is blocking the Realtime Sync Engine project?"
"File a bug on Engineering: passkey sign-in fails on Safari when no credentialis registered. High priority, assign it to me."
"Summarise what each person closed yesterday."
docs/mcp.md has the setup and the full tool list.
Documentation
| Getting started | Run it locally in five minutes |
| Concepts | Workspaces, teams, issues, sprints, projects, docs, views |
| Self-hosting | Vercel, Supabase, Upstash, R2, or your own server |
| Configuration | Every environment variable |
| Keyboard shortcuts | All of them |
| MCP server | Connect an AI assistant |
| Integrations | GitHub and gated Slack setup |
| Changelog | Features, fixes and upgrade notes for every source release |
| Releases and upgrades | Versioning, publishing, deployment checks and rollback |
| Architecture | How a change reaches every screen |
| Testing | Running and writing tests |
| Troubleshooting | The failures we actually hit |
| Roadmap | What is next, and what we will not do |
How it is built
apps/web Next.js 16: UI, REST handlers, auth, /api/ws, /mcp
apps/realtime Websocket host, local development only, never deployed
packages/realtime-server Connection hub: tickets, scopes, presence, Redis fan-out
packages/realtime-client Browser client: subscribe, patch, reconnect
packages/mcp-server MCP tools and the handler behind /mcp
packages/core Domain operations shared by REST, MCP and the hub
packages/services Markdown, storage, email, notifications, Slack, GitHub
packages/db Drizzle schema, migrations, client, seed
packages/shared Zod validators, domain types, event contracts, policy
TypeScript throughout, in strict mode with any as a lint error. Next.js 16 andReact 19. Postgres through Drizzle. Redis for realtime fan-out. Bun as thetoolchain, node as the runtime, because a Vercel function can only upgrade awebsocket on node.
A change writes to Postgres, bumps a monotonic sync_id, publishes to Redis,and the hub fans it out to the connections whose scope entitles them to see it.The client patches its cache rather than refetching, so your scroll position andselection survive. docs/architecture.md has the detail.
Contributing
Contributions are wanted, and not only code. Docs, bug reports, translations,accessibility and design all count.
bun run verify # lint, comment policy, types, tests. The same four CI runs
Good places to start:
- Good first issues, scoped small with the file paths written into the description
- Help wanted, everything we would like a hand with
- The roadmap, for the bigger pieces
A few house rules that will otherwise surprise you in review: Bun only, nonpm or pnpm. No comments in code, the build fails on them, so put themeaning in names and the prose in the pull request. No any, no non-nullassertions. No em-dashes. And a feature is not done until it has a test thatwould fail if the feature broke.
Full guide in CONTRIBUTING.md. The repository carries its owncontext files, CLAUDE.md and AGENTS.md, so youreditor picks up the conventions without you explaining them each time.
Contributors
Your face goes here. Genuinely, even for a typo fix.
Community
- Discussions for questions and ideas
- Issues for bugs and concrete work
- Security for anything that should not be public
If Orbit is useful to you, a star helps other people find it.
Sponsor
Noveum AI builds evaluation and observability tooling for AIsystems, and pays for Orbit's hosting and engineering time. Orbit is not afunnel for it. There is no upsell, no "contact sales" and no gated feature. Weneeded a task manager, we could not find a free one that was good, so we built oneand gave it away.
License
Apache License 2.0. Use it, run it, change it, ship it, commerciallyor otherwise. The patent grant protects you, and the NOTICE asks onlythat a public fork picks its own name so nobody confuses your build with thisone.