# Changelog
All notable changes to this project will be documented in this file.
_The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)._
## [0.3.3] - 2026-01-01
### Added
- Ctrl + / to comment / uncomment lines ([#416](https://github.com/ilai-deutel/kibi/pull/416))
- Strong stack protection in release binaries ([#535](https://github.com/ilai-deutel/kibi/pull/535))
### Removed
- Build scripts are excluded from published crates ([#538](https://github.com/ilai-deutel/kibi/pull/538))
## [0.3.2] - 2025-11-23
### Added
- Support for [`NO_COLOR` standard](https://no-color.org): all color output will
be disabled if the `NO_COLOR` environment variable is set ([#499](https://github.com/ilai-deutel/kibi/pull/499))
- Ctrl + R can now remove the very last line ([#498](https://github.com/ilai-deutel/kibi/pull/498))
### Changed
- Terminal mode is now restored on panic ([#496](https://github.com/ilai-deutel/kibi/pull/496))
- No-op code re-organization to facilitate testing and reduce LOC (
[#496](https://github.com/ilai-deutel/kibi/pull/496), [#510](https://github.com/ilai-deutel/kibi/pull/510))
- Minimum supported Rust version bumped to v1.91 ([#497](https://github.com/ilai-deutel/kibi/pull/497))
### Fixed
- Regression: invalid behavior when pressing right/delete at end of line ([#491](https://github.com/ilai-deutel/kibi/pull/491))
- Unnecessary screen refresh, blinking welcome message when opening existing file
([#520](https://github.com/ilai-deutel/kibi/pull/520))
## [0.3.1] - 2025-11-01
### Added
- Support for end-of-options delimiter `--` (following [POSIX.1-2024 12. Utility
Conventions](https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap12.html)),
allowing Kibi to be used as the editor for the _`sudoers`_ file with
[`visudo`](https://www.man7.org/linux/man-pages/man8/visudo.8.html) ([#481](https://github.com/ilai-deutel/kibi/pull/481))
### Fixed
- Crash when backspace was pressed in find mode with empty search field ([#482](https://github.com/ilai-deutel/kibi/pull/482))
## [0.3.0] - 2025-10-26
### Added
- Delete line with Ctrl + R ([#114](https://github.com/ilai-deutel/kibi/pull/114))
- Copy, cut and paste lines with Ctrl + C,
Ctrl + X, Ctrl + V ([#207](https://github.com/ilai-deutel/kibi/pull/207))
- Ctrl + ←/→ moves to the previous/next word ([#214](https://github.com/ilai-deutel/kibi/pull/214))
- Syntax highlighting configurations for C ([#98](https://github.com/ilai-deutel/kibi/pull/98),
[#181](https://github.com/ilai-deutel/kibi/pull/181)), Nim ([#106](https://github.com/ilai-deutel/kibi/pull/106)),
C# ([#211](https://github.com/ilai-deutel/kibi/pull/211)), C++ ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
CoffeeScript ([#262](https://github.com/ilai-deutel/kibi/pull/262)), CSS
([#211](https://github.com/ilai-deutel/kibi/pull/211)), D ([#262](https://github.com/ilai-deutel/kibi/pull/262)),
Dart ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Elixir ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
Fish ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Go
([#211](https://github.com/ilai-deutel/kibi/pull/211)), Groovy
([#262](https://github.com/ilai-deutel/kibi/pull/262)), Haskell
([#211](https://github.com/ilai-deutel/kibi/pull/211)), HTNL ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
Java ([#211](https://github.com/ilai-deutel/kibi/pull/211)), JavaScript ([#108](https://github.com/ilai-deutel/kibi/pull/108)),
Julia ([#262](https://github.com/ilai-deutel/kibi/pull/262)), Kotlin ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
LRC [#433](https://github.com/ilai-deutel/kibi/pull/433), Lua ([#108](https://github.com/ilai-deutel/kibi/pull/108),
[#277](https://github.com/ilai-deutel/kibi/pull/277)), Markdown ([#152](https://github.com/ilai-deutel/kibi/pull/152)),
MATLAB ([#262](https://github.com/ilai-deutel/kibi/pull/262)), Nix ([#262](https://github.com/ilai-deutel/kibi/pull/262)),
NoSQL ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Nushell ([#262](https://github.com/ilai-deutel/kibi/pull/262),
[#433](https://github.com/ilai-deutel/kibi/pull/433)), OCaml ([#262](https://github.com/ilai-deutel/kibi/pull/262)),
Perl ([#211](https://github.com/ilai-deutel/kibi/pull/211)), PHP ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
PowerShell ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Processing ([#262](https://github.com/ilai-deutel/kibi/pull/262)),
PRQL ([#369](https://github.com/ilai-deutel/kibi/pull/369)), R ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
Racket ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Ruby ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
Raku ([#262](https://github.com/ilai-deutel/kibi/pull/262)), RSS [#433](https://github.com/ilai-deutel/kibi/pull/433),
Scala ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
SQL ([#211](https://github.com/ilai-deutel/kibi/pull/211)), Swift ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
TypeScript ([#211](https://github.com/ilai-deutel/kibi/pull/211)), XML ([#211](https://github.com/ilai-deutel/kibi/pull/211),
[#449](https://github.com/ilai-deutel/kibi/pull/449)), YAML ([#211](https://github.com/ilai-deutel/kibi/pull/211)),
Zig ([#262](https://github.com/ilai-deutel/kibi/pull/262), [#400](https://github.com/ilai-deutel/kibi/pull/400)),
ZSH ([#211](https://github.com/ilai-deutel/kibi/pull/211))
- Support for WebAssembly ([#159](https://github.com/ilai-deutel/kibi/pull/159))
- Binary optimization for release: enable LTO ([#346](https://github.com/ilai-deutel/kibi/pull/346));
single codegen unit, abort on panic, strip symbols ([#464](https://github.com/ilai-deutel/kibi/pull/464))
- `kibi --version` includes git revision when available ([#176](https://github.com/ilai-deutel/kibi/pull/176))
- Extension-less dotfiles can now have a syntax highlight configuration ([#449](https://github.com/ilai-deutel/kibi/pull/449))
- Minimum Supported Rust Version (MSRV) in `Cargo.toml` ([#122](https://github.com/ilai-deutel/kibi/pull/122),
[#133](https://github.com/ilai-deutel/kibi/pull/133), [#175](https://github.com/ilai-deutel/kibi/pull/175),
[#191](https://github.com/ilai-deutel/kibi/pull/191), [#306](https://github.com/ilai-deutel/kibi/pull/306),
[#307](https://github.com/ilai-deutel/kibi/pull/307), [#343](https://github.com/ilai-deutel/kibi/pull/343),
[#442](https://github.com/ilai-deutel/kibi/pull/442))
### Changed
- Syntax highlighting configuration for V ([#108](https://github.com/ilai-deutel/kibi/pull/108))
- Use alternate screen buffer to avoid flicking, restore the terminal content on
exit ([#310](https://github.com/ilai-deutel/kibi/pull/310))
- Various no-op code changes to reduce line count ([#127](https://github.com/ilai-deutel/kibi/pull/127),
[#151](https://github.com/ilai-deutel/kibi/pull/151), [#154](https://github.com/ilai-deutel/kibi/pull/154),
[#191](https://github.com/ilai-deutel/kibi/pull/191), [#229](https://github.com/ilai-deutel/kibi/pull/229),
[#280](https://github.com/ilai-deutel/kibi/pull/280), [#335](https://github.com/ilai-deutel/kibi/pull/335),
[#331](https://github.com/ilai-deutel/kibi/pull/331), [#330](https://github.com/ilai-deutel/kibi/pull/330),
[#422](https://github.com/ilai-deutel/kibi/pull/422)) and to fix Clippy warnings
([#175](https://github.com/ilai-deutel/kibi/pull/175), [#188](https://github.com/ilai-deutel/kibi/pull/188),
[#190](https://github.com/ilai-deutel/kibi/pull/190), [#206](https://github.com/ilai-deutel/kibi/pull/206),
[#241](https://github.com/ilai-deutel/kibi/pull/241), [#249](https://github.com/ilai-deutel/kibi/pull/249),
[#321](https://github.com/ilai-deutel/kibi/pull/321), [#334](https://github.com/ilai-deutel/kibi/pull/334),
[#345](https://github.com/ilai-deutel/kibi/pull/345), [#385](https://github.com/ilai-deutel/kibi/pull/385))
- Rust edition: 2024 ([#442](https://github.com/ilai-deutel/kibi/pull/442))
### Fixed
- Crash when opening a new file ([#287](https://github.com/ilai-deutel/kibi/pull/287))
- Error message when an invalid option is provided ([#150](https://github.com/ilai-deutel/kibi/pull/150))
- Error message when trying to open a special file, e.g. UNIX devices or directories
([#159](https://github.com/ilai-deutel/kibi/pull/159))
- Config parsing with invalid durations ([#340](https://github.com/ilai-deutel/kibi/pull/340)),
invalid tab size ([#450](https://github.com/ilai-deutel/kibi/pull/450))
- Emit warnings instead of panicking for invalid configurations ([#449](https://github.com/ilai-deutel/kibi/pull/449))
## [0.2.2] - 2021-02-12
### Added
- Syntax highlighting configuration for V ([#78](https://github.com/ilai-deutel/kibi/pull/78))
- Add the ability to execute external commands from the editor ([#83](https://github.com/ilai-deutel/kibi/pull/83))
- Improve file opening error messages for config files ([#91](https://github.com/ilai-deutel/kibi/pull/91))
### Fixed
- Android: fix a bug ([#87](https://github.com/ilai-deutel/kibi/issues/87))
related to a SELinux policy that would cause Kibi to crash on certain Android
versions when setting the termios ([#92](https://github.com/ilai-deutel/kibi/pull/92)).
## [0.2.1] - 2020-10-05
### Added
- Add syntax configuration `singleline_string_quotes`, which specifies the list
of characters to consider as quote (e.g. `", '` for Rust, `"` for JSON) ([#46](https://github.com/ilai-deutel/kibi/pull/46))
### Changes
- Internal code changes to reduce the binary size, and remove dependencies `nix`
and `signal-hooks` ([#48](https://github.com/ilai-deutel/kibi/pull/48),
[#49](https://github.com/ilai-deutel/kibi/pull/49), [#50](https://github.com/ilai-deutel/kibi/pull/50))
### Removed
- Remove boolean syntax configuration `highlight_strings`; use
`singleline_string_quotes` instead ([#46](https://github.com/ilai-deutel/kibi/pull/46))
## [0.2.0] - 2020-04-24
### Added
- Add support for Windows 10
([#26](https://github.com/ilai-deutel/kibi/issues/26),
[#34](https://github.com/ilai-deutel/kibi/issues/34), [#36](https://github.com/ilai-deutel/kibi/issues/36))
- Add a `--version` argument to the binary ([#31](https://github.com/ilai-deutel/kibi/pull/31))
### Changed
- Simplify `Row::update_syntax()`
- Rename the `multiline_comment_delim` configuration field to `multiline_comment_delims`
- Implement the `Default` trait for `Config`
([#12](https://github.com/ilai-deutel/kibi/issues/12)), `Editor`
([#20](https://github.com/ilai-deutel/kibi/issues/20)), and the `Debug` trait
for `Error` ([#35](https://github.com/ilai-deutel/kibi/issues/35))
- The _find_ command now searches in `row.chars`, not `row.renders`. A _tab_ will
no longer be matched when searching for a space
([#23](https://github.com/ilai-deutel/kibi/issues/23))
- Use the XDG base directory specification for configuration files
(global configuration, syntax highlighting configuration) ([#42](https://github.com/ilai-deutel/kibi/issues/42))
### Fixed
- Fix syntax highlighting issue when an empty line is inserted in the middle of a
multi-line string or a multi-line comment ([#7](https://github.com/ilai-deutel/kibi/issues/7))
- Fix crash when inserting a new line in the middle of a row ([#13](https://github.com/ilai-deutel/kibi/issues/13))
- Fix comments ([#12](https://github.com/ilai-deutel/kibi/issues/12), [#17](https://github.com/ilai-deutel/kibi/issues/17))
- Fix row not being updated after pressing backspace; fix syntax highlighting
updates when inserting a new line ([#15](https://github.com/ilai-deutel/kibi/issues/15))
- Fix clippy lint warnings
([#21](https://github.com/ilai-deutel/kibi/issues/21),
[#42](https://github.com/ilai-deutel/kibi/issues/42), [#43](https://github.com/ilai-deutel/kibi/issues/43))
- Fix match highlight when UTF-8 characters are present in the row ([#18](https://github.com/ilai-deutel/kibi/issues/18))
## [0.1.2] - 2020-02-13
### Added
- Add support for UTF-8 characters ([#1](https://github.com/ilai-deutel/kibi/issues/1))
- Add a command to duplicate the current row (Ctrl + D)
- Syntax highlighting configuration for `bash`
### Fixed
- Fix path for system-wide configuration file
- Fix final new line being omitted during `load()`
- Trim spaces in the extensions enumeration in the syntax config file
- Fix erroneous field in example configuration `config.ini`
## [0.1.1] - 2020-02-13
kibi v0.1.1 is a small patch release that includes a minor fix to the
[crates.io package metadata](https://crates.io/crates/kibi).
### Added
- Add a config file example
### Fixed
- Fix `Cargo.toml` metadata, in particular incorrect categories
## [0.1.0] - 2020-02-11 _\[YANKED\]_
Initial release
[0.3.3]: https://github.com/ilai-deutel/kibi/releases/tag/v0.3.3
[0.3.2]: https://github.com/ilai-deutel/kibi/releases/tag/v0.3.2
[0.3.1]: https://github.com/ilai-deutel/kibi/releases/tag/v0.3.1
[0.3.0]: https://github.com/ilai-deutel/kibi/releases/tag/v0.3.0
[0.2.2]: https://github.com/ilai-deutel/kibi/releases/tag/v0.2.2
[0.2.1]: https://github.com/ilai-deutel/kibi/releases/tag/v0.2.1
[0.2.0]: https://github.com/ilai-deutel/kibi/releases/tag/v0.2.0
[0.1.2]: https://github.com/ilai-deutel/kibi/releases/tag/v0.1.2
[0.1.1]: https://github.com/ilai-deutel/kibi/releases/tag/v0.1.1
[0.1.0]: https://github.com/ilai-deutel/kibi/releases/tag/v0.1.0