- JavaScript 35%
- TypeScript 32%
- CSS 23%
- HTML 7%
- Shell 3%
Sift #
Collaborative lists with real‑time voting and ranking. Create a room, share the link, add ideas, and sort them together with upvotes, downvotes, or vetoes.

Why Sift? #
- Real‑time collaboration: everyone sees changes instantly
- Simple ranking: upvote, downvote, or veto; items auto‑sort by score
- Veto with care: vetoed items fall to the bottom and dim
- Bulk input: paste many lines at once; quick brainstorms welcome
- Keyboard‑friendly: j/k navigate • 1/2/3 vote • e edit • Del delete • ? help • Ctrl/Cmd+Z undo
- Clean UI: light/dark themes, responsive, reduced‑motion friendly
- Easy sharing: rooms are just links; optional room titles for context
Quick start #
Run the server with Bun 1.4.4:
bun run server.ts
Then open http://localhost:8294 in your browser.
HTTP, WebSockets, and SQLite use Bun's built-in APIs; production needs no
third-party runtime dependencies. Run from the repository root so static assets
and lists.db resolve correctly.
CLI options #
--host <hostname>— Bind to specific interface (default:localhost, use0.0.0.0for all interfaces)--port <port>— Listen on specific port (default:8294)
Example binding to all interfaces on port 3000:
bun run server.ts --host 0.0.0.0 --port 3000
When upgrading an existing installation, stop the old process and back up
lists.db before starting Bun. Startup applies pending migrations and removes
rooms inactive for 30 days. Do not run the Deno and Bun servers against the same
database simultaneously. The sample systemd unit is in contrib/sift.service.
Unlike Deno, Bun does not use permission flags. Keep the service under a dedicated OS user; the sample unit retains filesystem and privilege restrictions.
Development and tests #
bun install --frozen-lockfile
bun run check
bun run test
The test suite also needs Node.js 24+ and agent-browser with Chromium. It runs
the real Bun server against disposable SQLite databases, not your lists.db.
See tests/README.md for individual suites and migration fixtures.
Orb setup installs the pinned Bun toolchain and locked development dependencies.
How it works (for users) #
- Create a room and share the link, or join an existing room by code
- Add items one‑by‑one or paste multiple lines
- Vote: 1 = up, 2 = down, 3 = veto; Enter also upvotes the selected item
- Edit or delete items inline; reset votes when starting a new round
- Optionally set a room title to keep context
Tip: You can deep‑link into a room via ?room=CODE.
Notes on privacy & safety #
- No accounts or authentication; rooms are protected only by knowing the ID
- Treat rooms as shared spaces—don’t post sensitive information
License #
- Code: AGPL‑3.0‑or‑later → see LICENSES/AGPL-3.0-or-later.txt
- Docs/assets: CC0‑1.0 → see LICENSES/CC0-1.0.txt
- This project follows REUSE best practices