Open-source project
nsh07/Tomato avatar
nsh07/Tomato

Tomato: A minimalist Pomodoro timer for Android

Minimalist, data-oriented pomodoro timer for Android and Desktop based on Material 3 Expressive

1,505 stars94 forksKotlinGPL-3.0

At a glance

What is it?
Tomato is a Kotlin-based Pomodoro timer with a Material 3 Expressive interface, configurable sessions, work statistics, and Android 16 live updates. The README primarily documents Android installation, despite the repository also containing shared and desktop application modules.
Who is it for?
Tomato suits Android users who want a focused Pomodoro interface, configurable work intervals, local statistics, and Android 16 status updates, with account-based features not documented. It is a weaker choice for users who require documented desktop builds, cross-device synchronization, team reporting, or a documented rollback procedure.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

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

Editorial analysis

Tomato's Android Pomodoro Use Case

Tomato addresses a narrow productivity problem: running a Pomodoro timer without assembling timer data from spreadsheets, manual logs, or a larger habit-tracking suite. It is intended for Android users who divide focused work or study into timed intervals and want to see how those intervals accumulate over time. The interface is based on Material 3 Expressive, placing Tomato in the visual tradition of current native Android applications rather than presenting itself as a dashboard-heavy productivity platform.

The application supports customizable timer parameters, so the basic concept is broader than a fixed 25-minute work session and fixed break interval. The README does not enumerate every parameter, available ranges, or whether separate profiles are available. That omission matters when comparing it with a timer that exposes task labels, ambient sounds, strict accountability controls, or different presets for separate activities. Tomato's documented center of gravity remains the timer and its statistics.

Statistics cover the current day, the last week, and the last month. Weekly and monthly graphs also identify the times of day associated with the user's most productive periods. These are local observations derived from completed focus activity, not documented integrations with calendars, project managers, or team services. The README does not say that Tomato requires an account, sends timer data to a server, or synchronizes across devices.

The repository description and layout also identify Compose Multiplatform, `shared/`, `desktopApp/`, and `flatpak/` entries. However, the README describes Tomato as an Android app and directs users to Android APK distribution. The desktop code's build procedure and user-facing feature parity are not documented there, so desktop adoption would require checking those modules and release artifacts directly.

Material 3 Expressive UI and Android 16 Status

Tomato's documented integration path centers on Android platform capabilities. On Android 16 and later, it supports the Now Bar and Live Updates. Those status surfaces keep timer state visible outside the full application view, which is useful when the user has moved to another app while a work interval continues.

The README names MaterialKolor as a dependency for dynamic Material 3 color schemes. That indicates color generation is part of the implementation, although it does not explain whether Tomato follows the system palette automatically, samples artwork, or exposes a manual color-selection control. The documented conclusion is limited: Tomato's Material 3 presentation can incorporate dynamic schemes rather than relying exclusively on one fixed application palette.

The repository is primarily written in Kotlin and is organized around Jetpack Compose and Compose Multiplatform concerns. The visible module split places Android-specific code under `androidApp/`, cross-platform code under `shared/`, and desktop-specific code under `desktopApp/`. This layout supports a shared UI and application layer, but the README does not describe the boundary in enough detail to claim that every timer feature behaves identically on every platform.

Audio is listed under desktop dependencies as the Java Audio Stack, described as a repackaged and modularized version of `com.googlecode.soundlibs`. No corresponding alarm or notification behavior is documented for Android beyond Android 16 live updates. Consequently, users should not assume identical sound cues, notification behavior, or background operation across Android and Desktop from the dependency list alone.

Tomato Installation Through Google Play and F-Droid

The README does not provide source-build instructions. It presents Tomato as a distributable Android application, so the documented first installation path is an existing F-Droid client or the Google Play Store. Google Play is marked as recommended. F-Droid is also recommended, although the README notes that its updates are generally one week behind.

Search for Tomato in the preferred F-Droid app, or open the linked Google Play listing and install the application. After installation, launch Tomato, review the timer values before starting a session, and change the configurable parameters if the defaults do not match the intended Pomodoro cycle. The README includes screenshots but does not label each control, so it does not establish exact navigation labels for changing settings or opening statistics.

A faster F-Droid update path is documented through the IzzyOnDroid repository. GitHub releases also contain manually installable APKs, but the README explicitly says this route is not recommended and points users to Google Play or F-Droid instead.

For a manually downloaded APK, the README publishes signing certificate fingerprints for `apksigner` verification. It also states that each release contains APK hashes in `checksum.txt`. The published SHA256 certificate fingerprint is:

text
07:BE:F3:05:81:BA:EE:8F:45:EC:93:E4:7E:E6:8E:F2:08:74:E5:0E:F5:70:9C:78:B2:EE:67:AC:86:BE:4C:3D

This fingerprint identifies the documented signing certificate. It should not be treated as the hash of an individual APK file. The README separately points to `checksum.txt` for file-level verification.

Local Statistics and Room Persistence

Room is listed as the database dependency for storing SQLite data. In combination with Tomato's documented day, week, and month views, this points to locally persisted timer records that can be aggregated into graphs. That is different from a timer that requires a web dashboard or sends every session to a hosted service.

The statistics are designed for two levels of review. Current-day totals remain visible at a glance, while weekly and monthly views use clean graphs to make patterns easier to inspect. Additional charts indicate when during the day the user is most productive. The phrase "most productive" is presented as a time-of-day pattern based on recorded work or study, not as a machine learning assessment or a comparison with other users.

The README does not document export, deletion, retention, backup, or database migration controls. It also does not state how interrupted sessions are classified, whether changing timer parameters affects historical records, or whether editing a completed session is possible. Those details matter for users who need an auditable log or plan to retain several years of history.

For organizations, the absence of documented team accounts, shared projects, or server-side aggregation makes Tomato a poor fit for management reporting. Its data-oriented views can answer personal questions about when focused work occurs, but the README does not claim that one person's records can be combined with a team's records.

Desktop Scope and Platform Boundaries

Tomato is described as an Android and Desktop project at the repository level, but the README's About and Download sections consistently present it as an Android application. The repository includes `desktopApp/`, `shared/`, `flatpak/`, `linux/`, and `snap/`, which are concrete signs of desktop and Linux distribution work. Still, none of those directories is explained well enough to establish installation commands, supported operating systems, package availability, or release status.

This distinction matters. A source tree containing a desktop module does not prove that a user-facing desktop build matches the Android release. It may omit platform notifications, dynamic color integration, Google Play update delivery, or Android 16 status behavior. The README's statistics and feature descriptions are not broken down by platform either.

A realistic alternative for a user who wants shared Pomodoro data across several devices would be a service-backed timer with explicit account synchronization and a documented desktop client. Tomato takes a different approach, with a compact Android application, local SQLite persistence, and personal statistics. The trade-off is portability and shared reporting. The README does not establish whether Tomato can export its data or restore it on another device, so migration cost remains unknown.

The Desktop target is better viewed as a code path to investigate than a confirmed distribution channel. The presence of desktop audio dependencies is useful evidence of platform-specific implementation, but it is not enough to document background audio, packaging, or release compatibility.

Release Activity, Licensing, and Upgrade Boundaries

The repository is not archived. Its last push was on 2026-10-14. Recent releases include v2.0.1 and v2.0.0 on 2026-09-19, following v2.0.0-alpha03 on 2026-09-01. These dates show recent release activity, but they do not by themselves establish long-term compatibility or the cost of upgrading existing timer data.

Tomato uses GPL-3.0. Users distributing a modified binary must account for the license's source and notice obligations. Users who merely install an unchanged application from a store are in a different position from maintainers who fork, modify, or redistribute Tomato. This is a license boundary, not a technical assessment.

The README recommends store-based installation over manually downloaded release APKs. It also documents signing certificate fingerprints and release checksums, which helps users distinguish signed artifacts. However, it does not document a rollback command, downgrade policy, database migration policy, or compatibility notes between v2.0.0 and v2.0.1. Those omissions should be checked before replacing a timer that already holds useful session history.

Translations are managed through Hosted Weblate, and non-developer contributions are invited. That lowers the barrier for localization contributions, but it does not remove the need to check whether a translated build preserves consistent terminology for work intervals, breaks, and statistics.

Editorial conclusion

Tomato suits Android users who want a focused Pomodoro interface, configurable work intervals, local statistics, and Android 16 status updates, with account-based features not documented. It is a weaker choice for users who require documented desktop builds, cross-device synchronization, team reporting, or a documented rollback procedure. Before adoption, verify the platform you need, the distribution channel, configurable timer settings, and whether Android 16 live updates satisfy your routine.

Frequently asked questions

Where can I download Tomato?

Google Play and the official F-Droid repository are the recommended download channels. GitHub releases provide APKs, but the README advises against manual installation unless those channels are unsuitable.

Does Tomato have work and study statistics?

The README documents current-day totals, weekly and monthly graphs, and time-of-day patterns showing when the user is most productive. It does not document server synchronization or team reporting.

Does Tomato support desktop and Android live updates?

The repository contains shared and desktop modules, while the README documents Android as the primary application. Now Bar and Live Update support is specifically documented for Android 16 and later; matching Desktop feature parity is not documented.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. nsh07/Tomato on GitHub
  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/nsh07-tomato.svg)](https://hysenlabs.com/projects/nsh07-tomato)

Was this useful?