txstr

a text-centric, minimalist social ecosystem for publishing thoughts on the internet.

txstr is a text-centric, minimalist social ecosystem for publishing thoughts on the internet.

No algorithms. No feed manipulation. No likes, reposts, ads, or recommended content. Your identity is a keypair, your account lives on your machine, and your timeline contains only the people you explicitly follow.

a terminal session: txstr whoami, following, timeline, follow, view, tweet, reply, thread

how it works under the hood

Conceptually, txstr is a bit like RSS or twtxt: you get someone's identity, you follow them, and you read their posts. But unlike RSS or self-hosted twtxt files, you don't need to run your own server to publish.

You can send your notes to servers hosted by other people — whether they offer free access or paid options. Hosting text costs almost nothing, but you also don't have to trust server operators not to modify your content. Everything you write is cryptographically signed.

Want to run a server yourself, for you and your friends or for anyone? See txstr-server.

When you post, txstr creates a simple JSON document, signs it with your private key, and sends it to your selected servers. Anyone who wants to read your posts connects to those same servers, requests your signature/key, and verifies that the content came directly from you without tampering.

Your list of servers is published too, so people can find where you write. When you follow someone, txstr looks up their list and remembers a few of their servers next to their nick; your timeline then reads each person from their own servers. If someone goes quiet for over a week, txstr checks whether they've moved and offers to update your config. Notes that mention someone are also delivered to the servers they read from, and a thread is read from the servers of whoever started it, where every reply ends up.

installation

Grab a prebuilt binary from the releases page. Pick the archive for your platform, unpack it, and put txstr somewhere on your PATH:

$ tar -xzf txstr-x86_64-unknown-linux-gnu.tar.gz
$ ./x86_64-unknown-linux-gnu/txstr quickstart

Available for Linux (x86_64, aarch64), macOS (x86_64, aarch64), and Windows (x86_64).

Or build from source. Requires a stable Rust toolchain (1.91+).

$ cargo install --locked txstr

Note: Always use --locked to build against tested dependency versions. Run the command again anytime to update.

quickstart

Run the setup wizard:

$ txstr quickstart
txstr - quickstart
==================

this wizard will set up txstr for you.

➤ please enter your desired nick [you]: ghost
➤ paste an existing nsec, or leave empty to generate a fresh key:
➤ servers to talk to, space separated [wss://wheat.happytavern.co wss://soloco.nl]:
➤ publish your follow list too, so other clients can see it? (y/N):

✓ created config file at ~/.config/txstr/config.toml
✓ you are ghost — tell your friends:
  txstr follow ghost npub1…

Share that generated command (txstr follow <nick> <npub>) with anyone who wants to subscribe to your feed.

commands

writing & publishing

reading & viewing

replying & mentions

follow list & identity

running a server

If you run a txstr-server with your key as its admin, you can manage it from here.

global options

configuration

Configuration is stored at ~/.config/txstr/config.toml (created with 0600 file permissions to secure private keys).

nick = "ghost"
secret_key = "nsec1…"
servers = ["wss://soloco.nl", "wss://nos.lol"]
publish_follows = false
limit_timeline = 20
character_warning = 280
timeout = 10

[following.ada]
npub = "npub1…"
servers = ["wss://nos.lol", "wss://example.org"]
last_seen = 1791210152

[following.ken]
npub = "npub1…"
secret_key
Your cryptographic identity (nsec or hex).
servers
Servers txstr publishes to and reads your own notes from. They're announced as your server list whenever they change.
owned_server
The server you manage with txstr server, set by txstr server own.
publish_follows
When true, publishes follow lists publicly as petnames for compatibility with other clients.
following.<nick>
npub is who they are. servers is where their notes are read from (filled in from their published server list; empty means your own servers are used). last_seen is when their newest note you've seen was posted. The older nick = "npub1…" form still works.

protocol compatibility

txstr signs JSON notes behind the scenes via the ritualistic crate:

All notes published through txstr remain accessible from any standard client.