Blog
RSSDesign notes, how-tos, and the occasional deep-dive.
- Editora 0.15.0: fourteen pages for a 382-page document
A print path whose failure the on-screen preview structurally clips away, an SVG that renders everywhere except in an actual installation, and a menu that decided it wasn't in a Git repository once and then never asked again. Four bugs that each worked fine on the path I happened to take.
- Editora 0.14.0: the bug with no symptom
Typing got slower the longer you typed, and nothing pointed at why. Chasing it turned up a measurement that allocated a timer nobody stopped, a probe that moved the thing it was probing, and four tests that could only ever pass. Plus a preview feature that throws, and a window that never appears.
- Editora 0.13.0: whether it matched, or how well
Every picker in the editor filtered on a boolean. Replacing it with a real score turned out to touch dynamic programming, a Turkish dotted capital I, and an optimization that quietly reintroduced the exact bug it was written to avoid. Plus: a symbol scanner that under-reports on purpose.
- Editora 0.12.0: moving a panel is not moving a panel
Letting a tool window maximize, re-dock, share a side and float looks like one layout feature. It is really six separate encounters with what a SplitPane, an unmanaged node, a drag gesture, a fresh Scene, and the order you restore things in will each quietly do instead. Plus: a pom preview that admits what it doesn't know.
- Editora 0.10.0: what a design system actually has to decide
Giving an editor a look of its own is not picking colours. It is naming what each colour means, then discovering that the toolkit you build on has no last-child selector, shrinks every label in a row by an equal share, and silently refuses one flavour of SVG arc. Plus: the third time a language server shipped a feature switched off.
- Editora 0.9.10: the half of LSP that writes to your files
Reading from a language server is easy. Acting on what it says means editing your code, and that is where the interesting bugs live: an ordering rule in the spec, a capability nobody declared, a feature the server ships switched off, and an off-by-one that made a whole feature look like it had nothing to say.
- Rebuilding the website, and two bugs it turned up
The old home page described a keyboard-driven editor without ever showing one. Fixing that surfaced a CSS trap that froze the new search, and 71 commands missing from the docs.
- Editora 0.9.9: asking before it builds
Why opening a repository shouldn't be enough to run its code, what it takes for a dimmed command to be useful rather than annoying, and a class cache that quietly went missing on Apple silicon for eight releases.
- Editora 0.9.8: GitHub without a token
Pull request review, CI logs that link back to your own checkout, and a test runner that shows you the whole run up front. Plus why the GitHub integration never asks you to paste a token.
- Editora 0.9.7: keeping the UI thread sacred
A performance release about one rule — never make the user wait on the thread that draws the screen — and the handful of places Editora was quietly breaking it.
- Editora 0.9.6: what a per-feature audit turns up
0.9.6 came out of walking through the editor one feature at a time and asking what could go wrong. Here's what that found, and why the boring fixes are the ones that matter.
- Editora 0.9.5: safer by default
A release that's mostly fixes, the unglamorous kind that keep your files, your config, and your machine safe, plus a mini file manager in the Project tree.
- Editora 0.9.4: Expert mode
A lighter focus mode than Zen that keeps the full editor view, plus build-tool tasks tool windows and a few workspace conveniences.
- Editora 0.9.3: Typst, diagrams, and previews for everything
The 0.9.2 and 0.9.3 releases add Typst, diagram-as-code, smart previews for data and config files, and build-tool integration.
- Editora 0.9.2: Maven, an AI switch, and a Windows fix
The second release adds IntelliJ-style Maven support, consolidates AI behind one master switch, makes preview links clickable, and fixes a Windows launch failure.
- Editora 0.9.1: the first release
The first tagged build of a keyboard-driven, cross-platform programmer's editor, plus the story behind why it's 0.9.1 and not 0.9.0.
- HTML live preview, with no browser engine
How Editora previews HTML in a real browser: a loopback HTTP server, live-as-you-type reload, and a long-poll trick, without bundling a WebView.
- Extending Editora with plugins
How Editora's plugin system works, and how to write your own in a few minutes.
- Signing the plugin registry: consent, integrity, authenticity
Plugins run unsandboxed, so the registry leans on three defenses: informed consent, download integrity, and a signed index. Here's how each works.
- A faster cold start with a GUI-trained AOT cache
How Editora's installers shave ~300–480 ms (~28%) off the time to first frame using JDK 25's AOT cache, trained against a real GUI run.
- Shipping a JavaFX app to five platforms
The release pipeline behind Editora: native installers and fat jars for five targets, jpackage, moditect, and the joys of automatic modules.
- One DAP client, three debuggers
How Editora debugs Java, Python, and JavaScript through a single Debug Adapter Protocol client: three very different transports behind one UI.
- Notes that survive edits and renames
How Editora's Personal Notes stay attached to the right text, even after you edit the file in another program or rename it.
- Building a keyboard-first text editor
Why Editora treats every action as a command, and what that design buys you.
- Orphaned language servers and the symlink that ate my diagnostics
Two LSP integration bugs (a process that wouldn't die, and diagnostics that silently vanished) and what they taught me about subprocesses and paths.
- Why your .app can't find git or node
A GUI-launched app inherits a stripped PATH. Here's how Editora recovers the real one so it can find git, node, and version-managed tools.
- Keeping the UI thread sacred
The performance doctrine behind Editora: off-thread work, incremental updates, coalesced redraws, and degrading gracefully on huge files.
- The black window: bounding GPU textures in JavaFX
A bug that only showed up in the packaged build: open enough files and the window goes black. The cause was GPU texture exhaustion.
- Rendering Markdown like GitHub, without a WebView
How Editora's Markdown preview renders natively to JavaFX nodes (task lists, code pills, images, SVG badges), with no embedded browser.
- Going headless to stay alive: an AWT/JavaFX deadlock
Why the very first line of Editora's main() sets java.awt.headless=true, and the intermittent macOS hang that forced it.