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 f set 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 $1 replace, 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. Palette Snippets: 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, no Font method) — 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) + declarative plugin.json (keymap / external commands / snippet & template dirs); contributes commands, keybindings, tool windows, editor right-click items, and status-bar segments. The ActiveEditor facade does filePath/text/selectedText/caretLine/replaceSelection/insertAtCaret/setText/openPath, and PluginContext adds openUrl/log/setStatus + path accessors. Off by default (Settings → Plugins). Loaded via a child URLClassLoader so it works in the sealed jlink installers. Registry + install: browse a curated GitHub-hosted index.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 under examples/. Security: the index is verified against a bundled Ed25519 signature (Settings.pluginRequireSignature, default on, blocks an unsigned/unverified registry; sign with scripts/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. See docs/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, writes edit_buffer (undoable str-replace / whole-buffer edits) / save_buffer, actions open_file (with line:col navigation) / execute_command; writes <configDir>/mcp-endpoint.json for 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