A spatial canvas for forking, branching, and mixing models on one infinite board.
Pre-alpha — not yet a public release. See roadmap.
Today, LLM conversations are linear: one chat, one thread, one model. Every interesting answer should be a fork in the road — instead it's a dead end.
Forkly turns conversations into a spatial canvas. Every session is a card. Every reply can fork. Every node can run on a different model. Lineage threads show you the shape of how you thought through a problem.
- Compare models on the same context. Fork your Claude conversation into GPT and Gemini at the same message — three answers race on identical input.
- Fan out. Hover any message, press
2–9, get N siblings streaming in parallel. - Merge. Marquee-select sibling branches, hit
M, get a synthesis node that distills their best-of into one reply. - Mix providers per cell. Claude Code → GPT via Codex → Gemini via AI Studio → local Llama via Ollama, all in one workspace.
- Recover from bad turns. Realize the assistant went off-rails six messages ago? Fork from there, retry, keep the original branch as a discarded lineage you can read back later.
- Read your tree at every zoom. Pan out and cells collapse to labels; pan in and you're back inside the chat. Forkly is the same product at 1× and at 0.2×.
Forkly speaks to four model families today. Anthropic and OpenAI have a subscription path — no API key, run against your existing Claude / ChatGPT plan through their CLI — and all four have an API-key path:
| Provider | Subscription transport | API key transport |
|---|---|---|
| Anthropic · Claude | claude CLI (Claude Code subscription) |
/v1/messages with sk-ant-… |
| OpenAI · GPT | codex CLI (ChatGPT Plus / Pro / Business) |
/v1/chat/completions with sk-… |
| Google · Gemini | — (AI Studio free tier covers most use cases) | streamGenerateContent with AIza… |
| Ollama · local | n/a (it's already free + local) | localhost:11434/api/chat |
First launch detects what's already on your machine — Claude Code, Codex CLI, a running Ollama daemon — and asks you to pick one. The Gemini AI Studio walkthrough is the universal fallback: 30 seconds, no install, 1,000 free requests per day on Flash. No API key is ever shipped in the binary — the free path lives on your account, not ours.
Demo GIF coming with
v0.1.0. The recording will show: a Claude session forking into GPT, GPT forking into Gemini, all three streaming in parallel, then a merge node fanning the three back in for a best-of synthesis.
Forkly is meant to be cloneable. If you have Node + Rust + the Tauri prereqs, you're three commands from a running app:
git clone https://github.com/SolalBerrebi/forkly && cd forkly
pnpm install
pnpm tauri devPrereqs:
| Version | One-liner | |
|---|---|---|
| Node | 22+ | nvm install 22 |
| pnpm | 9+ | corepack enable && corepack prepare pnpm@latest --activate |
| Rust | 1.80+ | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| Tauri prereqs | varies | tauri.app/start/prerequisites |
When the app boots, the onboarding modal asks you which model you want to use. Pick Claude Code or ChatGPT and Forkly will offer to open Terminal with the install + login script ready — you hit enter once and watch it work. No manual copy-paste, no leaving the app to figure out which package manager you have.
If you'd rather paste a key, expand Settings → API keys. Anthropic / OpenAI / Google are all there.
Coming with v0.1.0 via signed .dmg (macOS), .msi (Windows), and .AppImage / .deb (Linux) on the Releases page.
Forkly is local-first. Your conversations live in a SQLite database under your OS app-data directory. The only network calls Forkly makes are to the LLM providers you choose — and every one of them appears in the in-app network log (⌘⇧N) with masked credentials and the raw upstream call. No telemetry, no analytics, no cloud sync. Ever, unless you opt in.
- API keys live in your OS keychain via the
keyringcrate. Never plaintext, never on disk. - CLI transports (Claude Code, Codex) use the CLIs' own OAuth tokens. Forkly never sees them.
- The Ollama path doesn't leave your machine at all.
| Key | Action |
|---|---|
2–9 (hovering a message) |
Fan out N parallel sibling forks |
M (with 2+ nodes selected) |
Spawn a merge node that synthesizes them |
Delete / Backspace (with nodes selected) |
Delete sessions (with confirmation) |
⌘⇧L |
Auto-reorganize unlocked cells into a clean tree |
⌘⇧N |
Toggle the network log drawer |
Enter (in composer) |
Send |
Shift+Enter (in composer) |
Newline |
Forkly is being built in milestones. Status as of pre-alpha:
- M0 — Scaffold (Tauri 2 + React 19 + Vite, dual MIT/Apache-2.0 license, DCO)
- M1 — Canvas shell with xyflow + grid background, light/dark theme that follows the OS
- M2 — Single-session chat: Claude Code (subscription) + Anthropic API key transports
- M3 — Forking, fan-out (
2–9), merge nodes (M), auto-titling - M4 — Zoom-dependent rendering (full chat → label)
- M5 — multi-provider groundwork (folded into M8, which shipped OpenAI / Google / Ollama)
- M6 — Workspaces ("pages / sheets"), delete with confirm, tooltips, release pipeline
- M7 — Per-cell info chips, resizable cells, dagre auto-layout, network log drawer, live-linked Claude Code session import, per-cell appearance toggle (terminal ↔ chat)
- M8 — OpenAI (Codex CLI + API), Google (Gemini API + free walkthrough), Ollama (local), cross-LLM fork picker, first-launch onboarding
- v0.1.0 — Signed macOS builds, demo workspace on first launch, hero GIF, public release
- v0.2 — Tool calls visualization, file attachments, export canvas as PNG / standalone HTML
See CONTRIBUTING.md for project layout, conventions, and the DCO sign-off requirement.
Forkly enforces a Developer Certificate of Origin on every commit (git commit -s). No CLA — DCO is lighter-weight and contributor-friendly, but every commit must carry the Signed-off-by: trailer.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Includes @xyflow/react (MIT) — the canvas runtime — and other dependencies listed in package.json and src-tauri/Cargo.toml.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.