Local-first todo · Android + desktop

Importance first.
Due date breaks ties.

Every list in Primico puts what matters on top, then sorts by when. Ten small things due today never bury the one big thing. Your tasks live in a SQLite file on your device; sync is optional and runs on a database you host.

Free software, GPL-3.0-or-later. Android 8.0+, Linux, macOS, Windows.

Quick addone line, parsed as you type

Example: typing “Pay rent every 1st !p2 #Home @bills” turns each token into a chip — a monthly rule, priority P2, the Home project, the bills tag — and the task lands in the Today list above the P3 tasks and below the P1 one.

The rule

One sort order, on every list

Most apps sort by date, so a tax return and a grocery run look the same on the day they are due. Primico sorts by how much a task matters, and only then by when. Overdue work sits in its own block on top of Today with one action: reschedule it all.

Overdue
Renew passport
3 days overdueAdmin
P2
Today
Send the quarterly invoice
todayWork
P1
Book dentist
today · 17:00Health
P2
Water the plants
todayHome
P3
Buy oat milk
today@errand
P3
Sort photos from the trip
todayPersonal
P4

Four levels, always spelled out. The ring is tinted, but P1…P4 is written next to it and read aloud as “P2 · High”. Colour never carries meaning alone.

Triage walks the backlog one card at a time, so setting importance is a single pass rather than a chore per task.

Recurrence understands both kinds of rule. “Every 2 weeks on Thursday” is a calendar; “3 days after done” counts from completion. A task ticked off late catches up to the next occurrence that is not already behind you, so a daily task done a month late is due today, not thirty times.

Completing keeps the finished row in place for the rest of the day and inserts the next one. Reopening takes both back.

What is in it

A whole system, on your device

Today, Upcoming, Inbox

Overdue pinned on top of Today. A week strip plus an agenda for Upcoming. Anything captured without a project waits in the Inbox.

Projects and tags

A task lives in one project and wears any number of tags. Projects nest one level; tags gather work from everywhere. @errand in quick add creates one that does not exist yet.

Subtasks and notes

A checklist under any task, one level deep. A parent finished finishes its steps; a recurring parent hands its checklist to the next occurrence, unticked.

Attachments

Files and links on a task, stored content-addressed so the same invoice twice costs one copy. A missing file is a state the app shows, not an error.

Reminders

Exact alarms on Android that survive Doze, several lead times per task. A tray notification on the desktop.

Home-screen widgets

The Today list and a next-task card, on Android. Ticking a row from the widget writes the same way the app does.

Backup and import

A versioned JSON file you can read. Importing merges instead of replacing. A converter turns a Todoist export into one.

English and German

The whole interface and the quick-add grammar. morgen 18 Uhr and alle drei Tage parse like their English twins. Android 13+ lets you pick a language just for Primico.

Accessible by design

Touch targets of 44dp and up, 200% font scaling that still fits, two row densities, light and dark themes.

Desktop

A real desktop app, not a phone app in a window

The same code runs on Ubuntu, macOS and Windows, but the desktop is pointer- and keyboard-first: drag a task onto a project or a tag, right-click any row, keep two panes open on a wide window, reach anything from the command palette.

Ctrl/⌘ K command palette Ctrl/⌘ N quick add Alt ← → back and forward Shift ? every shortcut
Your data

Local first. Sync is yours to run.

On the device

One SQLite database per device, and it is the source of truth. No account is needed to use any of it, and nothing leaves the device until you sign in. No analytics, no telemetry, no crash reporting. Delete everything from the settings, with an undo.

Between your devices

Sign in and your devices merge through a Postgres database you host on Neon — a free project is enough. Each device pushes what it wrote and pulls what the others wrote; deletes travel as tombstones; row-level security keeps every account to its own rows. There is no Primico server, and the published builds accept no sign-ups: you point a build at your project by following the self-hosting guide.

Get Primico

Download

Every release ships the Android APKs and the Linux packages. macOS and Windows installers are built on request.

Android

Open the link on the phone and install. Android asks you to allow installs from this source, which is expected outside a store. Tap it again later to update in place.

primico-release.apk

Linux

  • .deb for Debian and Ubuntu
  • .rpm and a tarball on request
Latest release

macOS and Windows

  • .dmg and .msi when a release includes them
  • Or build from source with a JDK 17 in a few minutes
Build it yourself

Updating from a build before 3.0? The release APK is signed with a new key, so Android refuses to install it over the old one. Export a backup in Settings, uninstall once, install, import. Every build since shares one key.