Roadmap
What's shipped and what's planned, by area — pulled straight from the project's TODO. For everything that just landed, see the changelog.
47 of 50 tracked items shipped.
Editing
- ✓ Smart backspace — clear the indent in one press / jump back on a blank auto-indented line
- ✓ Auto indent
- ✓ Smart indentation
- ✓ Language indentation aware for the 21 languages we support
- ✓ Autoclose
()[]{}and quotes - ✓ Highlight matching braces
- ✓ Comment/uncomment code region
- ✓ Fill paragraph/region (Emacs
M-q/ Fill Region /C-x fset fill column) — re-wrap to a fill column, preserving indentation + an adaptive fill prefix (line comments,>quotes, Javadoc*) - ✓ Smart line start (
C-a) — first press to the first non-whitespace, second toggles to column 0 - ✓ Markdown formatting — format bar + smart list/heading/link/table editing (see "Recently shipped")
- ✓ Format document — LSP: Format Document reformats the whole file via the language server (
textDocument/formatting, when it advertises formatting), undoable; palette + editor right-click. (GFM table reflow also exists.) - ✓ Column select support — column/block selection (overlay + column-aware edits)
- ✓ Multiple cursors support — VS Code–style multi-caret (add at next occurrence / above / below) + Alt-drag column selection (personal RichTextFX fork); see "Recently shipped"
- ✓ Advanced Undo/Redo support — word/line-level undo coalescing (boundary + idle breaks) and an Undo History tool window (
M-g u: in-session checkpoints, jump-to-restore). *The undo tree (branch recovery) was deliberately not pursued — it would mean replacing RichTextFX's linear undo engine for a niche payoff; revisit if there's demand.* - ✓ Spell check support — Lucene Hunspell, red squiggles, suggestions, user dictionary, en_US/en_GB; bundled technical-terms dictionary (toggle in Settings)
- ✓ Private comments/notes — see Personal Notes under "Recently shipped"
Search
- ✓ Incremental Search — find bar searches as you type (debounced), jumps to the nearest match
- ✓ Regex search — regex + case-sensitive + whole-word toggles in the find bar
- ✓ Multi-file search — Find in Files (
C-S-f): project + open buffers, off-thread, with replace-in-files - ✓ Search results panel — Search Results tool window (
M-6), grouped by file, Enter/double-click to jump - ✓ Find in Files extras — include/exclude globs, query history (editable combo), regex
$1replace, ripgrep badge, bold file names, right-side default - ✓ Highlight all matches — every match highlighted live in the editor (current one accented)
- ✓ AceJump support —
M-g j: type a char, then a label, to jump the caret to any on-screen occurrence
Code intelligence
- ✓ Autocomplete support — code: snippet popup (Enter/Tab); prose: inline ghost text (Tab); auto +
C-M-i/M-/trigger; Settings toggle. (Next: document-words, LSP, fuzzy matching.) - ✓ LSP support — 21 servers (see "Recently shipped"): diagnostics + Problems window (
M-8) + minimap/scrollbar stripes, go-to-definition (M-.), find references (M-?), hover (C-c h), LSP-backed completion, TS/PHP auto-imports, and Format Document (whole-file reformat). Server-centric registry, per-server Settings, off by default. Document symbols power the Structure tool window. (Next: format-on-save; rename, code actions, quick fixes.) - ✓ Fix structure for the 21 languages we support — the Structure tool window now builds from the language server's
textDocument/documentSymbol(precise hierarchy, real kinds, per-kind icons, method signatures), with the fold-region/TextMate heuristic as the fallback for non-LSP files; sort (Position/Name/Kind) + kind filter, expanded by default - ✓ Multi language support — UI string translation (en/it/es/fr/pt/de); see "UI localization (i18n)" under "Recently shipped"
Snippets
- ✓ GUI for Snippet management — Settings → Snippets: a master-detail editor (language picker + per-language user-snippet list + name/trigger/description/body form), saving to
<configDir>/snippets/<lang>.json. PaletteSnippets: Manage Snippets…(snippets.manage)
Files & version control
- ✓ Git support — native CLI (branch/status, gutter change bars, commit workflow, fetch/pull/push)
- ✓ Diff viewer + merge-conflict UI — side-by-side / unified diff (vs HEAD / commit / another file), word-level highlights, apply-hunk / apply-all, patch export, merge-conflict resolver
- ✓ Local file history — IntelliJ-style snapshots on save / auto-save / before an external reload; a File History tool window (
M-g l) lists revisions (date/time, reason, size; latest tagged *Current*), double-click for a read-only diff vs current, restore = undoable whole-file replace. Gzip'd content-addressed blobs + a per-project index under<configDir>/history/, deduped, with configurable retention (revisions/file, age, size/project). On by default; local-only; off in Simple UI - ✓ Detect external file changes — prompt to reload when a file changes on disk (focus-regain / tab switch)
- ✓ Auto-reload modified files
- ✓ Remote file editing support — SSH/SFTP: browse/open/edit/save remote files; saved connections (metadata only); local-process features auto-disable for remote (see "Recently shipped")
- ✓ Log mode support
Keybindings
- ✓ Complete emacs movement/text manipulation keybindings — backward-kill-word (
M-DEL), upcase/downcase/capitalize-word + region (M-u/M-l/M-c,C-x C-u/C-x C-l), join-line (M-^), delete-horizontal-space (M-\), just-one-space (M-SPC), delete-blank-lines (C-x C-o), open-line (C-o), kill-whole-line (C-S-DEL), zap-to-char (M-z), forward/backward-sexp + mark/kill-sexp (C-M-f/C-M-b/C-M-SPC/C-M-k), beginning/end-of-defun (C-M-a/C-M-e), mark-paragraph (M-h), mark-whole-buffer (C-x h), move-to-window-line (M-r). *Kill ring (yank-pop / consecutive-kill accumulation) still deferred.* - ✓ Fully configurable shortcuts — keybinding editor in Settings → Keymaps: searchable command list, multi-key chord recorder, conflict warnings, per-command + global reset; live (no restart), persisted as overrides on top of the active keymap theme
- ✓ Keybinding themes — switchable in Settings → Keymaps /
keymap.select, live (no restart), per-OS (Ctrl vs Cmd): Emacs (default), CUA, Sublime Text, VSCode, IntelliJ IDEA - ○ Vim keybindings (modal — needs a mode state machine: normal/insert/visual, operators, counts, registers,
:command line; deferred as its own feature) - ✓ Standard accelerator commands —
edit.selectAll/edit.duplicateLine/edit.moveLineUp/edit.moveLineDown, bound in the CUA/Sublime/VSCode/IntelliJ keymaps
UI / UX
- ○ UI final touches (fonts, colors, etc.)
- ✓ Pretty up Settings Window — sidebar categories, search, live preview, reset
- ✓ File-type icons — a per-type glyph (language logos, image/archive/PDF/table/…, generic fallback) everywhere a file is listed: tabs, Project tree, Open-Files/Recent pickers, Switcher, file/folder finders
- ✓ "Current Folder" explorer — with no project open, the Project tool window roots at the active file's folder and follows the focused tab
- ✓ Upgrade breadcrumbs support — _partial:_ Reveal in File Manager / Open Terminal Here on a crumb
- ✓ Fix Zen mode Programming ligatures are OpenType contextual alternates (
calt), and JavaFX exposes no feature-control API (no-fx-font-feature-settings, noFontmethod) — it only auto-shapes complex scripts, never Latin programming ligatures. Even if it did, RichTextFX's editing model maps one char → one glyph cell for caret/selection/hit-testing, which ligature glyph-substitution breaks (the caret lands in the wrong column). Would require both JavaFX feature support *and* ligature-aware caret math in the fork. Deferred unless JavaFX adds OpenType feature control
Extensibility & integration
- ✓ Plugins/API support — Java SPI (
com.editora.plugin.Plugin) + declarativeplugin.json(keymap / external commands / snippet & template dirs); contributes commands, keybindings, tool windows, editor right-click items, and status-bar segments. TheActiveEditorfacade doesfilePath/text/selectedText/caretLine/replaceSelection/insertAtCaret/setText/openPath, andPluginContextaddsopenUrl/log/setStatus+ path accessors. Off by default (Settings → Plugins). Loaded via a childURLClassLoaderso it works in the sealed jlink installers. Registry + install: browse a curated GitHub-hostedindex.json, install (download + SHA-256 verify + zip-slip-guarded unzip) or install from a local.zip; per-plugin Remove. 19 plugins published in the adriandeleon/editora-plugins registry (which also carries each plugin's source), with 18 worked examples underexamples/. Security: the index is verified against a bundled Ed25519 signature (Settings.pluginRequireSignature, default on, blocks an unsigned/unverified registry; sign withscripts/PluginSigningTool.java); a **capability-disclosure confirm** (jar? external commands? keybinding remaps?) runs before enabling at every arming point; reads are size-bounded and a non-default registry host is flagged. Seedocs/plugins.md. *Deferred: sandboxing, hot reload, gutter-marker contributions, GitHub-API/per-repo discovery, per-plugin/TOFU signing, auto-update.* - ✓ External Tools support
- ✓ MCP support — a minimal Model Context Protocol server embedded in the editor (loopback HTTP + bearer-token auth) so an LLM agent (Claude Code, …) can observe state, edit files, and drive the command registry. Twelve tools — reads
list_open_files/read_buffer/get_selection/get_diagnostics/document_symbols/git_status/find_in_files/list_commands, writesedit_buffer(undoable str-replace / whole-buffer edits) /save_buffer, actionsopen_file(with line:col navigation) /execute_command; writes<configDir>/mcp-endpoint.jsonfor discovery; status-bar indicator (click to copy the connection command). Off by default behind a security-notice dialog (Settings → MCP Server;view.toggleMcp/mcp.copyEndpoint). No new dependency (jdk.httpserver). (Next: resources/prompts, stdio transport, TODO-scan + open-tabs tools.)
Packaging
- ○ Sign native installers