A privacy-focused Twitter front-end with chronological feeds and follow lists
Fork of the incredible Nitter
- Chronological Feed — Follow users and see their tweets in chronological order, not algorithmically sorted
- Multiple Follow Lists — Organize followed users into custom lists, each with its own feed
- Pinned Tweets — Pin tweets for quick reference
- No JavaScript or Ads — Clean, fast, privacy-respecting
- RSS Feeds — Subscribe to timelines via RSS
- Themes — Choose your preferred look
- Mobile Support — Responsive design works on all devices
- AGPLv3 Licensed — No proprietary instances permitted
Requirements: mise installed.
mise install # Install Nim and tools
mise exec -- nimble install -y # Install Nim dependencies
mise exec -- nimble build # Build the project
mise exec -- nim check src/nitter.nim # Typecheck after changesFor agents working in this environment, see AGENTS.md for detailed guidelines.
docker-compose up -dExposes Nitpick on http://localhost:7000.
Nitpick supports JSON responses via content negotiation. Send Accept: application/json to receive JSON instead of HTML.
# Get home feed as JSON
curl -H "Accept: application/json" http://localhost:8888/
# Get user profile as JSON
curl -H "Accept: application/json" http://localhost:8888/jack
# Get user replies as JSON
curl -H "Accept: application/json" http://localhost:8888/jack/with_replies
# Get user media as JSON
curl -H "Accept: application/json" http://localhost:8888/jack/media
# Search as JSON
curl -H "Accept: application/json" "http://localhost:8888/search?q=nitter"
# Get following lists as JSON
curl -H "Accept: application/json" http://localhost:8888/following
# Get user lists as JSON
curl -H "Accept: application/json" http://localhost:8888/jack/lists
# Get list profile as JSON
curl -H "Accept: application/json" http://localhost:8888/i/lists/123456
# Get list members as JSON
curl -H "Accept: application/json" http://localhost:8888/i/lists/123456/members
# Get single tweet as JSON
curl -H "Accept: application/json" http://localhost:8888/jack/status/1234567890
# Get pinned tweets as JSON
curl -H "Accept: application/json" http://localhost:8888/pinned
# Follow a user (JSON response)
curl -X POST -H "Accept: application/json" -d "username=jack" http://localhost:8888/follow
# Unfollow a user (JSON response)
curl -X POST -H "Accept: application/json" -d "username=jack" http://localhost:8888/unfollow
# Pin a tweet (JSON response)
curl -X POST -H "Accept: application/json" -d "tweetId=1234567890" http://localhost:8888/pin
# Unpin a tweet (JSON response)
curl -X POST -H "Accept: application/json" -d "tweetId=1234567890" http://localhost:8888/unpin
# Create a list (JSON response)
curl -X POST -H "Accept: application/json" -d "name=mylist" http://localhost:8888/lists/create
# Delete a list (JSON response)
curl -X POST -H "Accept: application/json" -d "name=mylist" http://localhost:8888/lists/delete
# Rename a list (JSON response)
curl -X POST -H "Accept: application/json" -d "old_name=oldlist&new_name=newlist" http://localhost:8888/lists/renameSuccessful JSON responses include the requested data:
{
"username": "jack",
"lists": ["default", "tech", "news"]
}Action responses include success status:
{
"success": true,
"action": "follow",
"username": "jack",
"list": "default"
}Error responses include error details:
{
"error": {
"code": "NOT_FOUND",
"message": "Tweet not found"
}
}