Status buffer

The status buffer lives at .jj/badjuju/status.jujutsu and is your home base. It combines jj status, the working-copy stack (jj log over a focused revset), and a one-screen command reference.

Layout

STATUS:

<jj status output>

STACK: <revset expression>

<jj log output over STACK>

COMMAND REFERENCE:
<one line per available action>

STATUS: section

Shows whether the working copy has changes, and the working-copy commit (@) and its parent (@-). This is whatever jj status prints, verbatim.

STACK: section

The STACK: line is a revset expression — by default ancestors(reachable(@, mutable()), 2), which shows the working copy, every commit you can still rewrite, and two layers of immutable ancestors for context.

Some clients support --stat rendering server-side; when enabled, each commit's line is followed by a per-file change summary.

COMMAND REFERENCE: section

A short, buffer-specific cheat sheet describing the key bindings or commands available in this buffer. The contents vary slightly by client; clients can also override the reference via initialization options. The aim is that you never have to leave the buffer to remember what s does.

Generated commands

The server exposes these LSP commands, which clients map to keys or menu entries:

CommandWhat it does
badjuju.status(Re)write status.jujutsu and return its URI
badjuju.refreshRe-run the command that produced the current buffer
badjuju.newjj new (with optional cursor-target revision)
badjuju.next / badjuju.prevMove @ forward / back
badjuju.editMove @ to the commit at the cursor
badjuju.abandonAbandon the commit at the cursor (or @)
badjuju.describeOpen describe buffer for cursor commit
badjuju.diffOpen change diff for cursor commit
badjuju.diff.commitOpen commit diff for cursor commit
badjuju.squashSquash file at cursor into parent
badjuju.unsquashUnsquash file at cursor from parent
badjuju.squash.commitMark source / open squash window
badjuju.rebase.sourceMark rebase source (--source, --revisions, or --branch)
badjuju.rebase.commitExecute pending rebase (--destination, --insert-after, or --insert-before)
badjuju.cancelClear any pending operation (squash or rebase)
badjuju.undojj undo
badjuju.fetchjj git fetch
badjuju.pushjj git push (with optional forceWithLease)
badjuju.bookmarkInteractive bookmark manager
badjuju.keymap / badjuju.helpShow the active key map
badjuju.versionDisplay badjuju and jj versions

See Clients for the per-editor key bindings that invoke these commands.

Cursor targeting

Cursor-driven actions (edit, abandon, describe, diff, squash, unsquash, rebase.source, rebase.commit, bookmark) read the cursor line and identify a commit or file:

  • On a commit-header row (e.g. the line with @ kpkzwvqm 909679d0 …), the target is that commit's change ID.
  • On a file row in the STATUS: section, the target is that file relative to @.

If the cursor is on something else (a blank line, a section header, the command reference), most actions either operate on @ as a sensible default or report that no target was found.

Auto-refresh

Open status buffers refresh automatically whenever a jj operation runs — whether it came from Bad Juju, a different editor, or a terminal jj invocation. The server watches the op log for new heads and pushes updated content to every open client.

Folding

Some clients (notably Emacs) open the status buffer fully folded by default, with the WORKING COPY CHANGES and PARENT CHANGES sections expanded. Use the editor's fold key (TAB in Emacs) to toggle individual sections.