Self-hosted · API first · Agent ready
Built like infrastructure.
Shaped like a to‑do list.
Hubtask holds “buy milk” and a client’s release plan in the same five levels. It is yours to run on your own machine, its API is the product rather than an export of a screen, and the things it promises about your data — restorable backups, a verifiable trail, deletion that announces itself — are checked in a pipeline instead of asserted in a brochure.
Hub Collection Task Work package Activity
Run it yourself See what it does
Open source under the Apache License 2.0 — free for any use, private, non-profit and commercial alike, with every feature and no licence key. What that means
- 5
- levels, from an area of life down to a single tick
- 200+
- use cases, each reachable from all three doors
- 1
- dependency to operate: PostgreSQL
- 0
- bytes sent anywhere you did not choose
Where this stands. The server is in active development and complete through
milestone 0.7 — the model, the API, automation, multi-workspace operation,
backup, audit and the agent surface are built and tested. The browser interface is at preview
stage, and the installed applications for desktop and mobile are being built. The plan, milestone by milestone
The model
Five levels, one shape
Most task tools give you two levels and ask you to fake the rest with tags. Hubtask gives you five, and lets each one carry only what makes sense at that depth.
Hub
An area of life or a client. Work, the household, a customer you invoice — the boundary you would draw if somebody asked what you are responsible for.
Collection
A project or a list inside a hub, with its own buckets, labels and saved views. This is the level a board is drawn at.
Task
The unit of work, and the level that carries everything: due date and reminder, assignee and members, labels, comments, attachments, a cover, custom fields, and a recurrence rule that applies to the whole subtree.
Work package
A step of a task. Notes, labels, comments and attachments, its own due date and its own assignee — a task’s spine, not a second task pretending.
Activity
The smallest tick. One assignee, a due date, a reminder, a compact history — and deliberately nothing else, so a checklist stays a checklist.
Why this is not just a deeper tree. Which fields a level carries is a capability profile rather than five hard-coded entities. Setting a field a level does not carry is refused with a named error, never ignored in silence — and a sixth level would be a profile entry, not a database migration.
domain-model.md §2 · the capability matrixThe contract
Three doors, one catalogue
A capability exists once, in one registry, and every door opens onto the same room. There is no “API version” of a feature that lags behind the interface — a check in the build fails when the three ever disagree.
01
REST
A documented HTTP API with a composable query language, idempotency keys, optimistic concurrency and machine-readable errors. Written as a specification first and implemented from it, never generated out of a UI.
api-guidelines.md02
MCP
A Model Context Protocol server inside your own installation. An agent gets tools, resources and prompts, a scoped credential, and exactly the permissions the credential holds — no more than a person with the same role.
ai-first.md §103
Automation
A rule engine with triggers, conditions and a dry run, plus signed webhooks with retries and a dead-letter path. Every use case is available as an action because it is the same registration.
automation.mdEvery incumbent now ships an MCP server, and most of them are a hosted endpoint in somebody else’s cloud — your tasks travel there to be read. Hubtask’s is an adapter inside the instance you run. The agent talks to your box, and every one of its actions lands in the trail marked as an agent’s.
The difference
Provably yours
Every tool in this category says your data is safe. These are the four sentences that can be checked — each one a mechanism with a test behind it, not a value on an About page.
Backups that have been restored
Encrypted archives on a target you choose — local, S3-compatible, SFTP or WebDAV — with RRULE schedules and generational retention. The restore drill runs in the pipeline on every change, because a backup nobody has restored is a hypothesis.
backup-restore.mdA trail that verifies
Every auditable action lands in a hash chain that stores no content of yours. One call checks the chain and names the first broken link, so tampering is found rather than suspected — and the application’s database role may not update or delete a row of it.
audit.mdDeletion with brakes
A retention rule says what it would delete before it deletes anything, keeps a grace period, can be stopped, and is overruled by a legal hold. Nothing disappears quietly, and writing such a rule needs the owner’s authority.
data-retention.mdGDPR as use cases
Access, export and erasure are operations with a statutory deadline the system watches, served by the product rather than by a support ticket. Every personal field is in a catalogue with the path that deletes it.
data-catalog.mdOperations
One image, one database, nobody to ask
PostgreSQL is the only thing Hubtask requires. It is also the queue, the event outbox, the full-text index and the tenant boundary — one dependency to back up, patch and understand instead of five.
Compose for one box, Helm for a fleet, the same multi-architecture image for both. The
tenant boundary is enforced by the database through row level security rather than by a WHERE clause somebody has to remember, and the health endpoint reports what is
degraded instead of the process falling over.
# One box, everything on it
docker compose up -d
# A fleet, the same image
helm upgrade --install hubtask ./k8s
# Ask an installation what it can do
curl /api/v1/meta/capabilitiesWho runs it
Seven ways it is run, one product
You and your household
Free, complete, with no feature held back and nothing phoning home — for one person or a family sharing some hubs and keeping others to themselves. It is Apache-2.0, so an abandoned project is still yours.
How that looksA provider, for companies or consumers
One instance, one workspace per client or customer, a boundary the database enforces — provisioned by your platform, with your legal texts and your locks, and a backup and an export per workspace rather than one undifferentiated dump.
How that looksA club, a team, a company
Roles, groups and reminders for a club; your own directory and password rules for a company — and an audit trail that verifies, retention with a legal hold and data subject requests with a deadline.
How that looksSomebody automating their work
A real API, a rule engine, signed webhooks, a CLI that speaks the published contract, and an MCP server that runs where your data already is.
Read the contractWhere to start
Take it and run it
Nothing to sign up for, nobody to talk to, no trial that expires. Pull the image, point it at a PostgreSQL, and read the architecture while it starts.