Contributing to Focus Timer
May 5, 2026 ยท View on GitHub
Thanks for considering contributing! Whether you're fixing bugs, translating, or adding features, your help is incredibly valuable.
Reporting issues
Found a bug? Please check the Troubleshooting section first.
When opening an issue on GitHub, include:
- App version
- Desktop environment and version
- Relevant logs or a stack trace
- Steps to reproduce the bug
Suggestions and feature requests are always welcome!
Troubleshooting
Missing indicator
If you're on GNOME, you'll need the Focus Timer extension. Check its troubleshooting page if you already have it.
Missing Automation panel
If you installed the app via Flathub, restricted permissions hide this panel. Try another installation option if you need it.
Getting logs
Since boot:
journalctl --user -b -t io.github.focustimerhq.FocusTimer
Real-time:
journalctl --user -f -t io.github.focustimerhq.FocusTimer
With debug output. Run in the terminal and reproduce the issue:
flatpak run io.github.focustimerhq.FocusTimer --quit
flatpak run --env=G_MESSAGES_DEBUG=focus-timer io.github.focustimerhq.FocusTimer
Getting a stack trace
If the app crashes, providing steps to reproduce it is usually enough. However, to share a stack trace, install the debug info:
flatpak install --user --include-sdk --include-debug io.github.focustimerhq.FocusTimer
Find the app PID from recent crashes:
coredumpctl list --since=today focus-timer
Run gdb with your <pid>:
flatpak-coredumpctl -m <pid> io.github.focustimerhq.FocusTimer
Inside gdb, get the full trace:
bt full
Translating
We use Gettext, with .pot and .po files located in the po/ directory. Note that the app and the GNOME Shell extension have separate translations.
To add or update a language:
- Generate or update your language's
.pofile inpo/(e.g., usingmsginit). - Add your language to the
po/LINGUASfile. - Submit a Pull Request.
LLM prompt to ease the process:
Fill-in missing translations and update fuzzy translations for the given file. Translations are for an desktop Pomodoro timer app. Take care to use consistent same translations for words: "break", "pause", "start", "stop", "rewind", "interruption". "pause" refers to the timer action, while "break" refers to taking a break from work, "interruption" refers to a distraction. Translations does not need to be exact, but must convey same meaning - make them sound natural. Mark modified entries as fuzzy. Output the updated .po file for download, do not truncate it.
Note: We keep .po files synced with the .pot template automatically, so you don't need to do this manually.
Development
We recommend using GNOME Builder with the provided Flatpak manifest.
When running Devel manifest some features will not work, including notifications and background indicator. SQLite database will be separate from user session.
Running unit tests
Run:
ninja -C build test
or run unit tests through your IDE.