Commands & keys
Every command, its id and default shortcut, the fixed grid keys, and what each feature does.
Every feature is a command. The command palette (Cmd+Shift+P) runs any of
them by name - a leading > forces command mode. Most commands have a default
shortcut; rebind any of them from the config.
Shortcuts below are shown for macOS. On Windows/Linux, Cmd becomes
Ctrl; Shift and Alt are the same on every platform.
_unbound_ means the command ships with no default shortcut but still runs from
the palette.
Editing
| Command | Command id | Default | What it does |
|---|---|---|---|
| Undo | edit.undo | Cmd+Z | Step back through editing history - reaches the whole session. |
| Redo | edit.redo | Cmd+Shift+Z | Step forward again. |
| Insert cell | cell.insert | Cmd+O | Drop a blank cell at the selection, shifting only that column down. |
| Insert row above | row.insertAbove | Cmd+Shift+O | Add a blank row above the selection. |
| Insert row below | row.insertBelow | unbound | Add a blank row below the selection. |
| Delete row | row.delete | Cmd+Delete | Remove the current row. |
Formatting
Decorations toggle over the whole current selection, so you can mark a range at once. They combine freely.
| Command | Command id | Default | What it does |
|---|---|---|---|
| Toggle bold | format.toggleBold | Cmd+B | Bold a claim. |
| Toggle highlight | format.toggleHighlight | Cmd+Shift+H | Highlight what matters. |
| Toggle card | format.toggleCard | Cmd+T | Tag the cell as evidence. Card tags surface in cell search. |
| Toggle group | format.toggleGroup | Cmd+G | Draw a bar down the left of a run to bracket answers under one argument. |
Sheets
| Command | Command id | Default | What it does |
|---|---|---|---|
| New aff sheet | sheet.newAff | Cmd+Shift+A | Start a fresh aff sheet. |
| New neg sheet | sheet.newNeg | Cmd+Shift+N | Start a fresh neg sheet. |
| Next sheet | sheet.next | ] | Step to the next sheet (skips CX). |
| Previous sheet | sheet.prev | [ | Step to the previous sheet (skips CX). |
| Jump to sheet 1-9 | sheet.jump1-jump9 | Cmd+1 to Cmd+9 | Jump straight to a sheet by position (skips CX). |
| Rename active sheet | sheet.rename | Cmd+R | Rename the current sheet. |
| Search cells | sheet.quickSwitch | Cmd+P | Fuzzy-search every filled cell; running a result jumps the cursor. |
Split view
Lays two sheets side by side - for example, a DA next to case. Picking a sheet in the sidebar or palette retargets whichever pane has focus.
| Command | Command id | Default | What it does |
|---|---|---|---|
| Toggle split view | split.toggle | Alt+\ | Turn the second pane on or off. |
| Focus left pane | split.focusLeft | Cmd+H | Move focus to the left pane. |
| Focus right pane | split.focusRight | Cmd+L | Move focus to the right pane. |
Panels
| Command | Command id | Default | What it does |
|---|---|---|---|
| Command palette | palette.open | Cmd+Shift+P | Run any command by name (> forces command mode). |
| Open settings | settings.open | Cmd+, | Open Settings. |
| Open round info | info.open | unbound | Open the round-info panel. |
| Toggle RFD | rfd.toggle | Cmd+J | Open or close the RFD drawer. |
| Toggle sidebar | sidebar.toggle | Cmd+\ | Show or hide the sidebar. |
| Keyboard shortcuts | help.open | ? | Open the in-app shortcut reference. |
Theme
| Command | Command id | Default | What it does |
|---|---|---|---|
| Theme: Light | theme.light | unbound | Switch to the light theme. |
| Theme: Dark | theme.dark | unbound | Switch to the dark theme. |
| Theme: System | theme.system | unbound | Follow the system theme. |
Grid keys
A handful of keys are owned by the grid itself. They are fixed - not rebindable commands.
| Key | Action |
|---|---|
| Enter | Next row / commit edit |
| Alt+Enter | New line in cell |
| Tab | Commit and move right |
| Esc | Cancel edit |
| F2 | Edit cell |
| Delete | Clear cell |
| Arrows | Move selection |
| Cmd/Ctrl+Arrows | Jump to data edge |
Features
The grid
Each sheet is a grid whose columns are speeches, in this order:
Select a cell and type to flow an argument. Committing an edit either drops down one row or moves one column right, so you can flow a speech straight down or step across speeches without leaving the keyboard. The Speech control in the header jumps every sheet to the same speech at once, so you can read one speech straight across your whole flow.
Sheets & sides
A sheet is one flow - one off-case position, the case, a kritik. Aff sheets and neg sheets are colored by side; recolor either from the config. Reorder sheets by dragging in the sidebar.
Every round carries a pinned CX sheet for cross-examination, with a question/response column pair for each CX period. It always sorts first and is skipped by the sheet-jump and next/previous commands.
Round info
Open round info records the round's metadata for scouting later: aff/neg schools, debaters (1A/2A, 1N/2N), tournament, round, date, and judge. Team codes derive automatically. Set the decision to Aff or Neg; click the chosen side again to clear it back to undecided. Paste a Tabroom pairing into the paste box to autofill the fields - if the sheet already holds details, ebb asks before replacing them, and a pasted aff never wipes an existing neg.
RFD editor
Toggle RFD opens a Markdown reason-for-decision drawer along the bottom edge,
with the flow still visible above; drag its top handle to resize. On a >
blockquote line, start typing and pick a suggestion to drop the exact wording of
any cell into your reasoning - suggestions are colored
aff or neg
to match the grid. Toggle Preview to render the Markdown. A vim
keybindings option for the editor lives in the config.
Dashboard, export & import
The Dashboard lists every flow on this device. Search by text; sort by last edited, date, tournament, or result; optionally group by tournament. A per-flow menu opens details. Export a flow as:
- JSON - a full, re-importable ebb file. Lossless, so exporting and re-importing round-trips a flow exactly. Use it to back up or move a flow.
- Excel - a
.xlsxworkbook, for sharing or reading outside ebb.
Import controls live in the Dashboard header.
Data & privacy
Everything lives in this browser or app and autosaves as you type. There is no telemetry and no network call for your data - the only place your rounds exist is your own machine. Deleting a flow moves it to Trash, where you can restore it, delete it permanently, or empty trash to clear all trashed flows at once.