Deleting by hand is impossible
Three clicks per post. At 5,000 posts that is 15,000 clicks and several days of your life.
Delete every post, reply and repost on your X account. Paste one script into your browser console, click once, walk away.
Free. Open source. Runs entirely in your browser, nothing is sent anywhere.
Three clicks per post. At 5,000 posts that is 15,000 clicks and several days of your life.
The popular cleanup services delete around 50 posts a day on the free tier, then ask for a subscription and your account access.
Those services need OAuth access to your account, forever, to do something your own browser can already do.
Most read one timeline, run out after a few hundred, and tell you to refresh and start again. Forever.
Four steps. Takes about a minute to start.
In a desktop browser, logged in, go to:
https://x.com/YOUR_HANDLE/all
The /all tab matters. It is the fullest view of your posting history.
Press F12 (Windows/Linux) or ⌘+⌥+J (Mac), then click the Console tab.
First time pasting, Chrome makes you type allow pasting and hit Enter. That is Chrome protecting you from scams, and it is a good instinct. Read the script before you run it.
Paste the whole script, press Enter, then click once anywhere on the page.
That click lets it play a silent tone, which stops your browser from throttling the tab when you switch windows.
It works through every tab on your profile by itself and stops when nothing is left. Keep the tab open and stop the machine from sleeping.
XNUKE.status()see progress
XNUKE.stop()stop it
XNUKE.archive()clear community posts, see below
loading…
Five things that were learned the hard way, wiping a real 5,852 post account.
This is the big one. X splits your profile across five surfaces, and they are backed by different API operations. Point a script at one and it goes blind to the rest, then reports "no posts found" while thousands remain.
Gotcha: /with_replies is the Replies tab, not "posts and replies".
Once your replies are gone it renders empty while your posts are untouched. That one cost a day.
X recycles timeline elements as you scroll, so scraping the page catches only what is on screen right now. This hooks the network layer and harvests every id X sends, including the ones that scrolled away.
X renames its internal operations. The Posts tab moved to
UserOriginalsTimeline, which silently broke matchers pinned to a fixed list.
This matches the shape of a timeline operation instead.
X allows roughly 200 deletes per 15 minutes, enforced server side. No script can beat that. On a 429 this reads X's own reset header and sleeps precisely that long, then resumes.
Browsers throttle hidden tabs to one timer tick a minute. Timers here run in a Web Worker and an inaudible tone keeps the tab active, so you can use other windows while it grinds.
About 800 deletes an hour. 5,000 posts is a 6 to 7 hour job, mostly spent asleep between rate limit windows. Start it and go do something else.
A suspended laptop stops the run. On Linux: systemd-inhibit --what=idle:sleep sleep 8h. On Mac: caffeinate -i.
Your profile's post count is a cached number that lags days behind. It may read 5 while every tab is empty. Trust the tabs, not the counter.
If X throttles reads mid-run, some posts hide until it recovers. A second pass the next day catches stragglers.
Posts you made inside an X Community are invisible to every script, including this one.
They do not appear on any profile tab. They do not appear in search. They sit in their community's feed, mixed in with every other member's posts. Nothing running in your browser can list them, so no tool can delete what it cannot find.
They delete perfectly well once you know the id. The id is the only missing piece, and exactly one place has it: the archive X gives you on request.
XNUKE.archive()data/community-tweet.js from the unzipped folderFound the hard way: a wiped account still held 17 community posts that showed on no tab and in no search.
Do not want to leave a console tab open for seven hours?
The repo ships a Python + Playwright driver. It opens its own browser profile, logs in once, injects the script, and babysits the whole thing: reinjecting after navigations, riding out rate limits, retrying dropped wifi, and writing a summary when it finishes.
pip install playwright && playwright install chrome
python3 driver/x-nuke-driver.py
It never reads your saved passwords or cookie store. You log in yourself, in its window, once.