Shitter(Shitter)是 Nitter(Nitter)的分支,一个免费且开源的推特(Twitter)替代前端,专注隐私与性能,灵感来自 Invidious(Invidious)项目。它不使用 JavaScript 或广告,所有请求经由后端处理,客户端从不直接连接推特,可防止推特追踪 IP 或 JavaScript 指纹,并采用其非官方 API,无需开发者账号。
正文
Shitter——一个 Nitter 分支

Shitter 是一个免费开源的 Twitter 替代前端,专注于隐私和性能。其灵感来自 Invidious 项目。
- 无 JavaScript 和广告
- 所有请求都经过后端处理,客户端从不与 Twitter 直接通信
- 防止 Twitter 追踪你的 IP 或 JavaScript 指纹
- 使用 Twitter 的非官方 API(无需开发者账号)
- 轻量(感谢 @nim_lang,仅 60KB,而 twitter.com 为 784KB)
- RSS 订阅源
- 主题
- 移动端支持(响应式设计)
资源
维基包含:
- 公共实例列表
- Nitter 代码仓库的分支
- 可自动重定向到 Nitter 的浏览器扩展
- 指南:自托管一个 Nitter 实例
- 指南:如何获取会话令牌
- 指南:使用 Nitter 嵌入内容
贡献
本仓库不接受 Pull Request,但欢迎以补丁文件(Patch files)的形式贡献;补丁可以提交在 issue 中,合并和处理起来都更加方便。
为什么?
不启用 JavaScript 就无法使用 Twitter,而且从 2024 年起,你必须注册账号。对注重隐私的人来说,阻止 JavaScript 分析和基于 IP 的追踪非常重要,但除了使用 VPN 和 uBlock/uMatrix 之外,这几乎无法实现。即便已经使用 VPN 并开启了强力广告拦截器,你仍然可能通过浏览器指纹被准确追踪,而且无需 JavaScript。在 Twitter 取消了让用户控制自身数据是否发送给广告商的能力之后,这一点变得尤其重要。
使用 Nitter 实例(例如托管在 VPS 上),你可以在不启用 JavaScript 的情况下浏览 Twitter,同时保护自己的隐私。除了尊重隐私之外,Nitter 平均比 Twitter 轻量约 15 倍,而且在大多数情况下页面服务速度更快(例如时间线加载速度快 2–4 倍)。
截图

安装
Docker
Docker 镜像页面:https://hub.docker.com/r/mv12star/shitter
注意:发布的镜像是多架构的 —— mv12star/shitter:latest 可在 amd64/armv7/arm64 上原生运行。
要通过 Docker 运行 Nitter,你需要先单独安装并运行 Redis,然后才能运行容器。下文也介绍了如何用 Docker 一并运行 Redis。
首先创建配置文件。Docker 命令会将其挂载进容器,因此它必须事先存在于主机上。如果你克隆了仓库,执行:
cp nitter.example.conf nitter.conf
如果你在没有本地克隆的情况下使用预构建镜像,请下载 nitter.example.conf 并另存为 nitter.conf。
要在 Docker 中构建并运行 Nitter,执行:
docker build -t nitter:latest .
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host nitter:latest
同时也提供了预构建的 Docker 镜像:
docker run -v $(pwd)/nitter.conf:/src/nitter.conf -d --network host mv12star/shitter:latest
若要使用 docker-compose 把 Nitter 和 Redis 作为不同容器运行:在 nitter.conf 中将 redisHost 从 localhost 改为 nitter-redis,然后执行:
docker-compose up -d
请注意,Docker 命令会从你运行它们的目录挂载 nitter.conf(使用 docker-compose 时还包括 sessions.jsonl)。如果被挂载的文件不存在,Docker 会静默地在其位置创建一个目录,随后容器会启动失败并提示 not a directory: Are you trying to mount a directory onto a file。此时需删除该目录,并按上面的方式创建文件。
systemd
要通过 systemd 运行 Nitter,可以使用如下服务文件:
[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
然后启用并运行服务:systemctl enable --now nitter.service
日志
Nitter 目前会将部分错误输出到 stdout,并没有实现真正的日志功能。如果你用 systemd 运行 Nitter,可以这样查看 stdout:journalctl -u nitter.service(加上 --follow 可查看最后 15 行)。如果你运行的是 Docker 镜像,可以执行:docker logs --follow *nitter 容器 ID*
从源码构建
依赖项
- libpcre
- libsass
- redis/valkey
编译 Nitter 需要 Nim 环境,详见 nim-lang.org。你可以将其安装在系统全局,也可以安装在下面创建的用户目录中。
编译 scss 文件需要安装 libsass。在 Ubuntu 和 Debian 上,可以使用 libsass-dev。
缓存以及未来的账号信息都需要 Redis。截至 2024 年,Redis 已不再是开源软件,因此建议使用其分支 Valkey。大多数发行版中,它以 redis 或 redis-server(Ubuntu/Debian)的形式提供,或者作为 valkey/valkey-server 提供。使用默认配置运行即可,Nitter 的默认配置已设为使用默认端口和 localhost。
下面是如何创建 nitter 用户、克隆仓库,并构建项目及 scss 和 md 文件的步骤:
# useradd -m nitter
# su nitter
$ git clone 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
在 nitter.conf 中设置你的 hostname、端口、HMAC key、https(为使用 cookie,必须正确)以及 Redis 信息。要运行 Redis,可以执行 redis-server --daemonize yes,或者 systemctl enable --now redis(根据发行版也可能是 redis-server)。通过执行 ./nitter 或使用上面的 systemd 服务来运行 Nitter。出于安全和性能考虑,你应该将 Nitter 运行在反向代理(如 Nginx 或 Apache)之后。
Matrix 频道
欢迎加入我们的 Matrix 频道。
评论
讨论几乎被项目名 shitter 牵着走:一方嫌它粗俗、不专业,认为项目缺乏实质说明、只是靠名字上首页;另一方则把它读作对 X/Twitter 的蔑视或黑色幽默。此外还有人从平台归属出发主张停用 X,少量技术讨论则关注实例为何能反复重建,以及 Firefox 下的图片加载问题。
认为名字粗俗、不专业,且只是靠名字博关注
- 项目名被多名用户批评低俗、不专业,甚至被认为 HN 不该出现这种粗话,有人直接请求这类项目取个正常名字;还有人指出它连为何 fork、和原版有何不同都没解释,怀疑登上首页只是因为名字(较多人) > 连一句解释它为什么是 fork、和原版有什么不同都没有,能上首页大概只是因为名字(@dcre)
把名字理解为对 X/Twitter 的蔑视或玩梗
- 少数人把 shitter 当成对前 Twitter 的嘲讽:有人用 Xitter 读成 shitter 的发音梗开玩笑,也有人问是不是故意取这个名字来表达蔑视,或觉得它折射甚至抬高了 x.com 的文化定位,还有人顺便怀疑代码质量和是否专为灌水、引战优化(少数人) > 应该叫 Xitter,但发音要读成 shitter(@BLKNSLVR)
认为没必要再为 X/Twitter 生态造工具,应直接停用
- 有用户从平台归属出发,认为 X/Twitter 已被极右翼或法西斯支持者掌控,继续折腾替代前端没有意义,停用平台才是根本解法(少数人) > 别再用明显由法西斯主义者运营的平台,那样就不需要这类工具了(@ly0n)
好奇实例为何能不断重建,并指出当前可用实例反而更多
- 有人问这类前端为何不停冒出来又消失、却能随时重新拉起;回应认为它们易于部署和重建,现有可用实例数量不降反增,社区还在维护公开列表(少数人) > 现在可用的实例比之前下架行动前还要多(@grimgrin)
有价值的补充
- 有用户基于 Nitter 做了一个纯反向时间轴的科技圈时间线,除手动过滤账号外没有算法排序,所有推文都会出现(@SomeonesAccount)
- 有用户报告部分 shitter 实例在 Firefox 中无法加载头像或推文配图,Chrome 正常,疑似浏览器兼容性 bug,希望修复(@DavCreator)