A graphical client for twtxt, a decentralized microblogging protocol based on plain text files.
Important
This project is under active development and may introduce breaking changes! Please check for updates regularly.
This client supports every desktop operating system (Windows, macOS, Linux). You can grab the latest release here.
macOS note: macOS may show a warning that twtGUI is damaged. This is because the app is not notarized. Run:
xattr -cr /path/to/twtGUI.appThen open the app normally.
If you encounter any issues, please open a bug report!
If you want to see a new feature or an improvement, please open a feature request!
You will need the following prerequisites:
- Rust
- Cargo
You can install both of these through Rustup.
After installing, simply clone this repository and run twtGUI:
git clone https://github.com/taxevaiden/twtGUI
cd twtGUI
cargo run # debug build
cargo run --release # optimized build (slower to compile, faster to run)
Cargo should automatically install any dependencies.
See CONTRIBUTING.md.
- Tweeting markdown-formatted posts
- Fetching viewing, and following feeds
- The twtxt v2 specification
If you're someone whose twtxt.txt only follows the twtxt v1 specification, this client's great for you!
If you're someone whose twtxt.txt follows the twtxt v2 specification, expect some features to be missing.
twtGUI uses a config.toml file to store user settings and follow information.
The file is automatically created on first launch if it does not already exist.
There is currently no dedicated settings page in twtGUI, so you must edit config.toml manually to change settings such as your nickname or the path to your twtxt.txt file.
However, feeds you follow can be managed through the Following page inside twtGUI.
If you need to edit config.toml, you can find it in your system’s configuration directory:
| Platform | File path |
|---|---|
| Windows | C:\Users\yourname\AppData\Roaming\taxevaiden\twtGUI\config\config.toml |
| macOS | /Users/yourname/Library/Application Support/com.taxevaiden.twtGUI/config.toml |
| Linux | /home/yourname/.config/twtgui/config.toml |
The configuration file is divided into three main sections:
[appearance][metadata][paths]
Contains settings for the appearance of twtGUI.
themeThe UI theme. You won't usually need to set this, as there is a theme-switcher built into twtGUI. Accepted values:light- Lightdark- Darksystem- Light or Dark, depends on system themecatppuccinmocha- Catppuccin Mocha (default)catppuccinfrappe- Catppuccin Frappecatppuccinmacchiato- Catppuccin Macchiatocatppuccinlatte- Catppuccin Lattegruvboxlight- Gruvbox Lightgruvboxdark- Gruvbox Darkgruvboxsystem- Gruvbox Light or Dark, depends on system theme
Contains information about you and your twtxt identity.
These values are stored locally in config.toml, and will be automatically written to your twtxt.txt file when saved.
-
urls
A list of public URLs pointing to yourtwtxt.txtfile.
Typically this contains a single URL. -
nick
Your display name. -
avatar
A URL pointing to an image, used as your profile picture. -
description
A short bio or description of your feed. -
kind
The type of feed.
Common values include:"bot"- automated account"rss"- RSS-to-twtxt feed
If not set, the feed is assumed to be human-managed.
-
follows
A list of feeds you follow (managed by twtGUI). Each entry contains:text- The display name of the feed.url- The feed’stwtxt.txtURL.
-
following
The number of feeds this feed follows.
This is automatically set by twtGUI based on the number of entries infollows. -
links
Additional profile links. Each entry contains:text- A label (for example,"GitHub")url- The associated URL
These may be shown on a user’s profile page.
-
prev
A list of archived feeds. Each entry contains:text- The hash of the last tweet in the feed.url- The feed’stwtxt.txtURL.
-
refresh
A suggested refresh interval (in seconds) for how often clients should fetch the feed.
[metadata]
nick = "john"
urls = ["https://example.com/twtxt.txt"]
description = "My personal twtxt feed"
avatar = "https://example.com/avatar.png"
kind = "user"
refresh = 600
[[metadata.follows]]
text = "jane"
url = "https://someone.dev/twtxt.txt"
[[metadata.links]]
text = "GitHub"
url = "https://github.com/username"
[[metadata.prev]]
text = "abc1234"
url = "https://old.example.com/twtxt.txt"# written into twtxt.txt
# nick = john
# url = https://example.com/twtxt.txt
# description = My personal twtxt feed
# avatar = https://example.com/avatar.png
# kind = user
# refresh = 600
# following = 1
# follow = jane https://someone.dev/twtxt.txt
# link = GitHub https://github.com/username
# prev = abc1234 https://example.com/twtxt-2017-2-7.txt
2026-03-01T03:10:17Z Hello everyone!
2026-03-01T04:21:27Z (#abc1234) Hello?
2026-03-01T04:21:57Z @<taxevaiden https://taxevaiden.pages.dev/twtxt.txt>?
Contains the filepaths to three files: the local twtxt.txt file, and three scripts.
-
twtxt
The filepath to your localtwtxt.txtfile. New posts are appended to this file when you publish a tweet. -
pre_tweet_script
The filepath to a script to run before posting a tweet. -
tweet_scriptThe filepath to a script to run when posting a tweet.
When this is set, the tweet is not automatically appended totwtxt.txtby twtGUI and is instead passed to thetweet_scriptas an argument. The timestamp is not passed to the script, so your script must handle timestamp formatting itself. -
post_tweet_script
The filepath to a script to run after posting a tweet.
[paths]
twtxt = "C:/path/to/twtxt.txt"
pre_tweet_script = "C:/path/to/pre_tweet_script.bat"
tweet_script = "C:/path/to/tweet_script.bat"
post_tweet_script = "C:/path/to/post_tweet_script.bat"Script files should be in .bat format on Windows, and in .sh format on Unix-like systems.
twtGUI is licensed under the MIT License. See the LICENSE file for details.
twtGUI uses the Iosevka font family, which is licensed under the SIL Open Font License. See the Iosevka repository for details.
