2019-06-21 01:17:21 +00:00
|
|
|
# Nitter (WIP)
|
|
|
|
|
2019-10-19 10:29:13 +00:00
|
|
|
[![Build Status](https://travis-ci.org/zedeus/nitter.svg?branch=master)](https://travis-ci.org/zedeus/nitter)
|
|
|
|
|
2019-06-21 01:17:21 +00:00
|
|
|
A free and open source alternative Twitter front-end focused on privacy. \
|
|
|
|
Inspired by the [invidio.us](https://github.com/omarroth/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
|
|
|
|
- Unofficial API (no rate limits or developer account required)
|
2020-07-04 13:49:39 +00:00
|
|
|
- Lightweight (for [@nim_lang](https://nitter.net/nim_lang), 60KB vs 784KB from twitter.com)
|
2019-12-25 02:28:05 +00:00
|
|
|
- RSS feeds
|
2019-10-23 10:16:21 +00:00
|
|
|
- Themes
|
2019-10-21 04:17:08 +00:00
|
|
|
- Mobile support (responsive design)
|
2019-12-25 02:28:05 +00:00
|
|
|
- AGPLv3 licensed, no proprietary instances permitted
|
2019-06-21 01:17:21 +00:00
|
|
|
|
2020-07-04 13:49:39 +00:00
|
|
|
Liberapay: https://liberapay.com/zedeus \
|
|
|
|
Patreon: https://patreon.com/nitter \
|
|
|
|
BTC: bc1qp7q4qz0fgfvftm5hwz3vy284nue6jedt44kxya \
|
|
|
|
ETH: 0x66d84bc3fd031b62857ad18c62f1ba072b011925 \
|
|
|
|
LTC: ltc1qhsz5nxw6jw9rdtw9qssjeq2h8hqk2f85rdgpkr \
|
|
|
|
XMR: 42hKayRoEAw4D6G6t8mQHPJHQcXqofjFuVfavqKeNMNUZfeJLJAcNU19i1bGdDvcdN6romiSscWGWJCczFLe9RFhM3d1zpL
|
|
|
|
|
|
|
|
## Roadmap
|
2019-09-23 23:16:24 +00:00
|
|
|
|
|
|
|
- Embeds
|
2020-07-04 13:49:39 +00:00
|
|
|
- Account system with timeline support
|
2020-06-01 11:36:10 +00:00
|
|
|
- Archiving tweets/profiles
|
2020-07-04 13:49:39 +00:00
|
|
|
- Developer API
|
2019-09-23 23:16:24 +00:00
|
|
|
|
|
|
|
## Resources
|
|
|
|
|
|
|
|
The wiki contains a list of
|
2020-07-04 13:49:39 +00:00
|
|
|
[instances](https://github.com/zedeus/nitter/wiki/Instances) and
|
|
|
|
[browser extensions](https://github.com/zedeus/nitter/wiki/Extensions)
|
2019-09-23 23:16:24 +00:00
|
|
|
maintained by the community.
|
|
|
|
|
|
|
|
## Why?
|
|
|
|
|
|
|
|
It's basically impossible to use Twitter without JavaScript enabled. If you try,
|
|
|
|
you're redirected to the legacy mobile version which is awful both functionally
|
|
|
|
and aesthetically. For privacy-minded folks, preventing JavaScript analytics and
|
|
|
|
potential IP-based tracking is important, but apart from using the legacy mobile
|
2020-06-01 11:36:10 +00:00
|
|
|
version and a VPN, it's impossible. This is is especially relevant now that Twitter
|
2020-06-02 17:56:16 +00:00
|
|
|
[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 11:36:10 +00:00
|
|
|
for users to control whether their data gets sent to advertisers.
|
2019-09-23 23:16:24 +00: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 13:49:39 +00:00
|
|
|
Twitter, and in most cases serves pages faster (eg. timelines load 2-4x faster).
|
2019-09-23 23:16:24 +00: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 01:17:21 +00:00
|
|
|
## Installation
|
2019-06-23 23:34:30 +00:00
|
|
|
|
2019-10-21 03:19:00 +00: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 09:23:21 +00:00
|
|
|
|
2020-06-01 11:36:10 +00: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
|
|
|
|
along with the scss.
|
2019-08-08 16:34:49 +00:00
|
|
|
|
2019-06-21 01:17:21 +00:00
|
|
|
```bash
|
2019-08-08 16:34:49 +00:00
|
|
|
# useradd -m nitter
|
|
|
|
# su nitter
|
|
|
|
$ git clone https://github.com/zedeus/nitter
|
|
|
|
$ cd nitter
|
2019-10-21 03:19:00 +00:00
|
|
|
$ nimble build -d:release
|
2019-09-13 09:03:53 +00:00
|
|
|
$ nimble scss
|
2019-08-08 16:34:49 +00:00
|
|
|
$ mkdir ./tmp
|
2019-06-21 01:17:21 +00:00
|
|
|
```
|
|
|
|
|
2020-06-01 11:36:10 +00:00
|
|
|
Set your hostname, port, HMAC key, https (must be correct for cookies), and
|
2020-06-02 17:56:16 +00: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
|
|
|
|
such as [Nginx](https://github.com/zedeus/nitter/wiki/Nginx) or Apache for
|
|
|
|
security reasons.
|
2019-06-21 01:17:21 +00:00
|
|
|
|
2019-10-17 22:10:40 +00:00
|
|
|
To build and run Nitter in Docker:
|
|
|
|
```bash
|
2019-10-21 04:17:08 +00:00
|
|
|
docker build -t nitter:latest .
|
|
|
|
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d -p 8080:8080 nitter:latest
|
|
|
|
```
|
|
|
|
|
|
|
|
A prebuilt Docker image is provided as well:
|
|
|
|
```bash
|
|
|
|
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d -p 8080:8080 zedeus/nitter:latest
|
2019-10-17 22:10:40 +00:00
|
|
|
```
|
|
|
|
|
2020-06-01 11:36:10 +00:00
|
|
|
Note the Docker commands expect a `nitter.conf` file in the directory you run them.
|
|
|
|
|
2019-09-13 09:03:53 +00:00
|
|
|
To run Nitter via systemd you can use this service file:
|
2019-08-08 16:34:49 +00:00
|
|
|
|
|
|
|
```bash
|
|
|
|
[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 09:03:53 +00:00
|
|
|
Then enable and run the service:
|
2019-08-08 16:34:49 +00:00
|
|
|
`systemctl enable --now nitter.service`
|
|
|
|
|
2020-06-02 17:56:16 +00: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 18:00:38 +00:00
|
|
|
`docker logs --follow *nitter container id*`
|
2020-06-02 17:56:16 +00:00
|
|
|
|
2019-09-13 09:03:53 +00:00
|
|
|
## Contact
|
|
|
|
|
|
|
|
Feel free to join our Freenode IRC channel at #nitter, or our
|
|
|
|
[Matrix server](https://riot.im/app/#/room/#nitter:matrix.org).
|
2019-09-23 23:16:24 +00:00
|
|
|
You can email me at zedeus@pm.me if you wish to contact me personally.
|