mrkeyoor.com_
Tue 15 Sept 20:21 UTC
Open Source6 min read

XCancel Shuts Again After Nitter's Eight-Day Reprieve

The public X front end is offline after an undisclosed legal turn. Its production setup shows why available source code cannot guarantee public access.

Eight days after Nitter said the project would continue following legal advice, XCancel shut down again. At 04:30 UTC on September 15, the Hacker News discussion had reached 587 points and 813 comments. The response is striking because XCancel's page offered only one new fact: the service was offline again. For a community-run front end, that one-line status drew more comments than points.

XCancel's page now says the service is suspended again because of a new development in ongoing legal proceedings. It does not identify that development and says no more details can be shared. The only action left on the page sends visitors to X, the site XCancel had allowed them to read through a different interface.

An eight-day return

The sequence began on August 24, when X Corp sent cease-and-desist letters demanding permanent removal of Nitter instances and the project's repository, according to the notice in Nitter's README. The next day, project owner Zed wrote in issue 1442 that the team was waiting for legal advice and expected public instances to stay down for the foreseeable future.

On September 6, Zed changed the README in a commit titled Update README - Nitter lives. The new note said the project would continue following legal advice and promised more detail later. The same patch restored project badges, expanded the feature list and added a legal contact for inquiries and DMCA requests.

XCancel subsequently returned. By September 14, its current notice had been submitted to Hacker News. The word again on the shutdown page confirms that this is another suspension, while the reference to ongoing proceedings ties it to a continuing dispute. Nothing on the page says whether a court acted, another letter arrived or counsel revised earlier advice. The notice does not support any of those explanations.

The proxy did more than change a URL

Nitter describes itself as an AGPLv3-licensed alternative front end for X focused on privacy and speed. According to the project README, a visitor's requests go through the Nitter backend, so the browser does not contact X directly. Nitter requires no JavaScript for reading, removes ads and fetches data through X's unofficial API without a developer account.

That design changes what X sees. X receives traffic from the Nitter server rather than a direct request carrying the reader's IP address and browser fingerprint. In the project's own measurements, a representative profile page was 60 KB through Nitter versus 784 KB through X, and the service was about 15 times lighter on average. Those figures are not an independent benchmark, but they explain why people used it for an occasional X link instead of creating an account.

XCancel also needed work beyond the upstream Nitter repository. A separate set of production customizations published for xcancel.com puts an OpenResty layer in front of Nitter, caches HTML and sends image or video proxying through Nginx. Its maintainer reports that HTML caching cut CPU use by about 60 percent and direct media proxying cut another 30 percent, for a combined reduction of roughly 90 percent on the production service.

The same configuration runs five Nitter replicas behind an Nginx upstream because Nitter is single-threaded. Popular pages can be returned from cache, while signed media requests are checked and passed to X's CDN. In operational terms, XCancel was an active fetching and caching system, not a static copy of public posts. The published configuration makes that distinction visible in code.

The cache rules also show where the public operator makes policy choices. HTML pages use a 30-minute cache that bypasses visitors who set preference cookies. Static assets and media get a two-hour cache, while valid media responses can be cached in the browser for a week. Video manifests still fall back to Nitter because they need rewriting. Each rule reduces repeat work, and each remains coupled to responses from X or its CDN. The configuration repository is the source for those timings.

Public uptime sits outside the license

Nitter's source has not disappeared. The GitHub repository remains accessible under the AGPLv3, along with its build instructions and history. GitHub currently marks it as archived, however, making the upstream repository read-only. Its most recent push shown by GitHub is dated September 7, one day after the continuation commit.

A local deployment is also a small service stack. Nitter's instructions call for Nim, libsass and Redis or Valkey, plus a reverse proxy for a normal installation. The Docker route still needs a configuration file and a separate cache service. The README even documents a mount failure that occurs when Docker silently creates a directory where nitter.conf should have been.

The same documentation says Nitter prints some errors to standard output because it has no full logging system. Operators using systemd or Docker are told to inspect those streams directly. Combined with the external cache, reverse proxy and multiple worker processes used by XCancel, that leaves ordinary service maintenance in the host's hands even when every software component can be downloaded. The Nitter logging notes describe that boundary plainly.

Those installation instructions preserve the ability to study and deploy the software. They do not provide a replacement for a busy shared endpoint that someone has to maintain. XCancel's scaling repository adds load balancing and cache policy, with HMAC checks on media requests. A fork can preserve the implementation; it cannot make an upstream platform serve that implementation or make an operator accept a legal demand.

For other privacy front ends, XCancel's published deployment exposes the part a source license cannot preserve. The code can remain available after one host disappears. Public access still depends on an operator willing to maintain upstream access and a domain that users trust. XCancel concentrated those duties in one convenient endpoint, and the legal notice removed that endpoint in one step.

The legal record has a hole

X's current terms of service prohibit scraping without express written permission and forbid attempts to work around technical limits. Nitter's README openly says it uses an unofficial API. Put together, the documents show the technical and contractual disagreement, but they do not establish how a court would decide it. A platform's terms are not themselves a judgment.

The August cease-and-desist demand is likewise a demand, not proof that Nitter or XCancel violated a law. The Nitter maintainer has published two positions: instances were expected to remain down while advice was sought, then the project would continue following that advice. XCancel's new notice adds a changed outcome without publishing the reasoning behind it.

That gap rules out confident claims about who prevailed or what precedent the shutdown might create. There is no case number, jurisdiction, order or new letter linked from XCancel's notice. Until one appears, the defensible report is narrower: XCancel is unavailable and attributes the decision to legal proceedings. The broader Nitter code remains online in an archived repository.

The 813-comment Hacker News thread is useful as a measure of community interest. It is not independent confirmation of the legal claims. Commenters debate scraping, copyright and the reliance of public bodies on X, but their explanations for the suspension are speculation unless the operator, X Corp or a court supplies a document.

Two status pages now matter

A filing or fuller operator statement from XCancel would fill the largest reporting gap. A second signal would be a change at Nitter: the repository could be unarchived and receive work after its September 7 push. The repository and XCancel notice currently point in different directions: the code can be read, and the public service cannot be used.

Until either record changes, replacing x.com with xcancel.com leads to a legal status page and then back to X. The September return showed that a public instance can resume after counsel weighs in. Its second shutdown shows the harder limit: source availability cannot settle the conditions under which somebody is willing and able to run that source for everyone else.

We reviewed this

  1. browser — our honest review
  2. requests — our honest review
  3. valkey — our honest review

Sources

  1. XCancel service is suspended
  2. Nitter repository and README
  3. Nitter issue 1442: All public nitter instances do not work
  4. Nitter commit: Update README - Nitter lives
  5. Nitter public instance customizations used by XCancel
  6. X Terms of Service
  7. Hacker News: XCancel service is suspended until further notice