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.
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
txstr tweet [text...](ortxstr post [text...])- Post directly:
txstr tweet "compiling, brb" - Pipe input:
fortune -s | txstr tweetoruptime | txstr post - Bare command:
txstr tweetopens$VISUALor$EDITOR(falls back tovi). - Notes exceeding
character_warningrequire confirmation before sending. Returns a git-style short hash upon posting.
reading & viewing
txstr timeline [-l N] [-a] [-f]
Shows notes from people you follow and your own, newest first.-l N: Limit output to N notes.-a: Display oldest first.-f: Follow feed continuously (liketail -f).
txstr view <nick|npub> [-l N] [-a] [-f]
Inspect a single user's feed (works for followed nicks, rawnpub,nprofile, or hex keys).txstr thread <hash>
Displays a note's conversation tree by its short hash.
replying & mentions
txstr reply <hash> [text...]
Reply to a note by its short hash (e.g.txstr reply a1b2c3d "agreed").- Mentions: Typing
@nickaddresses anyone in your follow list. Mentions render as@nickfor recognized users and shortened public keys (@npub1...) for strangers.
follow list & identity
txstr follow <nick> <npub>: Add someone using a local alias.txstr unfollow <nick>: Remove someone locally.txstr following: List all followed users.txstr whoami: Output current nick and public key.
running a server
If you run a txstr-server with your key as its admin, you can manage it from here.
txstr server own <url>: Checks that the server is there and recognises you, then remembers it. The commands below only show up after this.txstr server add <nick|npub>/txstr server remove <nick|npub>: Let someone publish to your server, or stop letting them.txstr server users: List who can publish.txstr server name [name],txstr server description [text],txstr server icon [url]: Show these, or change them when given a value.txstr server disown: Stop managing it from here. The server itself is left alone.
global options
-c, --config <path>: Specify an alternate config file (useful for managing multiple identities).
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 (
nsecor 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 bytxstr server own. - publish_follows
- When true, publishes follow lists publicly as petnames for compatibility with other clients.
- following.<nick>
npubis who they are.serversis where their notes are read from (filled in from their published server list; empty means your own servers are used).last_seenis when their newest note you've seen was posted. The oldernick = "npub1…"form still works.
protocol compatibility
txstr signs JSON notes behind the scenes via the ritualistic crate:
- Standard notes are published as
kind 1events. - Replies use thread markers.
- Mentions use
ptags. - Public follow lists are exported as
kind 3events. - Server lists are
kind 10002events: yours marks every server as both read and write, and others' are used to read from their write servers and to deliver mentions to their read servers.
All notes published through txstr remain accessible from any standard client.