github deroverda/twitter-to-nitter v1.6.0
v1.6.0 - Preferred instance popup; watchdog and tri-state detection fixes

latest releases: v1.7.3, v1.7.2, v1.7.1...
one month ago

This release adds a small toolbar popup for pinning a preferred instance, closes several fallback state-machine gaps found in a multi-model external audit, and cleans up CI and documentation drift.

New: preferred instance. Click the toolbar icon on a Nitter page to keep landing there on future redirects. Useful because per-instance display settings and capabilities (RSS, NSFW support) don't follow you across an automatic switch, and the automatic ranking has no way to know about either. Only biases a fresh redirect; normal fallback still applies if the preferred instance goes down, and the preference stays set for whenever it recovers.

Fallback and detection fixes:

  • A watchdog timeout no longer conflates a slow-but-alive instance with a dead one - once the first response byte arrives, the timeout extends instead of yanking the user away mid-load.
  • Page-failure detection is now tri-state (pass/confirmed-fail/unrecognized) instead of binary. An unrecognized page template still falls back for that navigation but never demotes the instance fleet-wide, so a real Nitter template change can't get every instance judged broken at once. A tripwire logs a warning if that happens anyway.
  • Total fallback time for one navigation is now bounded by elapsed time (~45s), not just instance count, so a large fleet can't leave a navigation hanging for minutes.
  • The status API's size guard now holds even for a chunked-encoding response with no Content-Length header.
  • A link clicked from inside an already-loaded Nitter page is now tracked for fallback too - previously only the initial X/Twitter redirect was watched.
  • Fixes from a 5-model external audit: seed instances are filtered against actual manifest permissions at runtime, domain casing/trailing dots from the status API are normalized, ranking recomputes correctly even when a status refresh fails, onErrorOccurred only marks an instance broken on genuine network failures, the redirect-loop breaker no longer false-trips on rapid legitimate clicks, a startup race that could drop a freshly-learned health entry is fixed, HTTP 408 is now a hard failure, /i/lists paths are allowed through, and the terminal "every instance failed" page now shows instead of silently stranding the user.

xcancel.com dropped from the seed list and permissions - confirmed suspended by the service operator and no longer tracked by the health API.

CI: fixed a Node 20 pin that GitHub's runners were silently substituting for Node 24 (Node 20 has been end-of-life since March 2026), fixed the test script's use of a Node 21+ glob feature that never worked on Node 20, bumped actions/checkout and actions/setup-node to current versions, and added Dependabot for github-actions and npm.

Don't miss a new twitter-to-nitter release

NewReleases is sending notifications on new releases.