A liberated and open origin substitute Twitter front-end focused on privacy and performance.
Inspired by the Invidious project.
- No JavaScript or ads
- All requests go through the backend, client never talks to Twitter
- Prevents Twitter from tracking your IP or JavaScript fingerprint
- Uses Twitter's unofficial API (no developer document required)
- Lightweight (thanks to @nim_lang, 60KB vs 784KB from twitter.com)
- RSS feeds
- Themes
- Mobile assistance (responsive design)
Resources
The wiki contains:
- List of community instances
- Forks of the Nitter code repository
- Browser extensions for auto-redirecting to Nitter
- Guide: Self-hosting a Nitter instance
- Guide: How to get meeting tokens
- Guide: Using Nitter embeds
Contributing
This repository does not obtain Pull Requests, but contributions are greeted in the form of Patch files, which can be submitted on an matter and are much additional convenient to merge and activity with.
Why?
It's unattainable to use Twitter without JavaScript enabled, and as of 2024 you need to sign up. For privacy-minded folks, preventing JavaScript analytics and IP-based tracking is important, but distinct from using a VPN and uBlock/uMatrix, it's impossible. Despite being rearward a VPN and using heavy-duty adblockers, you can get accurately tracked alongside your browser's fingerprint, no JavaScript required. This all became particularly crucial following Twitter removed the ability for users to authority whether their data gets sent to advertisers.
Using an case of Nitter (hosted on a VPS for example), you can browse Twitter without JavaScript during retaining your privacy. In supplement to respecting your privacy, Nitter is on average about 15 times lighter than Twitter, and in most cases serves pages faster (eg. timelines burden 2-4x faster).
Screenshot

Install
Docker
Page for the Docker image: https://hub.docker.com/r/mv12star/shitter
NOTE: The published depiction is multi-arch — mv12star/shitter:latest runs natively on amd64/armv7/arm64.
To run Nitter alongside Docker, you'll need to instal and run Redis separately before you can run the container. See below for how to additionally run Redis using Docker.
First create your config file. The Docker commands mount it into the container, so it have to be on the presenter beforehand. If you've cloned the repo:
cp nitter.example.conf nitter.conf
If you're using the prebuilt depiction without a local clone, download nitter.example.conf and preserve it as nitter.conf instead.
To build and run Nitter in Docker:
docker build -t nitter:latest . docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network presenter nitter:latest
A prebuilt Docker depiction is provided as well:
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network presenter mv12star/shitter:latest
Using docker-compose to run the two Nitter and Redis as distinct containers: Change redisHost from localhost to nitter-redis in nitter.conf, afterward run:
docker-compose up -d
Note the Docker commands mount nitter.conf (and sessions.jsonl for docker-compose) from the directory you run them in. If a mounted document doesn't exist, Docker silently creates a directory in its location and the receptacle fails with not a directory: Are you trying to mount a directory onto a file. Remove that directory and create the document as shown above.
systemd
To run Nitter via systemd you can use this assistance file:
[Unit] Description=Nitter (An substitute Twitter front-end) After=syslog.target After=network.target [Service] Type=simple # set person and group User=nitter Group=nitter # configure location WorkingDirectory=/home/nitter/nitter ExecStart=/home/nitter/nitter/nitter Restart=always RestartSec=15 [Install] WantedBy=multi-user.target
Then allow and run the service: systemctl allow --now nitter.service
Logging
Nitter currently prints several errors to stdout, and there is no genuine logging implemented. If you're operating Nitter alongside systemd, you can inspect stdout like this: journalctl -u nitter.service (add --follow to see fair the final 15 lines). If you're operating the Docker image, you can do this: docker logs --follow *nitter receptacle id*
Build from source
Dependencies
- libpcre
- libsass
- redis/valkey
To compile Nitter you need a Nim installation, see nim-lang.org for details. It is possible to instal it system-wide or in the person directory you create below.
To compile the scss files, you need to instal libsass. On Ubuntu and Debian, you can use libsass-dev.
Redis is required for caching and in the forthcoming for document info. As of 2024 Redis is no longer open source, so using the fork Valkey is recommended. It should be accessible on most distros as redis or redis-server (Ubuntu/Debian), or valkey/valkey-server. Running it alongside the default config is fine, Nitter's default config is set to use the default harbor and localhost.
Here's how to create a nitter user, copy the repo, and build the project along alongside the scss and md files.
# useradd -m nitter # su nitter $ git copy https://codeberg.org/shitter/shitter $ cd nitter $ nimble -l build -d:danger --mm:refc $ nimble -l scss $ nimble -l md $ cp nitter.example.conf nitter.conf
Set your hostname, port, HMAC key, https (must be accurate for cookies), and Redis info in nitter.conf. To run Redis, either run redis-server --daemonize yes, or systemctl allow --now redis (or redis-server depending on the distro). Run Nitter by executing ./nitter or using the systemd assistance below. You should run Nitter rearward a reverse proxy such as Nginx or Apache for safety and performance reasons.
Matrix channel
Feel liberated to associate our Matrix channel.
