Ferrite v0.2.2 is a focused release addressing bugs reported after the v0.2.1 launch, improving command-line interface (CLI) usability, and adding quality-of-life features requested by early users.
After launching v0.2.1 on Reddit/HN, users reported several issues:
- Installation failures on Ubuntu 22.04 LTS due to glibc version mismatch
- CJK text rendering - Korean/Chinese/Japanese characters appear as boxes
- Undo behavior bugs - Ctrl+Z resets scroll, loses focus, needs double-press
- CLI limitations - Can't open files from terminal, no --version flag, verbose logging
- UX friction - Must manually enable split view for each new tab
This release prioritizes stability and developer experience over new features.
- Linux users (especially Ubuntu 22.04 LTS)
- International users (Korean, Chinese, Japanese speakers)
- CLI-focused developers who launch editors from terminal
- Power users who prefer split/preview view as default
- Fix all critical bugs reported in GitHub issues
- Provide standard CLI interface (--help, --version, file arguments)
- Reduce friction for common workflows
- Improve code quality in mermaid.rs module
- New major features (save for v0.3.0)
- Mermaid crate extraction (v0.3.0)
- Custom editor widget (v0.3.0)
- Wikilinks support (v0.3.0)
- Status: Fix merged in release.yml
- Problem: .deb built on Ubuntu 24.04 requires glibc 2.39, but 22.04 has 2.35
- Solution: Changed CI to build on
ubuntu-22.04runner - Files:
.github/workflows/release.yml
- Problem: Korean/Chinese/Japanese characters appear as empty boxes (□)
- Root Cause: Bundled fonts (Inter, JetBrains Mono) lack CJK glyphs
- Solution Options:
- A) System font fallback (preferred - no binary size increase)
- B) Bundle subset CJK font (~1-2 MB)
- C) Bundle full Noto Sans KR (~15 MB) - PR #8 approach
- Recommended: Try system fonts first (Windows: "Malgun Gothic", macOS: "Apple SD Gothic Neo", Linux: "Noto Sans CJK")
- Files:
src/fonts.rs - Testing: Create test file with Korean (한글), Chinese (中文), Japanese (日本語)
- Problem: Ctrl+Z has multiple issues:
- Resets scroll position to top of document
- Editor loses keyboard focus (must click to type again)
- Requires double-press to actually undo
- Root Cause: Likely full document refresh instead of minimal state update
- Solution: Investigate undo implementation, preserve scroll/focus state
- Files:
src/editor/widget.rs,src/state.rs - Testing: Type text, scroll down, delete text, Ctrl+Z - should restore text AND stay at same scroll position
- Problem: String slicing panic when displaying JSON/YAML with multi-byte characters
- Root Cause: Byte-based string slicing on UTF-8 text
- Solution: Use char-based indexing or handle grapheme boundaries
- Files:
src/markdown/tree_viewer.rs - Testing: Open JSON with Norwegian (øæå), emoji (🎉), Chinese characters
- Feature: Open files directly from terminal
- Usage:
ferrite myfile.md # Open single file ferrite file1.md file2.md # Open multiple files as tabs ferrite . # Open current directory as workspace
- Implementation:
- Add
clapcrate for argument parsing - Parse positional arguments as file paths
- Open each as a new tab on startup
- Add
- Files:
src/main.rs,Cargo.toml
- Feature: Standard CLI flags
- Usage:
ferrite --version, -V # Print "Ferrite 0.2.2" ferrite --help, -h # Print usage info
- Implementation:
- Use
clapderive macros - Version from Cargo.toml via env!("CARGO_PKG_VERSION")
- Use
- Files:
src/main.rs,Cargo.toml - Note: About dialog already exists (Help → About), this adds CLI equivalent
- Problem: Launching Ferrite prints ~39 log lines to stderr, cluttering terminal
- Feature: Add
log_levelsetting in config.json - Levels:
DEBUG,INFO,WARN,ERROR,OFF - Default:
WARN(show only warnings and errors) - Implementation:
- Add field to config struct
- Set log filter based on config on startup
- Files:
src/config/settings.rs,src/main.rs
- Problem: Split view must be enabled manually for each new tab
- Feature: Global setting for default view mode
- Options:
Raw- Editor only (current default)Rendered- Preview onlySplit- Side-by-side
- Implementation:
- Add
default_view_modeto config - Apply when creating new tabs
- Respect per-tab overrides
- Add
- Files:
src/config/settings.rs,src/app.rs,src/ui/settings.rs
- Problem: Complex diagrams (50+ nodes) can be slow
- Solution: Profile and optimize hot paths in mermaid.rs
- Files:
src/markdown/mermaid.rs
- Problem: Unused code warnings, large monolithic file
- Solution:
- Remove dead code
- Consider splitting into submodules (parser.rs, layout.rs, render.rs)
- Add documentation comments
- Files:
src/markdown/mermaid.rs
clapwith derive feature for CLI parsing (small, well-maintained)
- None - avoid adding dependencies for this release
- Manual test on Ubuntu 22.04 LTS
- Manual test CJK rendering on Windows/macOS/Linux
- Test undo/redo with scroll position preservation
- Test CLI flags work correctly
- Test config.json log_level actually filters logs
- Config changes must have sensible defaults
- Existing config.json files should work unchanged
- ✅ Ubuntu 22.04 compatibility (done)
- CJK character rendering
- Undo/redo behavior
- CLI file opening
- Version/help flags
- Log level config
- Default view mode
- UTF-8 tree viewer fix
- Mermaid performance
- Mermaid code cleanup
- No installation failures on Ubuntu 22.04
- Korean/Chinese/Japanese text renders correctly
- Ctrl+Z works without scroll reset or focus loss
ferrite --versionprints versionferrite file.mdopens the file- Default log output is minimal (WARN level)
| Issue | Title | Priority |
|---|---|---|
| #3 | Default split view option | P1 |
| #5 | Ctrl+Z behaves weirdly | P0 |
| #6 | Ubuntu 22.04 .deb install | P0 ✅ |
| #7 | CJK characters not displaying | P0 |
| #9 | CLI file opening | P1 |
| #10 | Version/help flags | P1 |
| #11 | Log level config | P1 |
- CJK fonts: System fallback vs bundled font? (Recommend system first)
- CLI parser: Use
clapor hand-roll simple parser? - Log level: Should it also be settable via CLI flag
--log-level? - Default view: Should it be in Settings UI or just config.json?
src/main.rs # CLI parsing, log init
src/config/settings.rs # New config fields
src/fonts.rs # CJK fallback
src/editor/widget.rs # Undo/redo fix
src/state.rs # Undo state management
src/app.rs # Default view mode
src/markdown/tree_viewer.rs # UTF-8 fix
src/markdown/mermaid.rs # Code cleanup
.github/workflows/release.yml # Already updated
Cargo.toml # Add clap dependencyThese items have open Pull Requests or discussions - wait for contributor replies before proceeding:
- Status: Awaiting contributor response
- Issue: PR adds 15.7 MB Noto Sans KR font, significant binary size increase
- Asked: Whether contributor wants to explore alternatives:
- System font fallback (no size increase)
- Font subsetting (reduce to ~1-2 MB)
- Keep current approach if size is acceptable
- Action: Wait for reply before deciding implementation approach for Issue #7
- Status: Awaiting contributor response
- Issue: Renamed macos-x64 to macos-arm64, but build is actually on ARM runner
- Asked: Whether contributor wants to:
- A) Build for both architectures (x64 + ARM)
- B) Keep ARM-only with correct naming
- Action: Wait for reply before merging
When implementing CJK support (Issue #7), check PR #8 status first. If contributor prefers system fonts, implement that approach instead of bundling fonts.