History

Changelog

A complete history of Ferrite releases. For detailed technical notes, check our blog or the GitHub changelog.

v0.3.0

May 22, 2026

View on GitHub

Highlights

Rendered edit session (WYSIWYG block switching)PDF & themed HTML exportExecutable code blocks (shell/Python)Mermaid first wave: insert toolbar, validation, flowchart polisheframe/egui 0.34.2 + Rust 1.92 MSRVPhosphor icon set — full UI refreshSplit-view scroll syncQuick note workflowWorkspace file index (Ctrl+P / Ctrl+Shift+F)User-configurable accent color

Added

  • Rendered edit session (Tasks 94–105) — consolidated WYSIWYG architecture: one click opens any block (heading, paragraph, list item, formatted block, table cell); previous block commits automatically. Block-commit undo: each block close produces one logical Ctrl+Z step
  • Native PDF export (File → Export → PDF…) — page size, margins, optional H1 page breaks, link annotations via krilla + krilla-svg
  • Print preview — reuses PDF render path; opens in in-app PdfViewer tab
  • Themed HTML export — theme-aware CSS, Mermaid as inline SVG, syntect-highlighted code blocks, export options dialog
  • Executable fenced code blocks — Run control in rendered/split preview for shell & Python; background worker; inline ANSI-colored output; exit status; insert output as fenced block
  • Code execution settings — master enable, shell/Python toggles, timeout (default 30 s, max 300 s), hard timeout, user Stop, first-run consent modal
  • Mermaid: Insert → Mermaid… toolbar with per-diagram templates; About/Help syntax section and snippets
  • Mermaid inline validation — parse-time errors, warning header, last-good diagram fallback, squiggles in raw editor
  • Mermaid flowchart: extra shapes & style/classDef, state fork/join/history pseudostates
  • Mermaid flowchart edge routing & layout polish — edge–node obstacle avoidance, TD/BT layer centering, stable back-edge side channels with parallel lanes, inner back-edge direct path, branch parent snap, same-layer sibling spacing safety net
  • eframe / egui upgraded to 0.34.2 — skrifa + vello_cpu text backend; Phosphor 0.12; Popup & Tooltip APIs; Windows glow renderer retained
  • HarfRust validation under egui 0.34 — cluster shaping, 32 unit tests
  • MSRV raised to Rust 1.92 — rust-toolchain.toml, CI, package.rust-version
  • Phosphor icon font (egui-phosphor 0.12.0) — all chrome, ribbon, toolbars, panels, preview, viewers now use Phosphor instead of emoji or mixed Unicode
  • Split-view scroll sync — source line + fraction anchors keep raw editor and rendered preview aligned; Sync & 2-way controls on minimap footer; persists to settings
  • Mode-toggle scroll sync (Ctrl+E) — Raw ↔ Rendered preserves position via same hybrid strategy
  • Quick note workflow (on by default) — pathless tabs no longer block quit; empty untitled tabs close silently; closing a modified untitled tab still prompts; double-click to name; session recovery for unsaved text
  • Workspace file index — Ctrl+P and Ctrl+Shift+F search the entire workspace on a background thread; animated progress bar; index rebuilds on file create/delete/rename
  • User-configurable accent color — color picker in Settings → Appearance and Welcome; drives headings, selection, tabs, hub chrome, status bar
  • Spanish UI language (Español) — locale es / es-* detection
  • Productivity Hub polish — card layout, Pomodoro emphasis, floating × re-docks to sidebar, stable docked widths, detached window respects user resize
  • source_epoch widget identity — stable TextEdit ids under per-tab epoch counter; caret stays visible while typing in rendered headings (RS-2)
  • Workspace file index improves Quick Switcher (Ctrl+P) search quality — tokenizes paths on -, _, ., separators; includes both indexed and recent files; replaced loose full-path fuzzy matching

Improved

  • Build warnings: four-phase cleanup (Tasks 90–93) — cargo build goes from ~268 warnings to zero: unused imports, unused locals, egui 0.34 API migrations (Ui::close_menu → close, ComboBox::from_id_salt, Frame::corner_radius, etc.), dead_code audit
  • Undo granularity in raw mode — removed 500 ms time-based merging; each record_operations call is its own undo step; replace edits still undo atomically
  • Rendered mode block-commit undo — keystrokes inside active rendered block stay off the undo stack until close/switch; one logical step per commit
  • Main ribbon toolbar always icon-only — removed collapse/expand and section labels; fixed compact 28 px bar; tooltips and shortcuts unchanged
  • UI icons: emoji → Phosphor throughout — sharper, theme-consistent glyphs at all DPI scales
  • Flowchart TD/BT layer centering on max_cross_size instead of available_width — eliminates large empty left strip
  • Rendered view: scroll ratio preserved on viewport-culling remeasure — no layout nudges unrelated to sync
  • Per-document view mode (Raw/Split/Rendered) restored on reopen — closed tabs upsert into last_open_tabs; settings merge without erasing closed-file state

Fixed

  • CRITICAL: Smart-paste crash (STATUS_STACK_BUFFER_OVERRUN) — pasting text with a colon followed by multi-byte UTF-8 (Hebrew, Bengali, Hindi, emoji) caused abort in release builds. Fixed s.get(colon_pos..colon_pos+3) instead of direct slice. 5 regression tests
  • CRITICAL: Restored recovery snapshots dropped all edits on second crash cycle — Tab::with_file anchored original_content to recovered buffer, poisoning disk_content_hash. restore_from_session_result now constructs from on_disk_content and swaps buffer via set_content
  • Recovery / autosave cross-tab data loss — recovery and autosave now require path-and-disk-hash identity before applying; mismatches rejected; non-blocking banner for diverged content
  • Double-click required to switch WYSIWYG blocks (RS-1, RS-4, RS-5) — fixed by RenderedEditSession::switch_to_ui; one click closes active block and opens target
  • Cursor flash or disappear while typing in rendered headings (RS-2) — content_hash-based id remaps destroyed caret state; stable ids under source_epoch fix this
  • Formatted list/paragraph stuck in raw edit mode after clicking away (RS-3) — immediate save/exit on dismiss; formatted_editing cleared on switch
  • Rendered/split tables: two clicks to edit another cell — superseded by session-integrated table cells (BlockRef::TableCell, signal_table_force_commit)
  • Mermaid flowcharts shifted right with large left gap (#83, FC-83a) — TD/BT layers now centered on max_cross_size; back-edge padding only on sides that need loop clearance
  • Split/rendered view: only first of consecutive fenced code blocks visible (#129)
  • Empty markdown table cells hard to focus / edit (#131) — hit targets and Tab/Shift+Tab for empty cells
  • Multi-cursor copy/cut only copied primary selection — selected_text() now joins every non-empty selection (VS Code style); regression test added
  • Search in Files panel grew to full window height — results scroll inside fixed-height region; max 480 px; window fade disabled
  • Rendered/split scroll ghost snap with sync off — turning sync off clears tab pending targets and resets SyncScrollState
  • Split 2-way sync: preview jumped up when scrolling to bottom — top/bottom snaps from rendered pane now use SyncScrollState::set_raw_target()
  • Crash recovery dropped file opened on cold start — startup paths from CLI/file association deferred until session recovery dialog answered
  • Rendered view: scroll jump when toggling task list checkboxes — reuses culling layout when block structure unchanged; only wheel/scrollbar drag treated as active scroll
  • CSV rendered view: long cell text overflowed column bounds — truncate_cell_to_pixel_width() with font-metrics binary search; painter clip rect
  • Frontmatter panel stale after tab switch — cache keyed on (tab_id, content_version); regression tests
  • Document nav buttons visible above modal overlays — nav buttons use Order::Middle; suppressed while Ctrl+P / palette / search panel open
  • Status-bar Help (?) vs bottom-right resize (I-1, WIN-5) — consume_clicks_in_resize_zones prevents edge widgets stealing resize clicks
  • Integrated terminal: CJK paste/input local-echo (I-2, TRM-3) — UTF-8 init on shell spawn (PSReadLine, chcp 65001); lazy CJK font load on CJK input
  • Quick note workflow: closing untitled tabs with content did not prompt to save — Tab::should_prompt_to_save takes SavePromptContext; tab close still shows dialog; app exit stays frictionless
  • Export menu double icons (PDF, Print preview) — stripped duplicate emoji from export labels in all locale files
  • Outline panel tab selector layout — Phosphor icons broke hit-testing; fixed with painter-based dual-font tab labels
  • Detached Productivity Hub fought resize — removed width floor; clipped inner content; viewport-based max size only

v0.2.8

April 2026

View on GitHub

Highlights

Command Palette (Alt+Space)HarfRust text shaping for complex scriptsImage viewer tabs (PNG/JPEG/GIF/WebP/BMP)PDF viewer tabs (pure Rust)Rendered view performance overhaulTable cell rich text with click-to-edit13 bug fixes

Added

  • Command Palette (Alt+Space) - searchable command launcher with fuzzy search, recent commands, category grouping, and shortcut hints
  • Windows Alt+Space suppression - thread-level keyboard hook prevents OS system menu conflict
  • HarfRust text shaping engine (Phase 2) - proper rendering for Arabic, Bengali, Devanagari, and other complex scripts
  • Image viewer tabs - open PNG, JPEG, GIF, WebP, BMP files directly as image tabs
  • PDF viewer tabs - native PDF viewing via hayro (pure Rust, no system dependencies)
  • Background file loading for 5MB+ files with progress indication
  • Strict line breaks (Obsidian model) - single newlines create line breaks in rendered view
  • Middle-click to close tabs
  • Table cell rich text rendering - bold, italic, strikethrough, code, and nesting with click-to-edit in rendered view

Improved

  • Rendered view performance overhaul - AST caching, viewport culling, block height cache, and lazy estimation for large files
  • Per-frame O(N) elimination for large documents in rendered view
  • CSV viewer per-frame allocation fixes (reduced unnecessary reallocation)
  • TreeViewer (JSON/YAML/TOML) per-frame allocation fixes
  • Central panel per-frame allocation optimizations

Fixed

  • macOS .md file association not opening in Ferrite (#102)
  • Windows IME candidate box positioning (#103) - applied layer_transform_to_global() to IME coordinates
  • Custom font crash on Linux (#114)
  • Linux Cinnamon desktop dialog detection (#116)
  • Table inline formatting preservation and rendering (#117)
  • Terminal CJK double-width character overlap (#110) - unicode-width crate, 2-column cursor advancement
  • Windows 11 borderless window offset (#112) - .with_transparent(true) DWM workaround
  • Slow rendering on large documents (#105) - AST caching and viewport culling
  • Table inline formatting lost on cell edit
  • Table strikethrough not rendering in cells
  • Table code spans not rendering in cells
  • Table nested formatting (bold+italic) not rendering
  • CSV viewer unnecessary per-frame parsing

v0.2.7

March 2026

View on GitHub

Highlights

Wikilinks & backlinks panelVim mode (optional modal editing)GitHub-style calloutsVisual frontmatter editorWelcome view on first runUnicode complex script support (Phase 1)20+ bug fixes

Added

  • Wikilinks support - [[target]] and [[target|display]] syntax with click-to-navigate
  • Backlinks panel - files linking to current file with graph-based indexing
  • Vim mode - Normal/Insert/Visual modes with hjkl, dd, yy, p, /search, mode indicator
  • GitHub-style callouts - [!NOTE], [!TIP], [!WARNING], [!CAUTION], [!IMPORTANT] with collapsible blocks
  • Welcome view on first run with theme, language, and editor configuration (community PR #80)
  • Check for updates button in Settings → About (manual, offline-first)
  • Visual frontmatter editor - FM tab in outline panel with key-value form interface
  • Ctrl+Mouse Wheel zoom (Ctrl+Scroll for zoom in/out)
  • Large file detection (>10MB warning) and lazy CSV row parsing
  • Single-instance protocol - files open as tabs in existing window instead of new process
  • Unicode complex script font loading for 11 script families (Arabic, Bengali, Devanagari, Thai, Hebrew, Tamil, Georgian, Armenian, Ethiopic, other Indic, Southeast Asian)
  • Script font preferences UI in Settings → Additional Scripts
  • Column resizing for table editing with draggable separators
  • Format toolbar moved to collapsible bottom bar, side panel toggle strip
  • Windows MSI installer overhaul with optional file associations, context menu, add-to-PATH
  • PortableApps.com Format packaging with automated CI build
  • Nix/NixOS flake support for reproducible builds (community PR #92)
  • German and Japanese localization
  • macOS .app bundle in CI (fixes Gatekeeper blocking)

Improved

  • Syntax highlighting no longer re-parses every frame (cache-first approach)
  • Scrollbar accuracy with word wrap (cumulative y-offsets, binary search drag)
  • Smooth scrollbar height that lerps toward actual value (no jumping)
  • Flowchart modularized from 3600-line monolith into 12 focused modules
  • Window controls redesigned with crisp hand-painted icons
  • Table backgrounds use actual rendered row dimensions (no gaps/overlap)
  • Text selection preserved after formatting operations
  • Rendered mode copy no longer inserts phantom spaces

Fixed

  • Crash on large selection delete with word wrap (capacity overflow panic)
  • IME backspace deleting editor text during CJK composition (#91)
  • Light mode text invisible (strong text color fix)
  • List item text not wrapping in rendered/split view (#82)
  • Empty list item causing heading mis-render (#82)
  • CJK rendering after restart with explicit font preference (#76)
  • Images not displaying in rendered mode
  • Binary file crash when opening PNG/JPEG as text
  • Session recovery dialog after "Don't Save"
  • Task list checkboxes showing as ASCII instead of UI elements (#95)
  • Open Folder not working in Flatpak (#96)
  • Linux file dialog portal failure detection (#97)
  • Windows IME backspace deleting editor text (#91)
  • View mode bar hidden on unsupported file types
  • CJK fonts not loading on language switch

v0.2.6.1

February 6, 2026

View on GitHub

Highlights

First code-signed releaseIntegrated terminal workspaceProductivity hubMajor app.rs refactoring into ~15 modules

Added

  • Integrated terminal workspace - multiple sessions, tiling, splits, theming (community PR #74)
  • Productivity hub - quick-access panel for common tasks (community PR #74)
  • Code signing - Windows artifacts signed via SignPath.io, no more SmartScreen warnings
  • Tab drag reorder with visual drop target indicator
  • File watcher auto-reload for externally modified files
  • Undo after text formatting (Bold, Italic, etc.)
  • Multiline blockquote rendering - merged into continuous blocks
  • CJK first-line paragraph indentation (Chinese 2em, Japanese 1em)
  • Memory diagnostics with [MEM] log messages at startup

Improved

  • App.rs refactoring - split 7,600+ line monolith into ~15 focused modules
  • Lazy CJK font loading - reduced startup memory by ~80MB
  • System locale detection - preloads only the one CJK font you likely need
  • Settings CJK change no longer loads all fonts

Fixed

  • Duplicate Line (Ctrl+Shift+D) wrong position
  • Keyboard shortcut conflict: Ctrl+Shift+E (ExportHtml changed to Ctrl+Shift+X)
  • Maximize/restore button icon disappearing on hover
  • Drag-drop image inserting at wrong position
  • Smart paste not working (stale cursor state)
  • Auto-save toggle inconsistency
  • Rendered mode raw editor stuttering on mode switch
  • Keyboard shortcut conflict: Ctrl+Backtick (FormatInlineCode changed to Ctrl+Shift+Backtick)
  • CJK font crash on startup (#63)
  • Portable Windows startup crash (#57)

v0.2.6

January 26, 2026

View on GitHub

Highlights

Custom FerriteEditor - ground-up rewrite100x less RAM (4MB file: 15MB vs 1.5GB)Multi-cursor & code folding now workVirtual scrolling + rope buffer

Added

  • FerriteEditor - custom text editor built with egui drawing primitives
  • Virtual scrolling - only renders visible lines + buffer
  • Rope-based buffer (ropey) - O(log n) text operations
  • Full selection support - click-drag, Shift+Arrow, double/triple-click, Ctrl+A
  • Multi-cursor editing - Ctrl+Click to add cursors
  • Code folding with gutter indicators
  • IME support - Chinese Pinyin, Japanese Romaji, Korean Hangul
  • Bracket matching - windowed O(window) algorithm
  • Document navigation buttons - Top/Middle/Bottom jump
  • Semi-transparent selection highlighting
  • Cursor blink with theme-aware colors
  • Auto-focus new documents

Improved

  • Editor architecture - 2735 lines split into focused modules (43% reduction)
  • Memory: 4MB file adds ~15MB (was 1.5GB with egui TextEdit)
  • Search debouncing (150ms) - no more search on every keystroke
  • Large file optimizations - hash-based modification detection, reduced undo stack
  • Bracket matching - windowed ~20KB extraction (was 4.8GB/sec allocation)
  • Format toolbar connected to FerriteEditor buffer
  • Outline panel and minimap integrated with new scroll system
  • Font settings dynamically update editor

Fixed

  • Critical: 4MB file causing 1.8GB RAM usage (#45)
  • Per-frame document cloning for undo (240MB/sec allocation)
  • Case-insensitive search copying entire document
  • Memory not released on tab close
  • Text jumping to next line when typing at end
  • Cannot scroll to bottom of large files
  • Outline/Minimap cursor landing wrong line
  • Search highlight drift on wrapped lines
  • Box drawing characters (U+2500-U+257F) as squares
  • File browser context menu doubled icons
  • Windows Start Menu pixelated icon

v0.2.5.2

January 20, 2026

View on GitHub

Highlights

Delete Line & Move Line shortcutsmacOS file type associationsWindows MSI installer & portable buildLinux RPM package support

Added

  • Delete Line shortcut (Cmd/Ctrl+D)
  • Move Line Up/Down (Alt+Up/Down)
  • macOS Finder "Open With" integration (.md, .json, .yaml, .toml, .txt)
  • Windows portable build for USB drives
  • Windows MSI installer with Start Menu shortcut
  • Linux RPM package for Fedora/RHEL/CentOS

Improved

  • I18n audit - replaced hardcoded strings with translation keys
  • Removed ~200 orphaned translation keys
  • Locale files now have consistent structure

Fixed

  • Ctrl+X cutting entire document when nothing selected
  • Linux window drag getting mouse stuck
  • Split mode cursor position issues
  • macOS modifier tooltips (now shows Cmd instead of Ctrl)
  • Semantic minimap highlight accuracy

v0.2.5.1

January 17, 2026

View on GitHub

Highlights

Memory optimization: 250MB → 72MB idleMulti-encoding file supportCPU usage: 10% → <1% idleCursor positioning improvements

Added

  • Multi-encoding file support (Latin-1, Windows-1252, Shift-JIS, etc.)
  • Status bar encoding indicator with click-to-change
  • Session restore toggle in settings

Improved

  • CJK fonts now lazy-load on demand (~180MB savings)
  • Custom memory allocators (mimalloc/jemalloc)
  • Tiered idle repaint system for CPU efficiency
  • Galley-based click mapping for better cursor positioning
  • Scroll navigation accuracy in large files

Fixed

  • Memory leaks in viewer states
  • Intel Mac continuous 60fps repaint issue
  • Window title command sent every frame
  • New file dirty flag false positive
  • CJK first-line indentation
  • Linux close button hit-testing

v0.2.5

January 16, 2026

View on GitHub

Highlights

Native Mermaid diagrams (11 types)CSV/TSV viewer with rainbow columnsInternationalization supportSemantic minimap

Added

  • Native Mermaid rendering for 11 diagram types
  • CSV/TSV viewer with auto-delimiter detection
  • i18n infrastructure with Weblate integration
  • Semantic minimap showing actual headings
  • Keyboard shortcut customization
  • Drag-and-drop image support
  • TOC generation (Ctrl+Shift+U)
  • Document statistics panel
  • Snippet system with variables
  • Custom font selection
  • CJK paragraph indentation settings
  • Git status auto-refresh

Improved

  • Split view: both panes now fully editable
  • Complete Mermaid parser rewrite
  • Font selection for regional CJK variants
  • Smart paste for URLs and paths

Fixed

  • Search highlight drift in UTF-8 text
  • Config persistence across restarts
  • Quick switcher mouse support
  • Table editing cursor loss

v0.2.0

January 9, 2026

View on GitHub

Highlights

Split view with dual editingGit integrationZen modeAuto-save & session persistence

Added

  • Split view with both panes editable
  • Native Mermaid diagram support
  • Editor minimap
  • Git status indicators
  • Zen mode (F11)
  • Auto-save functionality
  • Session persistence

Improved

  • Overall performance and stability

Fixed

  • Various stability issues from v0.1.x

v0.1.0

December 20, 2025

View on GitHub

Highlights

First public releaseMulti-tab editingWYSIWYG markdownJSON/YAML tree viewers

Added

  • Multi-tab editing interface
  • WYSIWYG markdown editing
  • JSON/YAML/TOML tree viewers
  • Workspace mode
  • Custom borderless UI
  • Syntax highlighting for 40+ languages