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.
1{
2 "name": "tweets-2-bsky",
3 "version": "2.0.0",
4 "description": "A powerful tool to crosspost Tweets to Bluesky, supporting threads, videos, and high-quality images.",
5 "packageManager": "bun@1.3.9",
6 "type": "module",
7 "main": "dist/index.js",
8 "scripts": {
9 "setup": "bun install && bun run build",
10 "prebuild": "bash scripts/ensure-bun.sh",
11 "build": "tsc && vite build",
12 "build:server": "tsc",
13 "build:web": "vite build",
14 "rebuild:native": "bash scripts/rebuild-native.sh",
15 "run:once": "bun dist/index.js --run-once --no-web",
16 "test:twitter-metadata": "bun scripts/test-twitter-profile-metadata.ts",
17 "start": "bun dist/index.js",
18 "cli": "bun src/cli.ts",
19 "dev": "bun src/index.ts",
20 "dev:web": "vite",
21 "import": "bun src/index.ts --import-history",
22 "lint": "biome check --write .",
23 "preview:web": "vite preview",
24 "format": "biome format --write .",
25 "typecheck": "tsc --noEmit"
26 },
27 "keywords": [
28 "bluesky",
29 "twitter",
30 "crosspost",
31 "migration",
32 "thread",
33 "video"
34 ],
35 "author": "",
36 "license": "MIT",
37 "dependencies": {
38 "@atproto/api": "^0.18.9",
39 "@google/generative-ai": "^0.24.1",
40 "@the-convocation/twitter-scraper": "^0.21.1",
41 "axios": "^1.13.2",
42 "bcryptjs": "^3.0.3",
43 "better-sqlite3": "^12.5.0",
44 "cheerio": "^1.1.2",
45 "class-variance-authority": "^0.7.1",
46 "clsx": "^2.1.1",
47 "commander": "^14.0.2",
48 "cors": "^2.8.5",
49 "dotenv": "^17.2.3",
50 "express": "^5.2.1",
51 "franc-min": "^6.2.0",
52 "inquirer": "^13.1.0",
53 "iso-639-1": "^3.1.2",
54 "jsonwebtoken": "^9.0.3",
55 "lucide-react": "^0.553.0",
56 "node-cron": "^4.2.1",
57 "puppeteer-core": "^24.34.0",
58 "react": "^19.2.0",
59 "react-dom": "^19.2.0",
60 "sharp": "^0.34.5",
61 "tailwind-merge": "^3.3.1"
62 },
63 "devDependencies": {
64 "@types/react": "^19.2.6",
65 "@types/react-dom": "^19.2.3",
66 "@vitejs/plugin-react": "^5.1.0",
67 "@biomejs/biome": "^1.9.4",
68 "@types/bcryptjs": "^2.4.6",
69 "@types/better-sqlite3": "^7.6.13",
70 "@types/cheerio": "^0.22.35",
71 "@types/cors": "^2.8.19",
72 "@types/express": "^5.0.6",
73 "@types/inquirer": "^9.0.9",
74 "@types/jsonwebtoken": "^9.0.10",
75 "@types/node": "^22.10.2",
76 "@types/sharp": "^0.31.1",
77 "autoprefixer": "^10.4.21",
78 "postcss": "^8.5.6",
79 "tailwindcss": "^3.4.18",
80 "tsx": "^4.19.2",
81 "typescript": "^5.7.2",
82 "vite": "^7.1.12"
83 }
84}