Farora
A local-first, plain-text task tracker with a Textual TUI.
Tasks live as Markdown files with YAML frontmatter in a plain folder, so they sync over any file-sync engine, diff cleanly in git, and stay readable without Farora.
Install
uvx farora # run without installing
uv tool install farora # install persistently
If your uv is older and picks an interpreter below 3.14, name one explicitly:
uv tool install --python 3.14 farora
Supported configuration
Farora 0.5 is developed and tested on macOS with Python 3.14+. uv provisions
the interpreter for you.
These tools are optional — each unlocks a feature, and Farora degrades cleanly without it:
| Tool | Unlocks |
|---|---|
| helix | e opens the task body in helix (otherwise $EDITOR, then vi) |
| mdcat ≥ 2.11 | v / V live markdown render with inline images |
| WezTerm | v renders side by side in a split pane |
| git ≥ 2.30 | Sync a task repo across machines |
Linux and Windows are not supported in this release.
Commands
| Command | Purpose |
|---|---|
farora |
launch the TUI |
farora doctor |
validate and reconcile a repo |
farora gc [--older-than DURATION] |
purge expired tombstones now |
All commands accept --repo PATH, defaulting to $FARORA_REPO, else ~/.farora.
Deleted tasks are kept before they are gone
Deleting a task removes its tasks/FAR-42.md, but its journal stays behind as a
tombstone holding a full snapshot of the task — frontmatter and body text. That
is what u undoes a delete from, and what a future farora restore would rebuild
from.
So a deleted task's text is still readable in the repo, in
projects/FAR/journal/FAR-42.jsonl, until garbage collection removes it. If a task
held something sensitive, deleting it is not the same as shredding it — anything
syncing or backing up the folder has the snapshot too.
Garbage collection runs opportunistically: every ordinary farora run sweeps the
repo it opens, so there is no daemon and nothing to schedule. Tombstones older than the
retention window are purged; everything else — every live task, and every tombstone
still inside the window — is left alone.
farora gc # purge now, using the configured window
farora gc --older-than 0s # purge every tombstone, right now
farora gc --older-than 7d # ... or everything deleted over a week ago
Configure it in ~/.config/farora/config.toml:
[gc]
enabled = true # false: never sweep on ordinary runs (`farora gc` still works)
retention = "30d" # how long a deleted task's snapshot is kept: s | m | h | d | w
Both keys are optional and the values above are the defaults. Purging is permanent: once a tombstone is collected, undo and restore have nothing to work from, and the task number is never reused.
License
Proprietary. See LICENSE.
Free to use for any purpose, including commercially — by individuals and by companies, at no charge and without asking. Redistribution and modification are not permitted.
To license Farora on other terms, contact hi@farora.tools.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file farora-0.5.0-py3-none-any.whl.
File metadata
- Download URL: farora-0.5.0-py3-none-any.whl
- Upload date:
- Size: 303.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
277ce7165bbc24331428f3e2ee8d6f63d7284935d439cd025ef35af247ef1677
|
|
| MD5 |
bce87f1dc7923774f5b55c2578ca3cf2
|
|
| BLAKE2b-256 |
23a30b555978faf02eadcf3b637eec18e69e2a03fba697d6f25b28478f875258
|
Provenance
The following attestation bundles were made for farora-0.5.0-py3-none-any.whl:
Publisher:
release.yml on shandyba/farora
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
farora-0.5.0-py3-none-any.whl -
Subject digest:
277ce7165bbc24331428f3e2ee8d6f63d7284935d439cd025ef35af247ef1677 - Sigstore transparency entry: 2760260026
- Sigstore integration time:
-
Permalink:
shandyba/farora@a9ced1f421ed5f3c49b263a31d83c086878ebe2a -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/shandyba
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a9ced1f421ed5f3c49b263a31d83c086878ebe2a -
Trigger Event:
push
-
Statement type: