2023-07-11 10:47:33 +09:00
|
|
|
# Nitter (OpenBSD)
|
2019-10-19 19:29:13 +09:00
|
|
|
|
2021-01-23 06:01:27 +09:00
|
|
|
[![License](https://img.shields.io/github/license/zedeus/nitter?style=flat)](#license)
|
2021-01-23 05:58:54 +09:00
|
|
|
|
2021-12-27 12:43:27 +09: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 10:17:21 +09: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 08:52:42 +09:00
|
|
|
- Uses Twitter's unofficial API (no rate limits or developer account required)
|
2020-07-04 22:49:39 +09:00
|
|
|
- Lightweight (for [@nim_lang](https://nitter.net/nim_lang), 60KB vs 784KB from twitter.com)
|
2019-12-25 11:28:05 +09:00
|
|
|
- RSS feeds
|
2019-10-23 19:16:21 +09:00
|
|
|
- Themes
|
2019-10-21 13:17:08 +09:00
|
|
|
- Mobile support (responsive design)
|
2019-12-25 11:28:05 +09:00
|
|
|
- AGPLv3 licensed, no proprietary instances permitted
|
2019-06-21 10:17:21 +09:00
|
|
|
|
2020-07-04 22:49:39 +09:00
|
|
|
Liberapay: https://liberapay.com/zedeus \
|
|
|
|
Patreon: https://patreon.com/nitter \
|
|
|
|
BTC: bc1qp7q4qz0fgfvftm5hwz3vy284nue6jedt44kxya \
|
|
|
|
ETH: 0x66d84bc3fd031b62857ad18c62f1ba072b011925 \
|
|
|
|
LTC: ltc1qhsz5nxw6jw9rdtw9qssjeq2h8hqk2f85rdgpkr \
|
|
|
|
XMR: 42hKayRoEAw4D6G6t8mQHPJHQcXqofjFuVfavqKeNMNUZfeJLJAcNU19i1bGdDvcdN6romiSscWGWJCczFLe9RFhM3d1zpL
|
|
|
|
|
|
|
|
## Roadmap
|
2019-09-24 08:16:24 +09:00
|
|
|
|
|
|
|
- Embeds
|
2020-07-04 22:49:39 +09:00
|
|
|
- Account system with timeline support
|
2020-06-01 20:36:10 +09:00
|
|
|
- Archiving tweets/profiles
|
2020-07-04 22:49:39 +09:00
|
|
|
- Developer API
|
2019-09-24 08:16:24 +09:00
|
|
|
|
|
|
|
## Resources
|
|
|
|
|
2022-06-09 16:34:06 +09:00
|
|
|
The wiki contains
|
2021-02-17 11:03:08 +09:00
|
|
|
[a list of instances](https://github.com/zedeus/nitter/wiki/Instances) and
|
2020-07-04 22:49:39 +09:00
|
|
|
[browser extensions](https://github.com/zedeus/nitter/wiki/Extensions)
|
2019-09-24 08:16:24 +09:00
|
|
|
maintained by the community.
|
|
|
|
|
|
|
|
## Why?
|
|
|
|
|
2021-12-27 12:43:27 +09: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 20:36:10 +09:00
|
|
|
for users to control whether their data gets sent to advertisers.
|
2019-09-24 08:16:24 +09: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 22:49:39 +09:00
|
|
|
Twitter, and in most cases serves pages faster (eg. timelines load 2-4x faster).
|
2019-09-24 08:16:24 +09: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 10:17:21 +09:00
|
|
|
## Installation
|
2019-06-24 08:34:30 +09:00
|
|
|
|
2021-12-27 07:33:11 +09:00
|
|
|
### Dependencies
|
2022-06-09 16:34:06 +09:00
|
|
|
|
|
|
|
- libpcre
|
|
|
|
- libsass
|
|
|
|
- redis
|
2021-12-27 07:33:11 +09:00
|
|
|
|
2019-10-21 12:19:00 +09: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 18:23:21 +09:00
|
|
|
|
2020-06-01 20:36:10 +09: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-10 07:14:01 +09:00
|
|
|
along with the scss and md files.
|
2019-08-09 01:34:49 +09:00
|
|
|
|
2019-06-21 10:17:21 +09:00
|
|
|
```bash
|
2019-08-09 01:34:49 +09:00
|
|
|
# useradd -m nitter
|
|
|
|
# su nitter
|
|
|
|
$ git clone https://github.com/zedeus/nitter
|
|
|
|
$ cd nitter
|
2019-10-21 12:19:00 +09:00
|
|
|
$ nimble build -d:release
|
2019-09-13 18:03:53 +09:00
|
|
|
$ nimble scss
|
2022-01-10 07:14:01 +09:00
|
|
|
$ nimble md
|
2023-07-11 10:47:33 +09:00
|
|
|
$ mkdir /etc/nitter
|
|
|
|
$ cp nitter.example.conf /etc/nitter/nitter.conf
|
|
|
|
$ cp nitter /usr/local/bin
|
2019-06-21 10:17:21 +09:00
|
|
|
```
|
|
|
|
|
2020-06-01 20:36:10 +09:00
|
|
|
Set your hostname, port, HMAC key, https (must be correct for cookies), and
|
2020-06-03 02:56:16 +09:00
|
|
|
Redis info in `nitter.conf`. To run Redis, either run
|
2023-07-11 10:47:33 +09:00
|
|
|
`redis-server --daemonize yes`, or `rcctl enable redis && rcctl start redis` (or
|
2020-06-03 02:56:16 +09:00
|
|
|
redis-server depending on the distro). Run Nitter by executing `./nitter` or
|
2023-07-11 10:47:33 +09:00
|
|
|
using the rc service below. You should run Nitter behind a reverse proxy
|
2021-12-27 12:12:06 +09: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 10:17:21 +09:00
|
|
|
|
2021-12-27 10:23:24 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
### rc.d
|
2023-02-27 02:24:31 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
To run Nitter via rc you can use this service file:
|
2022-01-01 04:34:42 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
```sh
|
|
|
|
#!/bin/ksh
|
2020-10-01 12:41:47 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
daemon="/usr/local/bin/nitter"
|
2022-06-09 16:34:06 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
. /etc/rc.d/rc.subr
|
2023-02-27 02:24:31 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
rc_bg=YES
|
2022-06-09 16:34:06 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
rc_cmd $1
|
2020-10-01 12:41:47 +09:00
|
|
|
```
|
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
Then enable and run the service:
|
|
|
|
`rcctl enable nitter && rcctl start nitter`
|
2022-06-09 16:34:06 +09:00
|
|
|
|
2023-07-11 10:47:33 +09:00
|
|
|
### relayd
|
2019-10-18 07:10:40 +09:00
|
|
|
```
|
2023-07-11 10:47:33 +09:00
|
|
|
# $OpenBSD: relayd.conf,v 1.5 2018/05/06 20:56:55 benno Exp $
|
|
|
|
#
|
|
|
|
# Macros
|
|
|
|
#
|
|
|
|
relayd_addr="0.0.0.0"
|
|
|
|
insrv3_addr="192.168.10.103"
|
|
|
|
|
|
|
|
table <twitter> { $insrv3_addr }
|
|
|
|
|
|
|
|
http protocol reverse {
|
|
|
|
tcp { nodelay, sack }
|
|
|
|
tls ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
|
|
|
|
tls keypair "owacon.moe"
|
|
|
|
|
|
|
|
match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
|
|
|
|
match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
|
|
|
|
|
|
|
|
match response header set "X-Frame-Options" value "deny"
|
|
|
|
match response header set "X-XSS-Protection" value "1; mode=block"
|
|
|
|
match response header set "X-Content-Type-Options" value "nosniff"
|
|
|
|
match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubDomains; preload"
|
|
|
|
match response header set "Permissions-Policy" value "accelerometer=()"
|
|
|
|
match response header set "Cache-Control" value "max-age=86400"
|
|
|
|
|
|
|
|
pass request quick header "Host" value "twitter.owacon.moe" forward to <twitter>
|
|
|
|
}
|
|
|
|
|
|
|
|
relay www_tls {
|
|
|
|
listen on $relayd_addr port 443 tls
|
|
|
|
protocol reverse
|
|
|
|
|
|
|
|
forward to <twitter> port 8089 check tcp
|
|
|
|
}
|
|
|
|
|
|
|
|
relay www_http {
|
|
|
|
listen on $relayd_addr port 80
|
|
|
|
protocol reverse
|
|
|
|
|
|
|
|
forward to <twitter> port 8089 check tcp
|
|
|
|
}
|
2019-08-09 01:34:49 +09:00
|
|
|
```
|
|
|
|
|
2019-09-13 18:03:53 +09:00
|
|
|
## Contact
|
|
|
|
|
2021-06-24 06:15:18 +09:00
|
|
|
Feel free to join our [Matrix channel](https://matrix.to/#/#nitter:matrix.org).
|
2019-09-24 08:16:24 +09:00
|
|
|
You can email me at zedeus@pm.me if you wish to contact me personally.
|