2026-08-17 08:08:36 +02:00
|
|
|
# verdande
|
|
|
|
|
|
|
|
|
|
Self-hosted tasks and projects, shared with the people you share the work with.
|
|
|
|
|
One binary with SQLite inside it — no database to provision, no second process.
|
|
|
|
|
|
|
|
|
|
**Verdande** is one of the three Norns: the one who spins *that which is becoming*.
|
|
|
|
|
Not what has been, and not what is fated to be — the thing you are in the middle
|
|
|
|
|
of. Which is what a to-do list is.
|
|
|
|
|
|
2026-08-17 08:37:10 +02:00
|
|
|

|
|
|
|
|
|
2026-08-17 08:08:36 +02:00
|
|
|
## What it is for
|
|
|
|
|
|
2026-08-27 13:59:54 +02:00
|
|
|
A fast, self-hosted task manager — projects, quick add, filters, notes and shared
|
|
|
|
|
lists — on your own hardware, with your own data. And with the integrations a
|
2026-08-17 08:08:36 +02:00
|
|
|
hosted product will not build for you: a real CalDAV server, an address you can
|
|
|
|
|
forward mail to, and an MCP endpoint so Claude can work your task list directly.
|
|
|
|
|
|
|
|
|
|
## What it does
|
|
|
|
|
|
2026-09-04 09:46:50 +02:00
|
|
|
- **[Quick add](quick-add.md) that reads what you type.** `file the VAT return
|
|
|
|
|
tomorrow at 10am p1 #Accounts @tax` becomes a task due tomorrow at 10:00,
|
|
|
|
|
priority 1, in Accounts, labelled tax. Danish and English, mixed freely in one
|
|
|
|
|
line.
|
2026-08-17 08:08:36 +02:00
|
|
|
- **Projects, sections, sub-tasks, labels, [saved filters](filters.md).** List,
|
2026-08-17 19:25:10 +02:00
|
|
|
board and calendar views, and foldable groups over the projects in the sidebar.
|
2026-08-27 13:00:05 +02:00
|
|
|
The calendar draws each task to its length — drag the foot to resize, the body
|
|
|
|
|
to move it.
|
2026-09-12 09:56:00 +02:00
|
|
|
- **Find it by searching for it.** ⌘K searches tasks, notes and projects — and the
|
|
|
|
|
settings themselves, by what they *do* rather than only by what they are called,
|
|
|
|
|
so `webhook` finds *Push from other programs* and `2fa` finds *Two-factor*. The
|
|
|
|
|
settings pages carry the same field at the top of their own list.
|
2026-08-27 13:00:05 +02:00
|
|
|
- **Notes, beside the work.** Rich text to write in, Markdown on disk. Share a
|
2026-09-09 08:52:54 +02:00
|
|
|
single note with a person — by name, by email address, or by writing `@Sofie` in
|
|
|
|
|
the text — or file it in a project; `#project` and `[[another note]]` are links,
|
|
|
|
|
and a task shows what has been written about it.
|
2026-08-27 13:00:05 +02:00
|
|
|
- **Delegate, and snooze.** Hand a task to somebody and it is marked with an
|
|
|
|
|
arrow to them, gathered on a *Waiting on others* page. Snooze one to park it,
|
|
|
|
|
greyed, at the foot of the list until a moment you pick — without touching when
|
|
|
|
|
it is due.
|
2026-08-17 19:25:10 +02:00
|
|
|
- **Drag where it means something** — reorder a list or a board, file a project
|
|
|
|
|
under a group, drop a task on another project, or drop it on another day.
|
2026-09-13 17:52:03 +02:00
|
|
|
- **Sharing** with owner, editor and viewer roles. Somebody who already has an
|
|
|
|
|
account here you pick by name — the accounts on an instance are a closed,
|
|
|
|
|
invited set, so they are an address book rather than a directory to protect.
|
|
|
|
|
Anyone outside your instance joins through an invite link, and the invitation
|
|
|
|
|
stays visible until they arrive, so it does not get sent twice.
|
2026-08-17 08:08:36 +02:00
|
|
|
- **Live sync** — a change made by somebody else appears without a refresh.
|
2026-09-09 08:52:54 +02:00
|
|
|
- **[Told when it matters](notifications.md).** A bell for what other people did to
|
|
|
|
|
what you share, pushed to your devices and counted on the app's icon in the Dock.
|
|
|
|
|
- **[AI that suggests and never writes](ai.md).** Optional, your own key. It tidies
|
|
|
|
|
the inbox, pulls the tasks out of a meeting note, writes a morning plan, turns
|
|
|
|
|
*"SV: SV: Vedr. levering uge 12"* into what the mail actually asks for, and
|
|
|
|
|
answers questions about your own notes with links to what the answer rests on —
|
|
|
|
|
every one of them as a line you accept, edit or refuse.
|
2026-08-27 13:00:05 +02:00
|
|
|
- **Repeating tasks** as RRULE, comments and attachments, and reminders that go
|
|
|
|
|
out as Web Push to an iPhone or a Mac.
|
2026-09-09 08:52:54 +02:00
|
|
|
- **[Anything can put a task in your inbox](mail.md)** — a mail to your own
|
|
|
|
|
address, or a POST from a shortcut on your phone, a script, or any service that
|
|
|
|
|
can call a URL.
|
2026-09-04 09:20:11 +02:00
|
|
|
- **[Your mail as an inbox](mailboxes.md).** Star a mail in Gmail, or flag one
|
|
|
|
|
over IMAP in iCloud or Fastmail, and it becomes a task — and the star or flag
|
|
|
|
|
comes off once it has, so a starred inbox empties as the tasks are made instead
|
|
|
|
|
of only filling up.
|
|
|
|
|
- **[Calendar](caldav.md) and [Claude](mcp.md)** connected over open standards
|
|
|
|
|
rather than private formats.
|
|
|
|
|
- **Six themes**, three dark and three light — including *Charcoal*, a warm
|
|
|
|
|
near-black after Apple Notes — and a size and typeface chosen apart from them.
|
|
|
|
|
- **Holds through a short network drop.** A save rides out a few seconds of no
|
|
|
|
|
signal and goes through when it comes back; a reload opens from what it last saw
|
|
|
|
|
rather than the browser's offline page. It installs as a PWA.
|
2026-08-17 08:08:36 +02:00
|
|
|
|
2026-08-20 07:25:43 +02:00
|
|
|
## What it looks like
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
*Upcoming, as a month. A week and a plain list are the other two, and a task can be
|
|
|
|
|
dragged from one day onto another.*
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
*The same project as a list, where sections read as bands. As a board they are
|
|
|
|
|
columns.*
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
2026-08-27 13:00:05 +02:00
|
|
|
*What you have handed to somebody else, grouped by whoever has it — and each row
|
|
|
|
|
marked with an arrow to them, so a delegated task reads as delegated wherever you
|
|
|
|
|
meet it.*
|
2026-08-20 07:25:43 +02:00
|
|
|
|
2026-09-04 09:20:11 +02:00
|
|
|

|
|
|
|
|
|
|
|
|
|
*Charcoal, the newest of six themes — a warm near-black after Apple Notes, with
|
2026-09-04 09:46:50 +02:00
|
|
|
amber where the accent green usually is.*
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
*Six themes — three dark, three light — chosen on the settings page, with the
|
|
|
|
|
typeface and how tightly it sits set apart from them.*
|
2026-09-04 09:20:11 +02:00
|
|
|
|
2026-08-20 07:25:43 +02:00
|
|
|

|
|
|
|
|
|
|
|
|
|
*Where [Gmail](mailboxes.md), the [calendar feed](caldav.md) and the
|
|
|
|
|
[mail-to-task address](mail.md) are connected.*
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
*Inviting somebody to the instance. There is no open registration — everybody
|
|
|
|
|
arrives through a link, and picks their own password. See
|
|
|
|
|
[signing in](signing-in.md).*
|
|
|
|
|
|
2026-08-17 08:08:36 +02:00
|
|
|
## Getting it running
|
|
|
|
|
|
2026-08-17 08:37:10 +02:00
|
|
|
verdande is built to be deployed as a **Rune** in
|
|
|
|
|
[Yggdrasil Panel](rune.md) — that is its home, and the manifest ships with it. It
|
|
|
|
|
runs anywhere Docker does as well.
|
|
|
|
|
|
2026-08-17 08:08:36 +02:00
|
|
|
```bash
|
|
|
|
|
docker run -d --name verdande \
|
|
|
|
|
-p 8080:8080 \
|
|
|
|
|
-v verdande-data:/data \
|
|
|
|
|
-e VERDANDE_BASE_URL=https://todo.example.dk \
|
2026-08-22 00:29:57 +02:00
|
|
|
ghcr.io/kristianwind/verdande:latest
|
2026-08-17 08:08:36 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Open the address, create the first account — that account is the administrator.
|
|
|
|
|
|
|
|
|
|
Running Yggdrasil Panel? [Install it as a Rune](rune.md) instead.
|
|
|
|
|
|
|
|
|
|
## What it will not do
|
|
|
|
|
|
|
|
|
|
No karma or points. No team workspaces. No native apps. No mail integration beyond
|
|
|
|
|
Gmail and the forwarding address. No languages beyond Danish and English. And no
|
|
|
|
|
sync protocol of its own — [CalDAV](caldav.md) and the [API](api.md) *are* the
|
|
|
|
|
sync.
|