Lattice
A workspace for your research.
A context switcher that keeps your attention in one place while you work across many projects, branches and shells.
ProductivityRust · TypeScriptGitHub @sgtlambdaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A context switcher that keeps your attention in one place
Taken from the repository README
Loading the full README.
Read the full README ↗A context switcher that tries to keep your attention in one place while you switch between projects, branches and shells all day. Every project, every branch on origin, every workspace holding one and every shell running there sit in one window, which shows what needs you and gets you there in a keystroke.
The idea is that your attention is the scarce resource, so it should go to decisions: answering a question a program asked, looking over a result, starting or finishing a branch. Finding the right window, waiting for a clone and checking whether a directory is safe to delete are the app's job. A mark means something is waiting for a decision, and nothing else is marked.
Issues, pull requests, branches and workspaces are not separate lists. A branch's row carries its pull request, its workspaces and their terminals, and an issue becomes a row when you make a workspace for it. Filtered to what is assigned to you or in flight, the list is the to-do list, and a row goes when the work is merged and cleaned up.
The shells run whatever you like. Coding agents such as Claude Code are the obvious case, and the app shows when one is working, waiting on you or done, but a dev server or a plain shell is just as at home. Around them is an ordinary window, with lists to scan and things to click.
Built with Tauri 2 and Vue 3.
parallelist is built around branches you start and finish many times a day. Each branch gets a workspace, a directory of its own holding it as a git worktree or a full clone, so several programs can work on the same project at once without changing each other's files. Some branches need careful review and a trail of comments for whoever reads the history later. Others are a way to build several things side by side while you iterate, and are merged and removed within the hour. Both kinds need quick ends: a new workspace with its dev app running in seconds, and gone in seconds once the branch is done. If setting one up were slow, you would skip it and work in a directory that is already open. If removing one felt risky, it would stay on disk.
⌘N), type a branch name or pick one of
the project's open issues, which names the branch and the directory. The
workspace is made in the background (a
worktree, or a clone sharing the main workspace's objects when the branch
already has a worktree, so even a large one takes seconds), its setup
steps copy env files, link dependencies or run an install, and whatever
you ticked to open it in starts when it's ready: an editor, a dev server,
a program in its terminal. Double-clicking a branch with no workspace
makes one as the dialog would with nothing changed, and opens its
terminal once it is set up.⌘P jumps to any branch of any project, with what's waiting first.
⌘↵ there goes into the branch's shell, as double-clicking it does.⌘↵ goes to the one that has waited longest.gh../run.sh # dev build, reloads as you edit
./run.sh --build # release .app, installed to /Applications and launched
pnpm sandbox # components in a browser, with made-up data (src/sandbox)
pnpm typecheck # vue-tsc
pnpm test # cargo test
pnpm lint # cargo clippy
pnpm dev:demo # the landing page's demo: this frontend, in a browser
Run from any branch but main, run.sh puts the branch name in the top-left
of the window, so a build from a worktree can't be mistaken for the real one.
The landing page (site/) embeds that demo: the app's own components with
made-up projects and scripted terminals behind them (demo/), built into
site/demo by pnpm build:demo. A command added to src/api.ts needs an
answer in demo/backend/index.ts.
Settings are edited in the app and stored in
~/Library/Application Support/com.jmversteeg.parallelist/config.json. A
project can commit a .parallelist.json at its root to override baseBranch,
pathTemplate, setupSteps and openTargets.
Setup steps and "Open in" targets are shell templates run through your login
shell, with {path}, {primary} (the main workspace) and {branch}
substituted and shell-quoted, plus {prUrl} in "Open in" targets:
open -na Ghostty --args --working-directory={path}
phpstorm {path}