Select the types of activity you want to include in your feed.
A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
Select the types of activity you want to include in your feed.
Make Docker the default README quick start
Lead with a cross-platform Docker run flow, switch primary pull examples to Docker Hub, and keep source installs as an alternative path so new users can get running with one command.
···2233Crosspost posts from Twitter/X to Bluesky with thread support, media handling, account mapping, and a web dashboard.
4455-## Quick Start (Easy Mode)
55+## Quick Start (Recommended: Docker)
66+77+Most people should use Docker. It is the simplest setup and includes full feature parity (backend API + scheduler + frontend dashboard + Chromium).
88+99+Prerequisite: Docker Desktop (Windows/macOS) or Docker Engine (Linux). On Windows, use Docker Desktop in Linux container mode.
1010+1111+### 1) Run the latest image
1212+1313+macOS/Linux (bash):
1414+1515+```bash
1616+docker run -d \
1717+ --name tweets-2-bsky \
1818+ -p 3000:3000 \
1919+ -v tweets2bsky_data:/app/data \
2020+ --restart unless-stopped \
2121+ j4ckxyz/tweets-2-bsky:latest
2222+```
2323+2424+Windows (PowerShell):
2525+2626+```powershell
2727+docker run -d --name tweets-2-bsky -p 3000:3000 -v tweets2bsky_data:/app/data --restart unless-stopped j4ckxyz/tweets-2-bsky:latest
2828+```
2929+3030+Open `http://localhost:3000`.
3131+3232+If port `3000` is already in use, change only the first port (example: `-p 3001:3000`).
3333+3434+### 2) Complete first-time setup
3535+3636+1. Register the first user (this user becomes admin).
3737+2. Add Twitter cookies in Settings.
3838+3. Add at least one mapping.
3939+4. Click `Run now`.
4040+4141+### 3) Useful Docker commands
4242+4343+```bash
4444+docker logs -f tweets-2-bsky
4545+docker exec -it tweets-2-bsky node dist/cli.js status
4646+docker stop tweets-2-bsky
4747+docker start tweets-2-bsky
4848+```
4949+5050+### 4) Update to newest release
5151+5252+```bash
5353+docker pull j4ckxyz/tweets-2-bsky:latest
5454+docker stop tweets-2-bsky
5555+docker rm tweets-2-bsky
5656+docker run -d \
5757+ --name tweets-2-bsky \
5858+ -p 3000:3000 \
5959+ -v tweets2bsky_data:/app/data \
6060+ --restart unless-stopped \
6161+ j4ckxyz/tweets-2-bsky:latest
6262+```
6363+6464+Alternative image registry: `ghcr.io/j4ckxyz/tweets-2-bsky:latest`.
66577-If you are comfortable with terminal basics but do not want to manage PM2 manually, use the installer script.
6666+## Source Install Quick Start (No Docker)
6767+6868+If you prefer running from source and do not want to manage PM2 manually, use the installer script.
869970### 1) Clone the repo
1071···3091 - otherwise uses `nohup`
3192- prints your local web URL (for example `http://localhost:3000`)
32933333-### 3) Open the dashboard
3434-3535-Open the printed URL in your browser, then:
3636-3737-1. Register the first user (this user becomes admin).
3838-2. Add Twitter cookies in Settings.
3939-3. Add at least one mapping.
4040-4. Click `Run now`.
4141-4294### Useful installer commands
43954496```bash
···51103./install.sh --skip-native-rebuild
52104```
531055454-If you prefer full manual setup, skip to [Manual Setup](#manual-setup-technical). For a portable single-container setup, use [Docker](#docker-single-container-backend--frontend--scheduler).
106106+If you prefer full manual source setup details, skip to [Manual Setup](#manual-setup-technical).
107107+108108+After source install starts, open `http://localhost:3000` and follow the first-time setup steps in [Quick Start](#quick-start-recommended-docker).
5510956110## Docker (Single-Container, Backend + Frontend + Scheduler)
57111···74128 -p 3000:3000 \
75129 -v tweets2bsky_data:/app/data \
76130 --restart unless-stopped \
7777- ghcr.io/j4ckxyz/tweets-2-bsky:latest
131131+ j4ckxyz/tweets-2-bsky:latest
78132```
7913380134Open `http://localhost:3000`.
···82136PowerShell equivalent:
8313784138```powershell
8585-docker run -d --name tweets-2-bsky -p 3000:3000 -v tweets2bsky_data:/app/data --restart unless-stopped ghcr.io/j4ckxyz/tweets-2-bsky:latest
139139+docker run -d --name tweets-2-bsky -p 3000:3000 -v tweets2bsky_data:/app/data --restart unless-stopped j4ckxyz/tweets-2-bsky:latest
86140```
141141+142142+Alternative registry mirror: `ghcr.io/j4ckxyz/tweets-2-bsky:latest`.
8714388144### 2) Build locally (if you do not want to pull)
89145···108164 -p 3000:3000 \
109165 -v tweets2bsky_data:/app/data \
110166 --env-file .env \
111111- ghcr.io/j4ckxyz/tweets-2-bsky:latest
167167+ j4ckxyz/tweets-2-bsky:latest
112168```
113169114170Common variables:
···144200For Docker installs, update by pulling a newer image and recreating the container with the same volume:
145201146202```bash
147147-docker pull ghcr.io/j4ckxyz/tweets-2-bsky:latest
203203+docker pull j4ckxyz/tweets-2-bsky:latest
148204docker stop tweets-2-bsky
149205docker rm tweets-2-bsky
150206docker run -d \
···152208 -p 3000:3000 \
153209 -v tweets2bsky_data:/app/data \
154210 --restart unless-stopped \
155155- ghcr.io/j4ckxyz/tweets-2-bsky:latest
211211+ j4ckxyz/tweets-2-bsky:latest
156212```
157213158214### 7) Platform support
···184240gh secret set DOCKERHUB_TOKEN --body "<dockerhub-access-token>"
185241```
186242187187-If you keep your default branch as `master`, users can always pull the newest build with:
243243+Users can always pull the newest build with:
188244189245```bash
190190-docker pull ghcr.io/j4ckxyz/tweets-2-bsky:latest
246246+docker pull j4ckxyz/tweets-2-bsky:latest
191247```
192248193249#### Option A: GitHub Container Registry (GHCR)
···276332277333## Requirements
278334335335+Recommended runtime:
336336+337337+- Docker Desktop / Docker Engine
338338+339339+If running from source instead of Docker:
340340+279341- Node.js 22+
280342- npm
281343- git
282344283283-Optional but recommended:
345345+Optional but recommended for source installs:
284346285347- PM2 (for managed background runtime)
286348- Chrome/Chromium (used for some quote-tweet screenshot fallbacks)
287349- build tools for native modules (`better-sqlite3`) if your platform needs source compilation
288288-- Docker Desktop / Docker Engine (if using containerized deployment)
289350290351## Manual Setup (Technical)
291352