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.
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.
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.
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.
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.
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.
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.
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.apkmacOS and Windows
.dmgand.msiwhen a release includes them- Or build from source with a JDK 17 in a few minutes
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.