Skip to content

Nitter alternative for developers: getting tweets into code

A Nitter alternative for scripts and RSS readers: where Nitter stands after X's legal letters, self-hosting, RSS-Bridge, and an API script for Twitter RSS.

Piyushh · October 14, 2026 · 7 min read

The working Nitter alternative for developers is an API plus a few lines of code that turn its JSON into a feed. Most public Nitter instances went dark after X Corp. sent cease and desist letters on August 24, 2026. The zedeus/nitter repository is archived, and on October 10 the maintainer wrote that the project has no legal counsel. Any script or RSS reader that pointed at a Nitter instance needs a new source.

This post covers what happened, the options for code (self-hosting, RSS-Bridge, the official X API, a hosted API), and a Python script that builds a Twitter RSS feed from an API call, with real sample output. If you only want to read X in a browser without an account, XAutoDM tested which Nitter instances and viewers still work. Everything below was checked on October 14, 2026.

What happened to Nitter in 2026

The timeline below comes from the project's own pages:

  • August 24, 2026: according to the Nitter README, "cease and desist letters were sent by X Corp. demanding a permanent takedown of Nitter instances and the project's repository."
  • August 25: in issue #1442, titled "All public nitter instances do not work," maintainer zedeus wrote: "We have received cease and desist letters. Awaiting legal advice at the moment, but for now expect all nitter instances to remain down for the foreseeable future."
  • September 6 and 7: a commit titled "Update README - Nitter lives," and a nitter.net update saying the project would continue with legal representation.
  • September 8: per nitter.net, X sent another letter "with the same demands and legal threats."
  • October 9: the GitHub repository was archived (read-only). Its last push was that day.
  • October 10: the nitter.net update says the earlier legal assurances "have since turned out to be untrue" and that "Nitter currently has no legal counsel."

XCancel, a widely used Nitter instance, shows "XCancel service is suspended" and returns HTTP 451 (unavailable for legal reasons). Tech commentator @EvanKirstel reported that X cited "a Texas computer access law and the Lanham Act" (post). The letters themselves aren't public.

Feed users felt it first. @TRX9800_ asked, in capitals, how they were supposed to use RSS for Twitter now (post).

Why Nitter feeds were fragile for scripts

Nitter was never an API. It was a front end that fetched X content on the server and rendered it as HTML and RSS. When someone on Hacker News asked how instances got their content, one commenter answered: "HTTP. They just load the page while logged in to one of the server's accounts" (comment). Another put it shorter: "It's basically a proxy" (comment).

Every script built on Nitter inherited that design:

  1. RSS depended on the instance and was often switched off. The README lists "RSS feeds (instance-specific, often disabled due to abuse)," and nitter.example.conf has a separate switch for each feed type, from enableRSSUserTweets to enableRSSSearch.
  2. Each instance shared its rate limits with all of its users. Issue #1442 opened with "Every instance has the same Instance has been rate limited. error."
  3. The output was shaped like HTML. Feeds carried rendered text and Nitter links instead of structured fields like likes, views or reply counts.

A replacement should give you structured data from a source you control.

Nitter alternatives for developers, compared

OptionWhat you needStructured dataMain risk
Self-hosted NitterA server, Nim, Redis or Valkey, logged-in X account cookiesNo (HTML and RSS)Account suspensions; legal letters
RSS-Bridge, Twitter V2 bridgeA PHP host and your own X API Bearer tokenRSS onlyX pay-per-use bill
RSS-Bridge, other Twitter bridgesA PHP hostRSS onlyDepend on guest tokens or Nitter instances
Official X APIAn X developer app and creditsYes (JSON)Per-post billing
Hosted API (for example ChatterAPI)One API keyYes (JSON)A third party in your stack
Browser viewersNothingNoNot built for code

Self-hosting Nitter

Self-hosting still works for some people. In the same issue, user MiningTcup wrote: "My instance still works and self-hosting should still work" (comment).

The README lists what you need: Nim to compile, libsass, Redis or Valkey, a nitter.conf with your hostname and HMAC key, and, for the Docker Compose setup, a sessions.jsonl file. That last file holds cookies (auth_token and ct0) from logged-in X accounts, and the repo's tools/ folder has create_session_browser.py to produce them. The older curl-based script is marked deprecated because "X now requires a castle token generated by client-side JavaScript during the login flow."

There are two problems to know about before you set one up. X's developer guidelines list "Non-API access" as prohibited, with "scraping and browser automation = permanent ban," so the accounts in sessions.jsonl can be suspended. The project is also archived, so when X changes something again, no fix will come from upstream.

RSS-Bridge

RSS-Bridge is maintained (last push October 13, 2026) and ships several Twitter bridges. Read the code before you rely on one:

  • TwitterV2Bridge calls api.twitter.com/2 and "requires a unique API Bearer Token." That means you need an X developer app and pay-per-use credits. By default it requests 10 posts per poll.
  • TwitterBridge, the classic one, requests guest tokens from X's API. We didn't test it. Nitter itself moved to logged-in sessions, so assume guest-token access is unreliable.
  • FarsideNitterBridge reads through farside.link, a redirector to public Nitter instances. farside.link/nitter/ returned 404 when we checked.

The official X API

The first-party option is the official API. You create an app in X's Developer Console (our X API key guide has the steps) and poll the user timeline or recent search. Reads cost $0.005 per post returned, according to X's pricing page on Oct 14, 2026, and new developers get no free tier. Our post on whether the X API is free covers the starter credits.

Build a Twitter RSS feed from an API

In practice, a Nitter RSS alternative looks like this. The script below polls ChatterAPI's x.tweets endpoint for an account, or x.search for a query, and prints an RSS 2.0 feed. It needs only requests and the standard library.

import os, sys, requests
from email.utils import format_datetime
from datetime import datetime
from xml.sax.saxutils import escape

API = "https://api.chatterapi.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['CHATTERAPI_KEY']}"}

def fetch(kind, value):
    if kind == "user":
        url, params = f"{API}/x/users/{value}/tweets", {"includeRetweets": "false"}
        title, link = f"@{value} on X", f"https://x.com/{value}"
    else:
        url, params = f"{API}/x/tweets/search", {"q": value, "sort": "latest"}
        title, link = f"X search: {value}", "https://x.com/search"
    r = requests.get(url, headers=HEADERS, params=params, timeout=60)
    r.raise_for_status()
    return title, link, r.json()["data"]

def to_rss(title, link, tweets):
    items = []
    for t in tweets:
        when = datetime.fromisoformat(t["createdAt"].replace("Z", "+00:00"))
        first_line = t["text"].split("\n")[0][:100]
        items.append(f"""  <item>
    <title>{escape(t['author']['handle'] + ': ' + first_line)}</title>
    <link>{t['url']}</link>
    <guid isPermaLink="true">{t['url']}</guid>
    <pubDate>{format_datetime(when)}</pubDate>
    <description>{escape(t['text'])}</description>
  </item>""")
    return f"""<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>{escape(title)}</title>
  <link>{link}</link>
  <description>Generated from the ChatterAPI X endpoints</description>
{chr(10).join(items)}
</channel></rss>"""

if __name__ == "__main__":
    kind, value = sys.argv[1], sys.argv[2]   # user levelsio  |  search '"crm recommendation"'
    print(to_rss(*fetch(kind, value)))

For a search, run it with python x_rss.py search '"crm recommendation"' > feed.xml. Here is the start of the real output, from a sample recorded with a test key:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>X search: "crm recommendation"</title>
  <link>https://x.com/search</link>
  <description>Generated from the ChatterAPI X endpoints</description>
  <item>
    <title>HesomParhizkar: meta ads: how important is the “connect to your crm” recommendation?</title>
    <link>https://x.com/HesomParhizkar/status/2099495333231288346</link>
    <guid isPermaLink="true">https://x.com/HesomParhizkar/status/2099495333231288346</guid>
    <pubDate>Mon, 14 Sep 2026 13:47:48 +0000</pubDate>
    <description>meta ads: how important is the “connect to your crm” recommendation?
...

The account version (python x_rss.py user levelsio) returned 19 items from one call, and the file parses as valid XML. Because the tweet URL doubles as the guid, feed readers dedupe items across polls on their own. Links point at x.com, not at an instance that might disappear.

Serving the feed

Most feed readers only need a URL. The simplest setup is a cron job that writes the file into a static folder your web server already serves:

# every hour: rebuild the feed into a public folder
0 * * * * cd /opt/feeds && CHATTERAPI_KEY=... python x_rss.py user levelsio > /var/www/feeds/levelsio.xml

You can also send the same JSON straight to Slack, Discord or n8n, which usually don't need RSS at all. If your reader mixed both platforms, we built the same kind of replacement for subreddits in Reddit RSS feeds are ending. Try the account endpoint first in the free X timeline scraper, or the search endpoint in X tweet search.

What polling a Twitter RSS feed costs

Say you track 10 accounts that each post about 5 times a day, and you poll every account once an hour for 30 days. Prices as listed on Oct 14, 2026:

RouteHow it billsMonthly cost
RSS-Bridge Twitter V2 with your X API token$0.005 per post returned, 10 posts per poll, repeats within a UTC day freeAbout 4,500 posts, about $22.50
ChatterAPI x.tweets3 credits per call7,200 calls, 21,600 credits, $19 (Starter, 25,000 credits)
ChatterAPI x.tweets, polled every 30 minutes3 credits per call43,200 credits, $49 (Growth)

The X estimate assumes the first poll each day returns the 10 latest posts and every later poll adds only the new ones, because X deduplicates charges within a UTC day. On the official API that makes polling frequency close to free. ChatterAPI charges per call. If you need feeds refreshed every few minutes, the official API can come out cheaper, and at hourly polling the two cost about the same. ChatterAPI's case rests on everything around the price: one key with no X developer app, structured JSON, and Reddit on the same balance. For bigger jobs, our Twitter API cost calculator runs the numbers.

If you want bulk archives rather than feeds, see searching tweets by date and the guide to scraping Twitter and Reddit together. The snscrape alternative page and our comparison with other third-party X APIs cover the other tools Nitter users tend to try next.

Try it

Pick the feed you lost when your Nitter instance went down and rebuild it with the script above. Sign up with Google for 100 free credits, which covers about 33 polls and needs no card. Plans start at $19 a month for 25,000 credits.

FAQ

Is Nitter still working in 2026?
Mostly not. X Corp. sent cease and desist letters on August 24, 2026 and again on September 8, and public instances went down. The zedeus/nitter repository is archived on GitHub, and on October 10 the maintainer wrote on nitter.net that the project has no legal counsel. Some self-hosted instances still run.
What is the best Nitter RSS alternative?
For scripts and feed readers, generate the feed yourself from an API. Poll an account timeline or a search through the official X API or a hosted API, then write RSS 2.0 items with the tweet link as the guid. The script in this post does that in about 45 lines of Python.
Can I self-host Nitter?
Technically yes. Nitter needs Nim, Redis or Valkey, a nitter.conf file and a sessions.jsonl file of cookies from logged-in X accounts, created with the project's browser login script. Those accounts can be suspended, because X's developer rules prohibit scraping and browser automation.
How do I get an RSS feed for a Twitter account?
X doesn't offer RSS. You can use RSS-Bridge's Twitter V2 bridge with your own X API Bearer token, which bills pay-per-use, or poll a hosted API such as ChatterAPI's x.tweets endpoint and convert the JSON into RSS on a schedule.
Does RSS-Bridge still work for Twitter?
RSS-Bridge is actively maintained, but its Twitter options vary. The Twitter V2 bridge needs your own X API Bearer token, the classic Twitter bridge requests guest tokens, and the Farside Nitter bridge depends on public Nitter instances. Test the one you pick before relying on it.

More from the blog

Make your first call on 100 free credits.

Sign up with Google, no card. One key for Reddit and X, over REST or MCP.