- Rust 85.1%
- CSS 8.9%
- Fluent 5.8%
- Shell 0.2%
| contrib | get a git | |
| locales | get a git | |
| src | get a git | |
| build.rs | get a git | |
| Cargo.toml | get a git | |
| LICENSE | get a git | |
| README.md | get a git | |
onne
A smol, no-JS fediverse client.
Onne is a server-side Mastodon client. It speaks the Mastodon API, renders plain HTML, and ships as a self-contained static binary. Put a reverse proxy in front and off you go.
Status
Early. The basics work; login, timelines (home / local / federated / hashtag / list), composing (with media, polls, content warnings, visibility), notifications, search, profiles, RSS, settings, reports. Expect rough edges.
Build
Requires a recent stable Rust toolchain.
cargo build --release
For a fully static musl build:
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
The resulting binary at target/release/onne (or
target/x86_64-unknown-linux-musl/release/onne) is self-contained;
scp it to a server and run it.
Run
ONNE_PORT=9000 ONNE_DB_PATH=./onne.db ONNE_BASE_URL=https://onne.example.org ./onne
| Variable | Default | Notes |
|---|---|---|
ONNE_PORT |
9000 |
Bind port. Listens on 0.0.0.0. |
ONNE_DB_PATH |
onne.db |
redb database for OAuth app credentials and encrypted sessions. |
ONNE_BASE_URL |
http://localhost:$PORT |
Public origin used for OAuth redirect_uri. Must match what users hit. |
Put it behind nginx/Caddy/your TLS terminator of choice.
Deployment
contrib/ contains service units; systemd is best-effort:
contrib/systemd/onne.servicecontrib/openrc/onne
Data at rest
OAuth app credentials are stored in plaintext (they're not user secrets; they identify onne itself to the upstream Mastodon instance). Sessions — which include access tokens — are stored encrypted: the session cookie is the only credential, and from it the database row's index and its AEAD key are derived via SHA-256 with distinct domain tags.
Localisation
Strings are in locales/*.ftl (Fluent). PRs for more locales welcome.
License
onne is licensed under the GNU Affero General Public License v3.0 or later. See LICENSE.
The bundled Lexend variable font is licensed under the SIL Open Font
License v1.1; see src/views/Lexend-OFL.txt.