2021-01-08 00:52:42 +01:00
# Nitter
2019-10-19 12:29:13 +02:00
2021-01-22 22:01:27 +01:00
[![Test Matrix ](https://github.com/zedeus/nitter/workflows/CI/CD/badge.svg )](https://github.com/zedeus/nitter/actions?query=workflow%3ACI/CD)
[![License ](https://img.shields.io/github/license/zedeus/nitter?style=flat )](#license)
2021-01-22 21:58:54 +01:00
2021-12-27 04:43:27 +01:00
A free and open source alternative Twitter front-end focused on privacy and
performance. \
Inspired by the [Invidious ](https://github.com/iv-org/invidious )
project.
2019-06-21 03:17:21 +02:00
- No JavaScript or ads
- All requests go through the backend, client never talks to Twitter
- Prevents Twitter from tracking your IP or JavaScript fingerprint
2021-01-08 00:52:42 +01:00
- Uses Twitter's unofficial API (no rate limits or developer account required)
2020-07-04 15:49:39 +02:00
- Lightweight (for [@nim_lang ](https://nitter.net/nim_lang ), 60KB vs 784KB from twitter.com)
2019-12-25 03:28:05 +01:00
- RSS feeds
2019-10-23 12:16:21 +02:00
- Themes
2019-10-21 06:17:08 +02:00
- Mobile support (responsive design)
2019-12-25 03:28:05 +01:00
- AGPLv3 licensed, no proprietary instances permitted
2019-06-21 03:17:21 +02:00
2020-07-04 15:49:39 +02:00
Liberapay: https://liberapay.com/zedeus \
Patreon: https://patreon.com/nitter \
BTC: bc1qp7q4qz0fgfvftm5hwz3vy284nue6jedt44kxya \
ETH: 0x66d84bc3fd031b62857ad18c62f1ba072b011925 \
LTC: ltc1qhsz5nxw6jw9rdtw9qssjeq2h8hqk2f85rdgpkr \
XMR: 42hKayRoEAw4D6G6t8mQHPJHQcXqofjFuVfavqKeNMNUZfeJLJAcNU19i1bGdDvcdN6romiSscWGWJCczFLe9RFhM3d1zpL
## Roadmap
2019-09-24 01:16:24 +02:00
- Embeds
2020-07-04 15:49:39 +02:00
- Account system with timeline support
2020-06-01 13:36:10 +02:00
- Archiving tweets/profiles
2020-07-04 15:49:39 +02:00
- Developer API
2019-09-24 01:16:24 +02:00
## Resources
2021-02-17 03:03:08 +01:00
The wiki contains
[a list of instances ](https://github.com/zedeus/nitter/wiki/Instances ) and
2020-07-04 15:49:39 +02:00
[browser extensions ](https://github.com/zedeus/nitter/wiki/Extensions )
2019-09-24 01:16:24 +02:00
maintained by the community.
## Why?
2021-12-27 04:43:27 +01:00
It's impossible to use Twitter without JavaScript enabled. For privacy-minded
folks, preventing JavaScript analytics and IP-based tracking is important, but
apart from using a VPN and uBlock/uMatrix, it's impossible. Despite being behind
a VPN and using heavy-duty adblockers, you can get accurately tracked with your
[browser's fingerprint ](https://restoreprivacy.com/browser-fingerprinting/ ),
[no JavaScript required ](https://noscriptfingerprint.com/ ). This all became
particularly important after Twitter [removed the
ability](https://www.eff.org/deeplinks/2020/04/twitter-removes-privacy-option-and-shows-why-we-need-strong-privacy-laws)
2020-06-01 13:36:10 +02:00
for users to control whether their data gets sent to advertisers.
2019-09-24 01:16:24 +02:00
Using an instance of Nitter (hosted on a VPS for example), you can browse
Twitter without JavaScript while retaining your privacy. In addition to
respecting your privacy, Nitter is on average around 15 times lighter than
2020-07-04 15:49:39 +02:00
Twitter, and in most cases serves pages faster (eg. timelines load 2-4x faster).
2019-09-24 01:16:24 +02:00
In the future a simple account system will be added that lets you follow Twitter
users, allowing you to have a clean chronological timeline without needing a
Twitter account.
## Screenshot
![nitter ](/screenshot.png )
2019-06-21 03:17:21 +02:00
## Installation
2019-06-24 01:34:30 +02:00
2021-12-26 23:33:11 +01:00
### Dependencies
* libpcre
* libsass
* redis
2019-10-21 05:19:00 +02:00
To compile Nitter you need a Nim installation, see
[nim-lang.org ](https://nim-lang.org/install.html ) for details. It is possible to
install it system-wide or in the user directory you create below.
2019-09-13 11:23:21 +02:00
2020-06-01 13:36:10 +02:00
To compile the scss files, you need to install `libsass` . On Ubuntu and Debian,
you can use `libsass-dev` .
Redis is required for caching and in the future for account info. It should be
available on most distros as `redis` or `redis-server` (Ubuntu/Debian).
Running it with the default config is fine, Nitter's default config is set to
use the default Redis port and localhost.
Here's how to create a `nitter` user, clone the repo, and build the project
2022-01-09 23:14:01 +01:00
along with the scss and md files.
2019-08-08 18:34:49 +02:00
2019-06-21 03:17:21 +02:00
```bash
2019-08-08 18:34:49 +02:00
# useradd -m nitter
# su nitter
$ git clone https://github.com/zedeus/nitter
$ cd nitter
2019-10-21 05:19:00 +02:00
$ nimble build -d:release
2019-09-13 11:03:53 +02:00
$ nimble scss
2022-01-09 23:14:01 +01:00
$ nimble md
2021-12-27 03:13:40 +01:00
$ cp nitter.example.conf nitter.conf
2019-06-21 03:17:21 +02:00
```
2020-06-01 13:36:10 +02:00
Set your hostname, port, HMAC key, https (must be correct for cookies), and
2020-06-02 19:56:16 +02:00
Redis info in `nitter.conf` . To run Redis, either run
`redis-server --daemonize yes` , or `systemctl enable --now redis` (or
redis-server depending on the distro). Run Nitter by executing `./nitter` or
using the systemd service below. You should run Nitter behind a reverse proxy
2021-12-27 04:12:06 +01:00
such as [Nginx ](https://github.com/zedeus/nitter/wiki/Nginx ) or
[Apache ](https://github.com/zedeus/nitter/wiki/Apache ) for security and
performance reasons.
2019-06-21 03:17:21 +02:00
2021-12-27 02:23:24 +01:00
### Docker
2021-12-31 20:34:42 +01:00
#### NOTE: For ARM64/ARM support, please use [unixfox's image](https://quay.io/repository/unixfox/nitter?tab=tags), more info [here](https://github.com/zedeus/nitter/issues/399#issuecomment-997263495)
2021-12-27 04:14:29 +01:00
To run Nitter with Docker, you'll need to install and run Redis separately
before you can run the container. See below for how to also run Redis using
Docker.
2020-10-01 05:41:47 +02:00
2019-10-18 00:10:40 +02:00
To build and run Nitter in Docker:
```bash
2019-10-21 06:17:08 +02:00
docker build -t nitter:latest .
2021-12-27 00:06:57 +01:00
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host nitter:latest
2019-10-21 06:17:08 +02:00
```
A prebuilt Docker image is provided as well:
```bash
2021-12-27 00:06:57 +01:00
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host zedeus/nitter:latest
2020-10-01 05:41:47 +02:00
```
2021-12-27 00:06:57 +01:00
Using docker-compose to run both Nitter and Redis as different containers:
2021-12-27 04:14:29 +01:00
Change `redisHost` from `localhost` to `redis` in `nitter.conf` , then run:
2020-10-01 05:41:47 +02:00
```bash
docker-compose up -d
2019-10-18 00:10:40 +02:00
```
2021-12-27 04:14:29 +01:00
Note the Docker commands expect a `nitter.conf` file in the directory you run
them.
2020-06-01 13:36:10 +02:00
2021-12-27 02:23:24 +01:00
### systemd
2019-09-13 11:03:53 +02:00
To run Nitter via systemd you can use this service file:
2019-08-08 18:34:49 +02:00
2020-11-17 12:38:51 +01:00
```ini
2019-08-08 18:34:49 +02:00
[Unit]
Description=Nitter (An alternative Twitter front-end)
After=syslog.target
After=network.target
[Service]
Type=simple
# set user 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
```
2019-09-13 11:03:53 +02:00
Then enable and run the service:
2019-08-08 18:34:49 +02:00
`systemctl enable --now nitter.service`
2021-12-27 02:23:24 +01:00
### Logging
2020-06-02 19:56:16 +02:00
Nitter currently prints some errors to stdout, and there is no real logging
implemented. If you're running Nitter with systemd, you can check stdout like
this: `journalctl -u nitter.service` (add `--follow` to see just the last 15
lines). If you're running the Docker image, you can do this:
2020-06-02 20:00:38 +02:00
`docker logs --follow *nitter container id*`
2020-06-02 19:56:16 +02:00
2019-09-13 11:03:53 +02:00
## Contact
2021-06-23 23:15:18 +02:00
Feel free to join our [Matrix channel ](https://matrix.to/#/#nitter:matrix.org ).
2019-09-24 01:16:24 +02:00
You can email me at zedeus@pm.me if you wish to contact me personally.