Kolibri is open source projects, tasks and pages — offline-first, self-hosted, and native to the Model Context Protocol. This is a real instance with a workspace already in it. Sign in and break something.
Grace, Alan and Margaret are seeded in the same workspace with the same password, if you want to see a mention or a hand-over from both ends.
3projects, each with its own workflow and labels
2teams, and four people to hand work between
1running cycle, with a burn-up already drawn
20+tasks spread across backlog, review and done
∞things you cannot break permanently
What you are looking at
The demo is an ordinary Kolibri, started with the seed data that ships in the repository — two teams, three projects with their own workflows, a running cycle, a backlog with a realistic spread, wiki pages, comments and logged time. Nothing about it is a mock-up: every screen is the real app reading a real database, and every button does what it does on your own instance.
It is public and it resets. Anybody can sign in with the account above, and the whole database is wiped back to its starting state every night. Do not put anything in it you would mind a stranger reading, and do not expect what you wrote yesterday to still be there. Uploads are capped and email is switched off, so nothing here can send you a message.
What is in it
Each of these is two clicks away in the demo. Where a claim below sounds like marketing, it is meant as an instruction: go and check it.
It never waits for the network
Every screen reads from a copy of the workspace in your browser. Turn the wifi off on the demo and keep working — filtering, dragging, typing. Changes queue and merge field by field when you come back, so two people editing one task both keep their edit.
Four layouts over one set of tasks
List, Kanban, table and calendar, sharing your filters and your grouping. Group a board by assignee and the columns are people; group it by a custom field and dropping a card writes the answer.
A whole task on one line
Type Redraw the empty state !high @ada #WEB *design due:friday. A token nothing answers to stays in the title rather than vanishing, and an ambiguous @alex matches neither of them.
A timeline that moves what it blocks
Drag a task later and everything it blocks moves with it — counted in the days the project actually works, with an optional wait on each dependency. Save a baseline to draw the agreed plan behind the real one.
Cycles, modules and four charts
Sprints with a burn-up that shows scope climbing rather than hiding it, milestones that outlive a cycle, and per-project insights computed on your device — so they work on a train too.
A wiki two people can type in at once
A page body is a text CRDT, so both sets of changes survive — including when both people were offline. Version history, a what-changed diff, restore, inline comments that stay anchored as the text moves.
Chat made of the same rows
Channels and direct messages built from ordinary synced rows, so a message sends from a train and arrives when the tunnel ends. No second protocol, and nothing extra to be down.
Notifications you can actually turn down
One inbox as the source of truth, with email, a phone banner and Telegram as optional deliveries of the same events. Nothing is ever delivery-only, so turning a channel off never means missing something.
An assistant is a first-class user
MCP over HTTP and stdio: an AI can read the backlog, file issues, move them through the workflow and write pages. A read-only token is refused by every tool that writes, so a view of the backlog is not a pen.
A timer that survives a tunnel
A running timer is a row with a start and no minutes yet — so it survives a reload, keeps running on your phone, and is fixed by editing an entry rather than by losing the afternoon.
Hardening that was measured
Two-factor with recovery codes, a device list you can revoke from, SSO over OpenID Connect, per-column rules for who may move work where, and an audit log. The contrast, layout and screen-reader checks run in a real browser in CI.
English, German and French
Interface, notifications and emails, each written in the recipient’s own language. French is machine-written and says so under the language picker, because an unchecked translation is worth having and worth admitting to.
Four more screens
Full width, because a screenshot shrunk into a thumbnail is a texture rather than a picture of anything. Each of these is one click from the board above.
A task
State, priority, assignee, label, cycle and module on one row. Sub-tasks are whole tasks with their own identifiers, not checklist items — WEB-2 below has its own place on the board.
The timeline
One of the five layouts rather than a separate screen, so the filter you set on the board still applies. Drag a bar and everything it blocks moves with it, counted in the days the project actually works.
Chat
What is stored is the token a person typed — WEB-1, not a markdown link — and the renderer is told which project keys exist, so a conversation about UTF-8 does not fill up with dead links.
Pages
Markdown, nested to any depth, merged character by character so two people typing at once both keep their sentences. Select any passage to comment on that passage rather than on the page.
Run your own in one command
The demo is the same thing you get from this. It brings up the app and an S3-compatible object store, already wired to each other — the bucket is created on first boot and nothing has to be configured afterwards.
Terminal
git clone https://github.com/LucaFrankfurt/AIfirstPMO.git kolibri
cd kolibri
docker compose up -d --build
open http://localhost:4000
That is the whole installation. The server is one Node process and a SQLite file you can copy — no Postgres, no Redis, no worker queue — so it runs on the smallest machine a host sells and a backup is a file. There is a single-container variant that keeps uploads on the volume, and a Coolify compose file for a platform that owns the proxy.
Node 22.18 or newer runs it without Docker at all: the server executes TypeScript directly and SQLite is built into Node.
Set an owner in .env and the account exists the moment the stack is up — no browser step to claim the instance.
KOLIBRI_SEED_DEMO=true fills an empty database with the same workspace this demo runs on.
Email is off until you point KOLIBRI_SMTP_URL at a relay you control. A capture inbox is labelled as one everywhere it appears, so it can never be mistaken for real delivery.
What it is not
Being clear about this is cheaper for everybody than finding out in month two.
Not a timesheet system. Time is recorded and added up; there is no week view, no submit and no approval step.
No cost or billing. Entries carry a billable flag that nothing reads yet. Rates and budgets do not exist.
No forecasting. The burn-up stops at today rather than drawing a line into the future, because a line into the future looks like a promise.
Estimates are in points, and are deliberately never compared with logged time.
No email-in. You cannot file a task by writing to an address. A commit can reach a task; an email cannot.
No threads, calls or read receipts in chat. It is the conversation around the work, sharing the work's plumbing — not a second product.
The repository keeps a running list of what is missing, what is unverified and what was deferred on purpose, plus an honest gap analysis against Jira, Confluence, Plane, Vikunja and OpenProject: TODO.md and docs/comparison.md.
Go and press things
It resets every night. There is nothing in there to break that will not be back tomorrow.