Self-hosted service
Kabanya/Pomodoist avatar
Kabanya/Pomodoist

Pomodoist: A Self-Hosted Todoist Alternative with a Pomodoro Timer Built In

Open-source Todoist alternative. Self-hosted. A focused Pomodoro timer and task manager for mobile, desktop, and web.

478 stars42 forksDartAGPL-3.0

At a glance

What is it?
Pomodoist is an AGPL-3.0 Flutter app that combines task planning, a Pomodoro timer and productivity reports across mobile, desktop and web. The interesting part is the self-hosted server; the documentation for it is a set of links rather than a page.
Who is it for?
Adopt Pomodoist if you want a Pomodoro timer and task planner in one AGPL-3.0 codebase and you are willing to read the self-hosting docs before you commit to running `server/` yourself. Do not adopt it if you need a hosted service with a published SLA, or if you want a task manager without a timer attached.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Dart, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Pomodoist actually replaces

Pomodoist targets a specific overlap: people who plan tasks in a Todoist-style app and then run a separate Pomodoro timer next to it. The README frames the product in three verbs, plan your work, protect focus time, review your progress, and the screenshots back that up with an upcoming planner, a focus session view and a reports view. The task side covers inbox, today, upcoming, projects, timeline, kanban, priority matrix and search. The timer side runs Pomodoro sessions with configurable breaks and what the README calls deep-focus tracking. Reports then summarise weekly productivity and focus-time trends.

The intended audience is narrower than "anyone who wants a to-do list". If you only need a kanban board, the timer and the reports add surface area you will not use. If you only need a countdown, the task database is overhead. The project is for the person who wants both in one client, on macOS, iOS and iPadOS, Android, Linux, Windows and the web, and who cares that the backend can run on their own hardware. The repository layout confirms the scope: `lib/` holds the Flutter app, `server/` holds the backend, and `chrome-extension/` and `telegram-mini-app/` are additional clients with their own Make targets.

How the Flutter client and the server split the work

The repository is a Flutter monorepo with a server component. `pubspec.yaml` and `pubspec.lock` sit at the top level, `.fvmrc` pins the Flutter SDK version, and `drift_schemas/` indicates the client uses Drift for its local database layer. The server lives in `server/`, and the environment template shows it is wired to Supabase: `SELFHOSTED__SUPABASE_URL` defaults to `http://localhost:55421` and `SELFHOSTED__SUPABASE_ANON_KEY` is a separate key. So a self-hosted Pomodoist is at least two processes, the app server and a Supabase instance, not one binary.

The environment file also shows how the client is pointed at a backend. Each target has its own prefix, `LOCAL__`, `ANDROID__`, `SELFHOSTED__` and `STAGING__`, and the same keys repeat under each. A self-hosted deployment sets `SELFHOSTED__POMODOIST_ENVIRONMENT=selfhosted` and `SELFHOSTED__WEB_APP_URL=http://localhost:58080`, while a local Flutter run uses `LOCAL__POMODOIST_ENVIRONMENT=local` and port 7358. Billing differs by target too: `SELFHOSTED__POMODOIST_BILLING_CHANNEL=stripe` against `LOCAL__POMODOIST_BILLING_CHANNEL=storekit`. The file's own comment states that HTTPS is required except for loopback Docker endpoints, which tells you the self-hosted path is expected to sit behind TLS in real use.

Building Pomodoist from source with FVM

The README does not put build steps inline. It points to a documentation site, with a Flutter quickstart page covering FVM setup, environment generation and validation, and a system requirements page for the Flutter SDK and platform toolchains. The Makefile is the practical entry point, and it prefers a project-pinned SDK when one exists: `FLUTTER` falls back to `.fvm/flutter_sdk/bin/flutter` if that path is present, otherwise plain `flutter`. The same pattern applies to `dart`.

Environment values are generated rather than hand-edited. The tracked `.env.example` is a template, and its header says to fill the ignored `.env.setup` instead of putting secrets in the tracked file. The Makefile reads per-target config files, `LOCAL_CONFIG ?= .env.local`, `ANDROID_CONFIG ?= .env.android`, `LINUX_CONFIG ?= .env.linux` and `WINDOWS_CONFIG ?= .env.windows`, so a local run needs `.env.local` populated from the template's `LOCAL__` block. A minimal local block looks like this:

bash
LOCAL__POMODOIST_ENVIRONMENT=local
LOCAL__WEB_APP_URL=http://127.0.0.1:7358
LOCAL__SUPABASE_URL=
LOCAL__SUPABASE_ANON_KEY=
LOCAL__POMODOIST_BILLING_CHANNEL=storekit
LOCAL__POMODOIST_DEV_UNLOCK=0

Those keys are copied from `.env.example`; the Supabase values are blank there and must come from your own instance. Before opening a pull request the contribution section asks you to run `make check`. For the self-hosted path, the README directs you to the self-hosting page for Docker setup, HTTPS, email, integrations, backups and updates. It does not reproduce any of that in the repository README, so treat the docs site as the source of truth for ports and volumes beyond the loopback defaults in `.env.example`.

Where Pomodoist gets awkward

The self-hosted story depends on Supabase. That is a real constraint, not a footnote: you are running a Postgres-backed auth and API layer alongside the Pomodoist server, and the environment template expects you to supply `SELFHOSTED__SUPABASE_ANON_KEY` yourself. Anyone hoping for a single container with an embedded database will be disappointed by the shape of the configuration.

The release history is also worth reading before you pin a version. The most recent tags are `v1.0.6-rc.5` and `v1.0.6-rc.4`, both published on 2026-09-16, with the last stable tag `v1.0.5` on 2026-09-10. A repository whose newest releases are release candidates is telling you the 1.0.6 line is still settling. If you need a stable tag, `v1.0.5` is the one to look at, and the README does not document a rollback procedure for either the client or the server.

There is also a licensing boundary that matters for anyone planning a fork. The README states that the source, including `server/`, and the official client binaries are under AGPL-3.0-only, that paid subscriptions cover hosted services and account entitlements rather than a proprietary client licence, and that contributions require a Contributor License Agreement. The name, logo and app icon are governed separately by a trademark policy. If your plan involves shipping a modified client under your own brand, read `LICENSING.md` and `TRADEMARKS.md` before writing code, and take your own advice on the legal side.

Pomodoist against a plain Pomodoro timer

The obvious alternative is a dedicated Pomodoro timer, and the difference is architectural rather than cosmetic. A standalone timer holds a countdown and nothing else; it has no task database, no projects, no server and no account. Pomodoist's timer sits on top of a task model that spans inbox, today, upcoming, projects, timeline, kanban, priority matrix and search, and its reports combine productivity and focus-time trends, which only makes sense if sessions are recorded against tasks. That is what makes the reports view possible, and it is also what makes the app heavier.

The trade is availability. A standalone timer works offline, on any device, with no backend to operate. Pomodoist's local Flutter run still expects a `LOCAL__SUPABASE_URL` and an anon key, and the self-hosted target expects a Supabase instance reachable at `SELFHOSTED__SUPABASE_URL`. If your reason for wanting a timer is that you do not want another service to maintain, the standalone option wins on that axis, and Pomodoist is the wrong tool. If your reason is that the timer should know which project the session belongs to, Pomodoist is the option that closes that gap.

Maintenance, upgrades and the AGPL question

The repository is not archived and the last push was on 2026-09-16, so the project is being worked on right now. That said, the cadence visible in the release list is rapid: three tags within a week, two of them release candidates. Rapid tags are good for fixes and awkward for operators, because you have to decide how often to redeploy. The README routes updates and backups to the self-hosting documentation page, which is where the upgrade procedure lives; nothing in the repository README describes what an upgrade does to existing data.

On licensing, AGPL-3.0-only is the operative identifier for both `server/` and the official client binaries. The practical consequence for a self-hoster is that if you modify the server and let users interact with it over a network, the AGPL's network clause is the part your counsel will want to look at. The README also notes that the project accepts contributions under a CLA and that the name and icon are covered by a separate trademark policy, so a fork that keeps the Pomodoist name is a different question from a fork that keeps the code. None of this is legal advice; read `LICENSE`, `LICENSING.md` and `TRADEMARKS.md` and get your own review.

Editorial conclusion

Adopt Pomodoist if you want a Pomodoro timer and task planner in one AGPL-3.0 codebase and you are willing to read the self-hosting docs before you commit to running `server/` yourself. Do not adopt it if you need a hosted service with a published SLA, or if you want a task manager without a timer attached. Verify first that the self-hosting guide covers your deployment target and backup story, and read LICENSING.md and TRADEMARKS.md before you plan to modify or rebrand the client.

Frequently asked questions

What does Pomodoro mean in Pomodoist?

Pomodoist uses the term for the focus-timer side of the app: the README describes running Pomodoro sessions with deep-focus tracking and configurable breaks, and reporting weekly focus-time trends alongside productivity.

What is Pomodoist in food terms?

Nothing. Pomodoist is a task manager and Pomodoro timer for macOS, iOS and iPadOS, Android, Linux, Windows and the web; the name borrows from the Pomodoro Technique, not from a dish.

What does Pomodoro sauce consist of, and does Pomodoist relate to it?

Pomodoist's documentation says nothing about sauce or cooking. The repository covers task planning, Pomodoro focus sessions with configurable breaks, and productivity reports, so the food meaning of the word is unrelated to this project.

Are Pomodoros effective for ADHD?

The repository does not address ADHD or any clinical question. It documents configurable breaks and deep-focus tracking in the timer, and weekly productivity and focus-time reports, without making claims about attention disorders.

Official sources

  1. Kabanya/Pomodoist on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/kabanya-pomodoist.svg)](https://hysenlabs.com/projects/kabanya-pomodoist)