Skip to content

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 matrix

The 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.md

02

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 §1

03

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.md

Every 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.md

A 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.md

Deletion 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.md

GDPR 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.md

Operations

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.

deployment.md
# 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/capabilities

Who 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 looks

A 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 looks

A 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 looks

Somebody 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 contract

Where 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.

Get Hubtask Source on GitHub