- Rust 68.8%
- Kotlin 29%
- CSS 1%
- Shell 0.9%
- Dockerfile 0.3%
- Make sync_now take the shared WebDAV gate with try_lock and return CoreError::SyncBusy when an archive transfer holds it, rather than waiting for the whole upload pass. - Treat SyncBusy as a skipped run, not a failure, in the GTK and Android sync paths: no error shown, no retry backoff armed, and the in-flight state cleared. - Add a core test that a busy gate yields SyncBusy, and an Android SyncCoordinator test that a busy engine is reported as NotDue without a recorded message. |
||
|---|---|---|
| .forgejo | ||
| adwaita | ||
| android | ||
| assets/readme | ||
| core | ||
| .dockerignore | ||
| .gitignore | ||
| README.md | ||
Threado
Read Reddit without an account, and without leaving one behind.
Download • Android • GNOME • Matrix
Community
Discussion happens in #threado:salix.host, which works from any Matrix client. If you do not have an account yet, you can create one on salix.host, my public homeserver: federated, encrypted by default, and no email address required.
Download Threado
Android
Obtainium is the recommended option because it installs updates directly from Threado releases. The APK button opens the latest release for a manual download. Threado needs Android 7.0 or newer and is not available through Google Play.
F-Droid clients can add the Salix repository at https://salix.host/fdroid/repo/ instead. It
provides Threado (app.threado) and the separately installable Threado Nightly
(app.threado.nightly).
Linux
Open the Flatpak repository button with GNOME Software or Discover, then install Threado from
the new Salix source. The repository is signed and provides updates for the stable app as well as
the separately installable nightly build. These packages currently support x86_64 only. If your
software center does not handle the button, use:
flatpak remote-add --if-not-exists salix https://salix.host/flatpak/salix.flatpakrepo
flatpak install salix app.threado.Threado
Screenshots
Description
Threado is a set of native apps for reading public Reddit content without an account. You subscribe to the communities and profiles you care about, and Threado keeps the feed, the saved posts, and the reading history on your own devices.
There is an Android app and a GNOME desktop app. They look and feel like the platform they run on, and they share one Rust core so they behave the same way underneath.
Features
- Account-free by construction. Reads go through an anonymous OAuth token Reddit issues to an application rather than a person. No sign-in, no credentials, no Reddit cookies sent, no user state created.
- Tor without the setup. Route everything through the app's embedded Arti client or your own system Tor, and point the reader at Reddit's clearnet hosts or its official onion service. The two are independent settings, and embedded Tor fails closed rather than falling back to clearnet.
- Circuits that do not look alike. Each Tor lane mints its own token over its own circuit with its own device id, and background media traffic gets a market-share-weighted browser fingerprint covering TLS, HTTP/2, headers, and user agent. No two live circuits share one.
- A feed you can shape. Subscribed communities, followed profiles, and custom feeds mix into one home feed, with at most one profile post admitted per four community posts so quiet profiles cannot pad it with stale submissions.
- A library that stays yours. Saved posts with ordered collections, tags, and notes, plus read history, all in a local SQLite database. Portable JSON backups export, and import as a preview-and-merge that never overwrites newer local records.
- Offline reading packs. Download the newest posts and comments from Home, a custom feed, a community, or a profile before a commute. Choose a post count, optional media, and a storage limit for each pack. Read and delete packs from the Offline reading packs menu.
- Spaces for different uses. Each space keeps its own follows, custom feeds, library and reading history. Switching takes fresh Tor circuits and API identities so the spaces are not linked. One sync target covers every space, and spaces created or renamed on one device appear on the others.
- Sync with no service in the middle. Optional cross-device sync goes through your own WebDAV server. The password and a target-bound encryption key live in the platform's secret store, and each device chooses which library categories it publishes and accepts.
- Media that plays inline. Images, galleries, Reddit DASH video, direct HTTPS video, animated images, and supported Redgifs links all play in the feed and the reader, and every byte arrives over the network route you selected.
Projects
| Project | Best for | Built with | How to get it |
|---|---|---|---|
| Android | Phones, tablets, foldables | Kotlin, Compose, Media3 | APK on the releases page or via Obtainium |
| GNOME | Linux desktops | Rust, GTK 4, libadwaita, GStreamer | Flatpak from the signed Salix repository |
| Core | Everything shared | Rust, SQLite, Arti, UniFFI | Used by the apps above |
This is one Git repository holding independent Cargo and Gradle projects. Each project README covers install, build, and what is actually implemented today.
Contributions
I'm not currently accepting contributions, but issues are welcome for bug reports, feature ideas, and other feedback.
Releases
Pushing a semantic-version tag such as v1.1.0 runs .forgejo/workflows/release.yml, which builds
and verifies a signed Android release APK plus the stable app.threado.Threado Flatpak, publishes
the Flatpak to the signed Salix repository and the APK to the Salix F-Droid repository, then
publishes both files and their SHA-256 checksums as a Forgejo release.
Between releases, pushes that touch the relevant platform or core sources build downloadable nightly
artifacts. Android nightly APK uploads threado-nightly-<commit>.apk and publishes it to the
F-Droid repository as app.threado.nightly, and Adwaita Flatpak publishes the separately
installable app.threado.Threado.Devel nightly Flatpak. Both workflows can
also be started manually and expect the container-capable Forgejo runner with the unraid-docker
label. Toolchains are installed inside each job container; the runner does not need to expose its
Docker daemon.
Disclaimer and license status
Threado is a personal project, built for daily use and experimentation. Threado, its source code, and all downloadable builds are provided as is, without warranties of any kind, express or implied. You use them entirely at your own risk. To the fullest extent permitted by applicable law, the author will not be liable for any claim, loss, damage, data loss, service interruption, or other consequence resulting from the use, misuse, or inability to use Threado.
No support commitments, compatibility guarantees, or release schedule are provided. You are responsible for complying with applicable laws and third-party terms when using Threado. The project is not affiliated with Reddit or Redgifs.
The code is source available for reading and reference. It is not open source licensed, so unless a license is added later, no permission is granted to reuse, redistribute, or relicense it.





