Getting Started
Bad Juju has two pieces:
- The server — a Rust LSP binary called
badjuju. Every editor integration talks to this same server. - A client — the editor-side glue that launches the server and forwards commands. Each editor has its own setup.
You'll install both. The server first, then the client for whichever editor you use.
Prerequisites
-
Jujutsu (
jj) on yourPATH. Bad Juju drivesjjunder the hood; without it, nothing works. -
Rust (edition 2024 or later) if you're building from source.
-
pnpm 10+ if you plan to build the VS Code extension or run client tests.
-
A build runner. Bad Juju uses apenwarr's
redo— see the Getting Started guide for installation instructions (on macOS,brew install redo).If you'd rather not install
redo, the repo ships a self-contained./doshell script as a drop-in replacement. Anywhere this guide saysredo <target>you can substitute./do <target>instead.
1. Install the server
There's no published release yet, so install from a checkout:
git clone https://github.com/jennings/badjuju
cd badjuju
redo server/install
This builds the badjuju binary in release mode and installs it to
~/.cargo/bin/badjuju. Make sure ~/.cargo/bin is on your PATH.
Verify the install:
badjuju --version
2. Install a client
Pick the editor you use day-to-day:
- Neovim — plugin-manager
recipes for lazy.nvim, packer, vim-plug, pathogen, Vundle, and
built-in
pack/directories. - VS Code — install the extension from the marketplace or build a local VSIX.
- Emacs — recipes for
use-package,straight.el, and Doom Emacs. - Other editors — Helix is supported via a
languages.tomlsnippet, and any LSP-capable editor can drive Bad Juju through code actions.
3. Open the status window
Once the server is installed and your editor knows how to launch it, open a Jujutsu repository and ask for the status window. Each client has its own entry point — see Basic Usage for the exact commands per editor.
The first time you open the status window in a workspace, Bad Juju
creates a .jj/badjuju/ directory for the buffers it writes. There's
nothing to clean up later — it lives alongside .jj/ and gets ignored
along with the rest of the Jujutsu metadata.
You're ready. Head to Basic Usage for a tour of the everyday workflows.