Who it is for
Seven ways to run it, one product
From one person on a box at home to a provider with thousands of workspaces, every shape runs the same product. There is no edition and no feature held back. Each section says what works today; what is decided and still being built is marked Planned.
01 · A private person
Your life, on hardware you own
“Will this still be mine in five years, and can I get my data out?”
A hub for work, one for the household, one for the flat you are renovating. Under each, the lists you actually keep. Recurring bills, a shopping list, the maintenance schedule for a bike — and the whole thing on a machine in your own home, with the full feature set and nothing withheld.
Free, and free with the condition stated out loud. Hubtask is open source under Apache-2.0, with no feature gate and no licence key — and the project makes no promise about maintenance. If it stops tomorrow, every version you are running is still yours to run, change and carry on. That is written into the licence rather than promised in a blog post.
Read the licence termsWhat matters here
- Nothing phones home No telemetry, no licence check, no font loaded from a foreign domain.
- Backups you configure Your own target, your own schedule, encrypted, with a restore that has been drilled.
- Export whenever CSV, JSON and ICS from any view; a full workspace export as a use case.
- One container and a database The homelab standard, not a stack of five services.
- A forgotten password is survivable Recovery codes you can copy and replace, without a mail server.
- Set up in the browser Planned The first start prints a one-time code, and the browser creates your workspace and account — no terminal, no database shell.
- Passkeys Planned Signing in without a password, as its own milestone.
02 · A family
Shared where it helps, private where it should be
“Can we share the groceries and the holidays without everybody reading everything?”
One installation for the household: a hub for the groceries, one for the holidays, one each for the things that are nobody else’s business. A person can be a member of one hub and see nothing else, which is how a child gets their own corner. Reminders, recurring chores and templates for the weekly routine work the same for everybody.
The technical parent sets the rules once. Who may sign in how, who needs a second factor, what is kept and for how long — set in the administration, and the others never see a settings screen.
What matters here
- A hub per person or topic Membership on one hub reaches that hub and nothing above it.
- Private hubs Planned A hub another adult cannot open just because they are an administrator too, with an emergency access that tells every member at once.
- Accounts without a mail address Planned A child or a grandparent signs in with a name and a start password Hubtask makes, and changes it at the first sign-in.
- Invitations without mail Planned Handed over as a link or a code when the household runs no mail server.
03 · A club or a small team
Everybody knows what is theirs
“Can we hand out the jobs, remind people, and keep strangers out?”
Invitations, roles and groups
Invite people with a role on the whole workspace or on one hub, group them, and let a collection hand out new work automatically — a fixed person, round robin, least loaded, or somebody from a named group, with a named refusal when nobody can take it.
Reminders that arrive
A mail when work lands on somebody, reminders before something is due, and each person chooses which mails they get.
A second factor for those who can change things
Require one of owners and administrators, or of everybody. Recovery codes can be copied and replaced, and a reset never walks past a second factor.
Google or Microsoft, for those who prefer it
Members may sign in with the account they already have — and a stranger with a Google account gets nothing, because the provider admits only the people this club invited.
ADR-0071 · who a provider admits04 · A company running it itself
When somebody will ask you to prove it
“Can our directory sign people in, can I answer an access request, and can I show that the trail was not edited?”
Your directory, your rules
Sign-in through Entra ID, Google Workspace, Keycloak or any OpenID Connect provider, admitted by directory rather than by the text of an address. Password and session rules to the company’s policy — length, character classes, history, expiry, idle timeout — set once, with a lock where the installation decides. Connecting an existing account to the directory asks for that account’s own proof first.
Planned People arriving through the directory land with a role you chose, not in an empty workspace.
ADR-0068 · the sign-in ruleThe trail, and its verification
Auditable actions form a hash chain that stores no content. One call walks it and names the first broken link. The application’s own database role holds no update and no delete on that table, so an application defect cannot quietly rewrite history. An auditor role reads the trail and the configuration and never the content.
audit.mdData subject rights
Access, export, rectification, restriction and erasure are use cases with the statutory deadline tracked by the system. Every personal field is in a catalogue that names where it lives and what deletes it — including the copies in backups and in the trail.
Planned A deadline extended once, with the reason; and an erasure that keeps exactly what a legal hold covers, and says so.
data-protection.mdRetention, legal hold, backups
Rules that announce what they would delete, keep a grace period and can be stopped — and a legal hold that overrides both them and somebody emptying their own trash. Backups go to the company’s own target, encrypted, and restore the whole workspace or one hub.
data-retention.mdAI on your terms
Off until the workspace consents, with the processor and where it sits always named. Your own model or a local one, never a default.
Planned Each person may keep their own content out — or the company makes AI part of everybody’s work and names the legal basis, which everybody then sees.
P-14 · nobody consents in another's placeAccessibility
Built to WCAG 2.2 AA — the standard the European Accessibility Act expects — with contrast measured on every test run rather than reviewed. The formal statement is published with the first stable release.
How it is built05 · A provider for consumers
Thousands of customers, one set of rules
“Can my shop create a workspace when somebody buys, and can my legal texts apply to all of them?”
Every customer gets a workspace of their own, behind the same database boundary as every other. Your purchase or sign-up platform creates it through the API, suspends it when a payment fails and resumes it when it arrives — with an idempotency key, so a webhook that arrives twice creates nothing twice. Hubtask holds the state; your platform holds the contract, the price and the invoice.
Your imprint and privacy notice, on every sign-in page, locked. The installation sets a value and decides whether a workspace may change it. You see numbers and states for every workspace, never a customer’s content.
What matters here
- A credential for the platform A service account provisions workspaces, not a token belonging to an employee. On the operator screen Planned; through the API today.
- Google and Microsoft sign-in Offered to every workspace by the installation, admitting only people who were invited.
- Limits per workspace Visible before they hurt; a workspace at its limit is refused the next thing, never loses the last.
- Terms agreed and re-agreed Planned With the version and the moment on the account.
- AI included Planned A model the provider offers, one click for the customer, counted against a budget.
- Plans Planned Limits, features and locks per plan; a downgrade stops, never deletes. Its own milestone.
- Sign in with Apple Planned Needs a signed client secret and its own decision.
06 · A provider for companies
Several clients, one instance, a real boundary
“Can one installation hold five clients without any chance of them seeing each other — and let each of them run their own rules?”
In multi-workspace mode each client is a workspace: its own hubs, its own members, its own labels, its own retention rules — and its own backup and its own export, rather than one undifferentiated dump you would have to cut up by hand if a client left.
The boundary is in the database. Row level security enforces it, every
query runs inside a transaction that has declared which tenant it is acting for, and a
cross-tenant test exists for every repository method — a gate in the build fails when one
is missing. It is not a WHERE clause somebody has to remember on a Friday.
What matters here
- Each client configures itself Its own directory, legal texts and sign-in rules — within the defaults and locks you set for every workspace.
- Providers you offer Sign-in providers configured once by the installation and switched on by each client, without seeing a secret.
- Provisioning and suspension Creating, suspending and deleting a workspace are operations, not database surgery.
- Quotas and fairness One noisy workspace does not become everybody’s latency.
- An export a client can take Leaving is a supported operation, which is what makes staying a choice.
- AI you offer, or theirs Planned Offer your own model, let a client bring theirs, or require a minimum jurisdiction.
- The client’s own domain Planned Two DNS records to copy, the rest automatic — after passkeys and plans.
Running it commercially is free — Hubtask is Apache-2.0, for organisations of every size, with nothing to buy later. The licence
07 · A managed service provider
Every installation from a file, none by hand
“Can I bring up the fortieth installation exactly like the first, without a person at a browser?”
An installation’s defaults and locks — sign-in rules, legal texts, limits, language defaults — can live in one file: written once on the first start, or enforced on every start with the screens refusing to change it. Container images and a Helm chart, migrations that run as their own job and are safe during a rolling update, and a health report and metrics on a port of their own.
deployment.mdWhat matters here
- The installation as code One file, seeded or enforced, and the health report says which applies.
- An operator register The people and machines who may run the installation, separate from every workspace’s administrators, with an hour of elevated access after a fresh proof.
- Key rotation with a census Rotate the installation’s keys and see which secrets moved.
- Operators from the file Planned Who runs the installation, named in the file and the environment, and a command in the server binary to get back into an installation nobody can run.
And across all seven · The builder
A contract, not a screen with an export button
“Is the API real, or is it whatever the interface happened to need?”
The specification is written first and the code is generated from it; the interface is one client among several. Everything a person can do, a token can do — with idempotency keys so a retry does not duplicate, optimistic concurrency so a blind write does not clobber, and errors that carry a code and parameters rather than a sentence to parse. Client libraries for Go, TypeScript and Python are generated from the same document, and the n8n and Zapier connectors are built and tested, to be published with the convergence milestone.
An agent gets the same catalogue over MCP, running inside your installation. It holds a scoped credential, it is refused exactly what that credential would be refused over HTTP, and every action it takes is in the trail marked as an agent’s.
The developer page# The whole product, from a terminal
hubctl item create --collection "$C" \
--type TASK --title "Renew the domain"
hubctl due set "$ID" --at 2027-01-31
hubctl recur set "$ID" --rule "FREQ=YEARLY"
# Follow the change stream
hubctl watch
# Or pipe it
hubctl search domain --json | jq '.items[].title'