Import your Twitter / X archive into OnionPress
This walks you through moving your Twitter (X) posts into the Social Archive on your own onion service, so you own a durable copy that doesn’t depend on X staying up or keeping your account active.
What we’ll do: ask Twitter to prepare a ZIP of everything you’ve posted, wait for them to email a download link, and upload that ZIP into OnionPress. Twitter does the hard work; OnionPress does the importing.
What we won’t do: ask for your Twitter password. OnionPress never sees or stores Twitter credentials. The one place you type a Twitter password is Twitter’s own site in your browser, the same as always.
Before you start
- Have your Twitter / X account logged in on the same device you’re running OnionPress from (or at least the same browser you use for OnionPress admin).
- Know your handle (e.g.
@brewster_kahle). OnionPress asks for it once for labeling purposes. - Have an email inbox reachable — Twitter will send the download link there.
Step 1 — Request the archive from Twitter
- Open twitter.com/settings/download_your_data in a new tab. You’re already logged in.
- Twitter may ask you to re-enter your password and/or confirm a code sent to your email or phone. That happens entirely in your browser — nothing about this step involves OnionPress.
- On the Download an archive of your data page, click Request archive. The button may read Request data on some accounts.
- Twitter confirms the request and says it’ll email you when ready. Close the tab. There’s nothing more to do here for now.
If Twitter says “You already have a download available”: that means a previous request is still valid. You can use it — click Download archive — or click Request archive again for a fresh one.
Step 2 — Wait for the email
Typical wait: 2–24 hours. Occasionally longer (up to a week) for very large accounts or when Twitter is busy.
The email comes from [email protected] or similar with a subject like “Your X archive is ready.” It contains a link that opens a download page. The link expires after about a week — don’t put this off.
If the email never shows up:
- Check spam / junk folder.
- Check that the email address on your Twitter account is current (Settings → Your Account → Account information).
- Twitter sometimes silently drops requests for suspended / flagged accounts. If you can still log in normally and received no email after a week, try requesting again.
Step 3 — Download the ZIP
Click the link in the email. Twitter opens a page with a Download button. The file is named something like twitter-2026-04-18-abc123.zip.
Don’t unzip it. OnionPress reads the ZIP directly. If you’ve already unzipped, you can zip the folder back up and it’ll still work.
Archive sizes vary wildly: a few megabytes for a light user, tens of gigabytes for a very active account with years of media. Make sure you have disk space before downloading.
Step 4 — Upload into OnionPress
Go back to your OnionPress admin: Social Archive → Twitter. The upload form is near the bottom of that page.
- Drop the ZIP into the Archive ZIP field.
- Decide what to import:
- Originals and self-threads — always imported. These are your posts and your own continued thoughts on them.
- Retweets (RT @…) — opt-in checkbox. These are other people’s posts you shared. Default: off.
- Replies to other users — opt-in checkbox. These lose context without the post you were replying to, but capture your participation in conversations. Default: off.
- Click Import tweets. OnionPress reads the ZIP, copies media files into your uploads library, and creates one post per tweet. Large archives can take several minutes.
OnionPress will report how many posts were imported and how many were skipped (filtered or already imported).
Good to know
Re-running is safe. If you change your mind about RTs or replies, check the boxes and re-upload the same ZIP — OnionPress remembers which tweet IDs it’s already seen and only imports new ones. Same deal when you request a fresh archive from Twitter months later to capture new posts.
Your media lives on your onion. Images and videos from your tweets get copied into WordPress uploads and served from your onion address, not from pbs.twimg.com. If Twitter takes the originals down, your archive still works.
Original dates are preserved. Each imported post is dated to when the tweet was actually posted, not when you imported it. The Social Archive timeline shows your real history.
URLs are expanded. Twitter’s t.co shortlinks in your tweets get rewritten to their real destinations, so the imported post links go directly to what you linked to instead of bouncing through Twitter.
Privacy
The takeout ZIP does contain DMs, likes, lists, follower data, ad preferences, and a lot of other stuff Twitter knows about you. OnionPress reads only the public-post portion (data/tweets.js and the associated data/tweets_media/). Everything else in the ZIP is ignored and not stored.
After import, the uploaded ZIP itself is deleted from the server’s temporary storage.
If something goes wrong
- “No tweets.js found”: you may have uploaded a non-Twitter ZIP, or one from before 2018 (when Twitter’s format changed). Re-request a fresh archive.
- Upload fails with a size limit: your ZIP is bigger than PHP’s upload limit. Settings in
php.ini(upload_max_filesize,post_max_size) govern this; the OnionPress defaults are 256MB. For larger archives, contact the OnionPress folks — raising the limit is a server-side change. - Import takes forever and times out: future versions will use background processing. For now, try again in a less-loaded moment; the idempotent-reimport behavior means you won’t double-create posts.