# Nitter: Privacy-Focused Alternative Twitter Front-End Written in Nim

> Nitter is an archived open-source Twitter front-end written in Nim that routes all requests through its own backend, serving pages without JavaScript and with no connection between the viewer's browser and Twitter's servers. It requires Redis for caching and is archived on GitHub, though the README states the project will continue following legal advice after a cease and desist from X Corp. in August 2026.

**zedeus/nitter** — Alternative Twitter front-end. It's impossible to use Twitter without JavaScript enabled, and as of 2024 you need to sign up.

- Repository: https://github.com/zedeus/nitter
- Website: https://nitter.net
- Stars: 14,486 · Forks: 1,366
- Language: Nim
- License: AGPL-3.0
- Published: 2026-08-04 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/zedeus-nitter

## The Privacy Problem Nitter Was Built to Solve

Twitter requires JavaScript to load any content. As of 2024 it also requires account sign-up for browsing. For users who want to read tweets without JavaScript execution, neither condition is negotiable on the platform itself. The privacy concern goes beyond just cookies: browser fingerprinting does not require JavaScript for some techniques and can be used to track users even through a VPN. The README links to research on no-JavaScript fingerprinting to document this threat.

After Twitter removed user controls over data sharing with advertisers in 2020, documented by the EFF and referenced in the README, the case for a privacy-preserving proxy layer became concrete. Nitter addresses this by acting as an intermediary server. All requests for Twitter content originate from the Nitter instance's IP address. The viewer's browser contacts only the Nitter server, never Twitter directly. Twitter receives no JavaScript execution data, no viewer IP address, and no browser fingerprint from a Nitter request.

The README reports two additional practical benefits beyond privacy: the Nitter front-end for a typical profile page is approximately 60 KB compared to 784 KB from Twitter's own front-end, and timeline loading is described as 2 to 4 times faster in most cases.

## How Nitter Proxies Twitter Without a Developer Account

Nitter uses Twitter's unofficial API, which does not require a developer account or API keys. The README lists this as a feature. The practical implication is that Nitter operates without agreeing to Twitter's official developer terms, which makes it cheaper to deploy but also structurally fragile: unofficial endpoints change without notice, and individual Nitter instances have historically gone offline in waves when Twitter tightened API access or began requiring guest authentication tokens.

The backend is written in Nim, a compiled systems programming language. The choice keeps the binary small and the runtime dependencies minimal. At the application level, Nitter compiles SCSS to CSS with libsass, handles route matching with libpcre, and uses Redis for caching API responses and, in a future account system, session data.

On August 24, 2026, X Corp. sent cease and desist letters to Nitter instance operators and to the project repository, demanding permanent takedown. The README's opening note describes this event and includes an update: following legal advice, the project will continue, with more details to be announced. The repository remains archived on GitHub as of the time of writing.

## Building Nitter From Source: Dependencies and Compilation Steps

Installing from source requires a Nim compiler, libsass for SCSS compilation, libpcre for regular expression matching, and Redis or Valkey for caching. The README specifically recommends using Valkey because Redis changed its licence in 2024 from an open-source model to a proprietary one. Valkey is a community-maintained open-source fork and should be available as `redis` or `redis-server` on Ubuntu and Debian, or `valkey` or `valkey-server` depending on the distribution.

The README gives the complete build sequence:

```bash
# useradd -m nitter
# su nitter
$ git clone https://github.com/zedeus/nitter
$ cd nitter
$ nimble -l build -d:danger --mm:refc
$ nimble -l scss
$ nimble -l md
$ cp nitter.example.conf nitter.conf
```

After the build completes, edit `nitter.conf` to set the hostname, port, HMAC key, HTTPS setting (which the README says must be correct for cookies), and the Redis connection details. Start Redis with `redis-server --daemonize yes` or `systemctl enable --now redis` before starting Nitter. The README recommends placing Nitter behind a reverse proxy such as Nginx or Apache for security and performance; configuration guides for both are linked from the project wiki.

A systemd unit file is provided in the README. It sets `Restart=always` with a `RestartSec=15` delay and references the nitter user's home directory for the working directory and executable path.

## Docker and Docker Compose Deployment

Nitter publishes a prebuilt Docker image at `zedeus/nitter:latest`. The README notes the image is multi-arch and runs natively on both `amd64` and `arm64` hardware. Deploying with the prebuilt image requires creating a `nitter.conf` file on the host before running any Docker command; if the file does not exist, Docker silently creates a directory at that path instead, causing the container to fail with a "not a directory" error.

To run with the prebuilt image:

```bash
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host zedeus/nitter:latest
```

The `compose.yml` file in the repository defines two services: `nitter` listening on port 8080 (bound to 127.0.0.1 for use behind a reverse proxy) and `nitter-redis` using the `redis:6-alpine` image. The Redis service is configured with 60-second persistence snapshots. Both containers run as non-root users with `read_only: true` filesystem and `cap_drop: ALL` capability restrictions. To start both services:

```bash
docker-compose up -d
```

When using Docker Compose, the Redis host in `nitter.conf` must be changed from `localhost` to `nitter-redis` to match the service name. The `compose.yml` also mounts `sessions.jsonl` into the Nitter container, which stores guest authentication session data; the README's Docker section includes instructions for obtaining these sessions using a Python script in the repository.

## What Nitter Cannot Do: Account Features, Posting, and Timeline Sync

Nitter is a read-only front-end. Posting tweets, replying, liking, retweeting, following users, and sending direct messages are outside its scope and not planned features in the README. An account system that would allow following Twitter users and displaying a chronological timeline is listed on the roadmap but was not completed before archiving.

RSS feeds are technically supported per the feature list, but the README notes they are often disabled on public instances due to abuse. Operators of self-hosted instances can enable them in the configuration, but public instances may not have this active.

The community-maintained instance list and browser extension directory are hosted on the project wiki rather than in the repository itself. The README points there for finding operational instances. Instance availability fluctuates with changes to Twitter's unofficial API behavior, and there is no central monitoring service. Users relying on public instances should have a fallback plan, since breakages can affect all instances simultaneously when Twitter updates its internal API.

## Invidious as the Closest Comparable Project

The README explicitly cites Invidious as the inspiration for Nitter. Invidious is an alternative front-end for YouTube that operates on the same core principle: proxy all video and metadata requests through a self-hosted backend so that Google does not receive the viewer's IP address or browser fingerprint. Both projects are licensed under AGPL-3.0, which requires any party hosting a public instance to publish the source code of their running version.

The structural design is nearly identical: a self-hosted server written in a compiled language fetches content from the target platform's API, transforms it into a lightweight HTML page, and serves it to the viewer's browser without any direct browser-to-platform communication. The difference that matters operationally is API stability. YouTube provides an official, documented data API, and Invidious can use it; Nitter depends on Twitter's unofficial internal API, which changes without warning. This is the reason Nitter instances have a historically higher failure rate than Invidious instances.

The Invidious project serves as evidence that this architecture can sustain a multi-year community around it, but the Twitter API situation makes Nitter inherently less stable than its YouTube counterpart.

## Archived Status, the August 2026 Cease and Desist, and the AGPL-3.0 Licence

The repository carries GitHub's archived status. The last recorded push to the repository was on 2026-09-07. The README's opening note documents the August 24, 2026 cease and desist from X Corp., which demanded permanent takedown of both Nitter instances and the project repository. A follow-up update in the README states that following legal advice, the project will continue, with details to be announced.

The AGPL-3.0 licence has a specific implication for self-hosters: anyone who runs a publicly accessible Nitter instance must make the source code of their running version available. The README lists "no proprietary instances permitted" as a feature, which is enforced by the licence. Modifications to the codebase for a public deployment must be released under AGPL-3.0.

For private instances (running on a personal machine without public access), the AGPL-3.0 source disclosure requirement does not apply, since the licence's trigger is distribution or network service provision, not private use.

## Conclusion

Self-hosters who want to browse Twitter without JavaScript tracking and without giving Twitter their IP address can deploy Nitter using the Docker Compose configuration included in the repository. The repository is archived; the last push was on 2026-09-07. Anyone running a public instance is bound by the AGPL-3.0 licence to publish their source code. Users who need to post, reply, follow, or interact with Twitter content cannot do so through Nitter. The first step before deploying is to check the community instance list on the GitHub wiki to determine which public instances are currently functional, since unofficial API access breaks periodically.

## FAQ

### Is Nitter shut down?

The Nitter repository is archived on GitHub. The README notes that X Corp. sent cease and desist letters on August 24, 2026, but also includes an update stating that following legal advice the project will continue. Public instance availability varies and should be checked against the community instance list on the project wiki.

### What is Nitter and how does it work?

Nitter is a self-hosted alternative front-end for Twitter written in Nim. It proxies all requests to Twitter through its own backend, so the viewer's browser never contacts Twitter's servers directly. This prevents Twitter from receiving the viewer's IP address, browser fingerprint, or JavaScript execution data. Redis is required for caching.

### How do I install Nitter?

Nitter can be installed by cloning the repository and building from source with the Nim compiler, or by running the prebuilt Docker image at zedeus/nitter:latest. Both methods require Redis or Valkey for caching. The Docker Compose file in the repository starts both Nitter and Redis together with a single command.

### Is Nitter safe to use?

Nitter's privacy model is that the Nitter instance's IP address, not your own, is what Twitter sees. Whether the Nitter instance itself is trustworthy depends on who operates it. The README recommends self-hosting for maximum privacy control. Public instances could log traffic, so self-hosting on a VPS is the more cautious option.

## Sources

- [Official documentation](https://nitter.net)
- [Official README](https://github.com/zedeus/nitter#readme)
- [Project repository](https://github.com/zedeus/nitter)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/zedeus-nitter
