Now that X is a steaming toxic trashpit, Semiphemeral can't come soon enough

While Elon Musk spreads hate and Trumpism across his platform, I've been hard at work developing Semiphemeral so you can regain control of your data on X. Here's how development has been going, and how the app will work.

Now that X is a steaming toxic trashpit, Semiphemeral can't come soon enough
macOS installer for early development build of Semiphemeral

In the last few weeks, Elon Musk, the reactionary billionaire owner of X who once banned me from his platform for reporting on him, has pushed the following content to his nearly 200 million followers:

Ugh, I feel like I should take a shower.

People keep asking me when Semiphemeral will be ready so that they can finally regain control of their data from X. I've been hard at work developing it, and while I don't have a firm release date, my ambitious goal is to release it in the coming months... maybe in time for the election?

In any case, I thought now would be a good time to take a break from writing code and share some details about how things are going.

How Semiphemeral will work

Semiphemeral will be a free desktop app with paid features. After installing it and opening, the first screen looks like this:

Opening Semiphemeral for the first time

The first version of Semiphemeral will just support X, but you'll be able to use it to control your data from more platforms in the future.

After selecting X, the Semiphemeral bird (who I'm leaning towards naming Cyd, short for "Clawback Your Data") tells you to start by logging into your account in the embedded browser in the window, which takes up the bottom part of the screen.

0:00
/0:25

Logging into an X account on Semiphemeral

When the embedded browser has a green border and says "ready for input" at the top, the app is waiting on you to do something (like log into your account). When it has a yellow border and says "automation in progress," this means that Cyd is hard at work automating the embedded browser for you.

💡
Privacy note: When you log into your X account within Semiphemeral, it's no different than logging into it using a normal browser like Chrome or Firefox. You send your username and password directly to X. Semiphemeral's server doesn't collect any data, doesn't have any access to your account, and isn't involved at all.

After you login, you have two options:

  • Create a local archive of your data
  • Or delete your data

The business model is simple: archiving your data will be free, and deleting your data will require a cheap annual subscription.

(X already lets you request an archive of your data. However it can take days to get your data, Elon Musk can shut down this feature at any point on a whim, and, as you'll see below, the archives that Semiphemeral creates are higher quality.)

Here's what it looks like when I create an archive of data from a test account:

0:00
/0:59

Indexing and archiving tweets

As you can see, Semiphemeral does everything directly on your own computer, and the dashboard shows you exactly what it's doing at all times. To save a copy of all of your tweets, it goes to your profile page and scrolls to the bottom, over and over, until it's made it to your last tweet.

💡
For the nerds: As part of his enshittification of Twitter, Elon Musk effectively killed X's API, making it significantly harder to write software that works with X. Semiphemeral gets around this by automating a web browser, but in a way still uses the API in background. As you scroll through X, the X website itself uses the API. Semiphemeral peeks inside the contents of the HTTP response bodies from the API requests, allowing it to efficiently make a local backup of your data. This is the same data that's available to any user who chooses to open Developer Tools in their browser while browsing X manually.

After creating a local database of all of your tweets, Semiphemeral then saves a local HTML copy of each one – think of it like your own private Wayback Machine.

While it's doing all of this, it's likely that Semiphemeral will run into X's rate limits. Here's what it looks like when that happens:

0:00
/0:42

Semiphemeral pauses automatically when it hits a rate limit

If Semiphemeral detects that it has hit a rate limit, it pauses and waits the exact amount of time that it needs to, and then it continues where it left off. When you hit a rate limit, in general you have to wait somewhere between 5 and 10 minutes before proceeding. But in the end, this is all controlled by X.

💡
For the nerds: When Semiphemeral's automated web browser makes too many requests to X's API, the API starts responding with "429 Too Many Requests" errors. If you look at these HTTP responses, they include the X-Rate-Limit-Reset header, which can be used to calculate the exact number of seconds that Semiphemeral needs to wait before proceeding.

Now is a good time to note that while Semiphemeral is running, whether it's archiving or deleting your data, doing this for multiple accounts at the same time, waiting for rate limits to expire, or anything else, you can minimize it and do other work on your computer. Cyd will be hard at work in the background on your behalf. Semiphemeral runs directly on your computer, so your computer needs to be turned on and awake for it to work.

If you choose to create an archive of your DMs as well, Semiphemeral will do a similar process: browse through all your DM conversations, saving messages to a local database. When it's done, it builds an archive website, and it stores all of this locally in the Documents folder on your computer.

When the archive has finished, you can browse it locally on your computer

Clicking Browse Archive will open an HTML file and let you explore a searchable archive of your tweets and DMs. From within the archive, you can see the locally saved copies of tweets, as well as links to the original tweets. You can also browse through and search all of your DMs. (I apologize for the, uh, bizarre content in my test accounts.) Here's what it looks like:

0:00
/0:42

Browsing an X archive created by Semiphemeral

If you click Open Folder, a file manager program will open on your computer where your archive is saved:

Files in a Semiphemeral X archive

You can see the searchable archive web page by loading index.html, and the Archived Tweets folder contains a copy of all of your tweets, one HTML file per tweet.

💡
For the nerds: The data.sqlite3 file is a raw copy of the database, in SQLite3 format, that Semiphemeral scraped up for your account. Go wild.

After archiving your X data, you can then choose exactly what you want to delete (and what you want to keep).

Options for deleting your data from X's platform

For example, you could delete everything on the entire platform. Or, you could delete 97% of it (all the embarrassing or inappropriate stuff you posted in the 2010s for example), but keep the 3% that went viral. You can also delete your likes and DMs.

After deleting the old tweets you don't want anymore, nothing stops you from continuing to post to X as frequently as you want. If you delete your old posts using Semiphemeral on a regular basis you'll have considerably more privacy.

To delete data, you'll need to sign into Semiphemeral using an email address and pay for a premium account. I'm still working out the exact details of pricing, but I've already decided that having a paid account will let you delete data from as many of your X accounts as you'd like. (If you work for a company or nonprofit and would like to provide Semiphemeral as a service for your employees, that will be an option too!)

Semiphemeral's approach to data collection

As an app dedicated to allowing you to control your own data, I decided that it's important for Semiphemeral to collect as little of it as possible.

First, Semiphemeral is an app that you run on your own computer, not in the cloud. It does all its automation on your computer, and it saves archives of your data there too. The Semiphemeral server doesn't have any access to your X accounts, to the contents of your archives, or anything else.

If you just want to archive your data, there's no need to sign into Semiphemeral at all – you just download the app and start archiving. No questions asked, no private data collected. It's your data.

If you want to delete your data, you'll need to create an account, and the server will store your email address (this is basically your username). It will also store aggregate statistics about how much of your data you archive and delete. That's it. It won't record which specific X accounts you've used Semiphemeral with, and it won't have access to any data from your accounts.

What's next

In between bouts of doomscrolling on social platforms like Mastodon and Bluesky, I'll be spending the next few weeks madly writing code.

Once I have a feature-complete build of Semiphemeral available, I'll write another post on this blog with an open call for beta testers. I only plan on accepting about 30 testers, so if you're interested, make sure to subscribe to the newsletter. (As a tester, you'll get a year of premium Semiphemeral features for free.)

You can follow Semiphemeral on Mastodon, Bluesky, and X.

If you'd like to show your support for this project, considering donating. This will make it easier for me to release Semiphemeral more quickly.