All notable changes to jsonquill will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.1.1 - 2026-02-24
- redraw on terminal resize
1.1.0 - 2026-02-23
- wire horizontal scroll keybindings and render with span clipping
- reset horizontal_offset on vertical movement
- add scroll_left/scroll_right methods to EditorState
- add horizontal_offset field to EditorState
- Documentation: add horizontal scrolling to README
- Documentation: add horizontal scrolling to CLAUDE.md and test data
- Documentation: add horizontal scroll keybindings to help overlay
- Documentation: add horizontal scrolling implementation plan
- Documentation: add horizontal scrolling design
- auto-scroll horizontally to reveal search matches
- make paste test deterministic across platforms
- bumped dependency versions
1.0.0 - 2026-02-19
- bidirectional clipboard paste with empty root replacement
0.14.1 - 2026-02-19
- open empty document when specified file doesn't exist
- add update-release script to push release notes to GitHub
- updated demo
0.14.0 - 2026-02-10
- remove item counts from collapsed previews
0.13.1 - 2026-02-09
- recursively expand nested containers in collapsed previews
0.13.0 - 2026-02-09
- expand collapsed previews to use full terminal width
- add command and search history with Up/Down arrow cycling
- add crossterm backend for Windows support
- Documentation: update platform support to indicate experimental Windows support
- update README
- ci: add nightly build workflow for preview binaries on main
0.12.4 - 2026-02-07
- update ratatui to 0.30 to resolve lru security vulnerability
0.12.3 - 2026-02-06
- preserve search results after exiting search mode
0.12.2 - 2026-02-05
- add cursor navigation to command and search modes
- text search now finds matches inside collapsed nodes
- JSONPath queries now work on JSONL files
- changed video size
0.12.1 - 2026-02-03
- undo system now preserves expansion state and cursor position correctly
- updated video
- demo video
- new logos
- update readme
0.12.0 - 2026-01-31
- gzip compression support complete
- add gzip compression support to save functions
- add write_file_atomic with optional compression
- add gzip auto-detection for stdin input
- add gzip decompression support to load_json_file
- add read_gzipped_file helper function
- add determine_jsonl_format helper function
- Documentation: add gzip compression support to documentation
- Documentation: add gzip compression support design
- Documentation: add motion-to-mark, smart paste, and visual mode to README
- use compact formatting for JSONL in :format command
- Testing: add gzip integration tests
- Testing: add gzip save, format switching, and backup tests
- Testing: add gzipped JSONL file loading test
- Testing: add corrupted gzip file error handling test
0.11.0 - 2026-01-30
- add motion-to-mark, smart paste, and fix UTF-8/highlighting bugs
- add visual selection rendering
- implement repeat command (.)
- implement visual mode operations (d, y, p, P)
- implement visual mode entry and exit
- implement mark set and jump (m and ')
- record jumps for big navigation commands
- implement jump list navigation (Ctrl-o/Ctrl-i)
- add input events for visual mode, marks, jumplist, and repeat
- add state fields for jumplist, marks, visual mode, and repeat
- add Visual mode to EditorMode enum
- add RepeatableCommand enum for '.' key functionality
- add MarkSet data structure for bookmark management
- add JumpList data structure for Ctrl-o/Ctrl-i navigation
- Documentation: update CLAUDE.md with new features
- Documentation: update help overlay with new features
- Documentation: add design for visual mode, marks, jump list, and repeat
- visual selection now excludes children of selected containers
- add must_use attributes to JumpList query methods
0.10.0 - 2026-01-29
- add panic hook to restore terminal on crash
- add :format command for jq-style JSON formatting
- exit command mode when backspacing past colon
- add :set create_backup command and fix backup file extension
- Documentation: add explicit pre-commit checklist for fmt and clippy
- paste corruption and cursor visibility issues
- add :set create_backup and :set nocreate_backup commands
- add tab completion for create_backup settings
- align descriptions in help screen Commands section for better readability
- fix backup file extension from .jsonquill.bak to .bak (now creates file.json.bak)
0.9.0 - 2026-01-29
- add vim-style :e commands for file reloading
- enable JSONL row additions and improve paste operations
- show key name in edit prompt and document data safety
- validate JSON before saving to catch serialization bugs
- add 7 new themes and sort theme picker alphabetically
- add interactive theme picker with live preview
- add Ctrl-f/b, PgUp/PgDn, Home/End navigation keys
- enable format preservation by default
- implement format-preserving serialization
- add preserve_formatting config option
- implement span tracking during JSON parsing
- add original_source field to JsonTree
- add text_span field to NodeMetadata
- add TextSpan struct for tracking byte ranges
- Documentation: reorder :e commands to show non-destructive version first
- Documentation: update help screen, README, and CLAUDE.md for :e commands
- Documentation: add interactive theme picker design
- Documentation: document format preservation feature
- Documentation: fix outdated comments after text_span migration
- Documentation: add format preservation design
- Documentation: add named registers documentation to README
- reset to default expansion state on :e! reload
- improve :e! to preserve cursor position and fix expansion state
- preserve tree expansion state when reloading with :e!
- JSONL integer formatting and root-level add operations
- show (current) label only on original theme in picker
- use pattern matching instead of is_some + unwrap
- preserve tree expansion state when deleting nodes
- make G jump to line to match vim behavior
- correct
aandocommands to add containers instead of scalars - preserve trailing newline in saved files
- correct span tracking in parser to prevent corruption
- correctly propagate inside_modified_container flag in format preservation
- disable format preservation due to data corruption
- don't extract spans from modified containers
- correct escape handling and char indexing in SpanTracker
- edit readme
- Testing: add comprehensive document corruption tests
- style: run cargo fmt
- Testing: add comprehensive format preservation integration tests
0.8.0 - 2026-01-27
- add register selection UI, delete history, and tests
- update paste operations to use register system
- update yank operations to use register system
- add register fields to EditorState
- add append mode and history operations
- add RegisterSet with get/set operations
- add RegisterContent struct
- Documentation: document named register feature
- Documentation: add detailed implementation plan for named registers
- Documentation: add named registers design
- Documentation: add Homebrew installation instructions
- auto-detect JSONL format when piping to stdin
- add temp_container field for add container operations
- Testing: add comprehensive tests for JSONL parsing
- Merge branch 'feature/named-registers'
0.7.0 - 2026-01-26
- clear search results on non-search keys
- add clear_search_results method
- add color highlighting to path in status bar
- display current path in status bar
- add public API for getting current path in dot notation
- add standalone release-notes generation script
- Documentation: document search results auto-clear behavior
- Documentation: add design for clearing search info on non-search keys
- Documentation: document path color highlighting in status bar
- Documentation: add design for colored path in status bar
- Documentation: update plan to reflect actual implementation order
- Documentation: document current path in status bar feature
- Documentation: add design for current path in status bar
- Documentation: document release-notes script
- use unique delimiter to avoid parsing conflicts
- filter Co-Authored-By lines from release notes
- extract full commit messages in release notes generation
- Testing: use text search in clear_search_results test per spec
- style: apply cargo fmt formatting
- Testing: add test for colored path in status bar
- style: format multi-line format! macro in status line
0.6.0 - 2026-01-25
- add tab-completion for :theme and :set commands
- add six popular color themes
- add parent focus command (H)
- add depth-based navigation with w and b commands
- generate GitHub-style release notes in ver script
- correct depth calculation for w/b commands
0.5.0 - 2026-01-25
- add relative line numbers (:set relativenumber)
- add smart case search and wrapping indicator
- add key search commands (*, #)
- add sibling jumping commands (0/^, $)
- add screen positioning commands (zz, zt, zb)
- add path copying commands (yp, yb, yq)
- add automatic changelog generation to ver script
- Documentation: update README with new navigation and search features
- Documentation: simplify CLAUDE.md by referencing global Rust guidelines
- fix awk error in ver script with multi-line strings
0.4.0 - 2026-01-25
- JSONPath Structural Search: Query JSON documents by structure, not just text content
:path <query>command for JSONPath queries (e.g.,:path $.store.book[*].author):jp <query>short alias for:path:find <query>to execute text search from command mode:findto enter text search mode (equivalent to/)
- JSONPath Syntax Support:
- Root selector:
$ - Child access:
.propertyor['property'] - Wildcard:
*for all children - Recursive descent:
..for all descendants - Array slicing:
[start:end]for array ranges - Multiple properties:
['name','email']
- Root selector:
- UI Enhancements:
- Status line now shows search type (Text/JSONPath)
- Navigate through JSONPath results using
n(next match) - Help screen updated with JSONPath documentation
- New Module:
src/jsonpath/with complete JSONPath implementation- AST (Abstract Syntax Tree) definitions
- Tokenizer and parser
- Query evaluator
- Error handling
- Search System Improvements:
SearchTypeenum to track search mode (Text vs JSONPath)- Extended
EditorStatewith JSONPath search capabilities - Unified search navigation with
nkey
- Reorganized search sections in README and help screen for better clarity
- Simplified CLAUDE.md by referencing global Rust guidelines
:findcommand now properly accepts search query arguments
- Added comprehensive JSONPath integration tests
- Full test coverage for parser, evaluator, and search integration
(Release notes to be added)