# Chawan 0.4.0
Version 0.4.0 of the Chawan TUI browser has been released.
A tarball of the source tree is available here. Please refer to the README.md file for compilation instructions.
A static binary distribution for
amd64 Linux
also exists.
To install it, extract the archive somewhere and run make install as root.
(To uninstall, run make uninstall.)
The same distribution is also available as a .deb package.
## Breaking changes
In 0.4.0, the default paths for the urimethodmap file no longer include
W3M-specific paths. Users who relied on this should either copy the
urimethodmap over, symlink them, or change the external.urimethodmap
setting. See this post
for details.
In addition, the (Chawan-specific) $MAILCAP_URL environment variable is
no longer set for mailcap entries, so users who depend on it should
change
it to %u.
## What's new
This release mostly focuses on refactoring, but it also includes some visible improvements:
Overhauled keybinding format to support named keys like
Up,Down, etc. It is mostly compatible with the old system; the only incompatibility is that multi-key combinations starting with a capital letter (e.g.Gg), now have to be written with a space inbetween (e.g.G g). A literal space is represented asSPC. (See cha-config(5) for details.)Sixel display now elides repaint on scroll when possible, resulting in performance comparable to Kitty graphics. Also, Chawan can now skip frames when the terminal (or link) cannot keep up with displaying them. Useful on slow computers.
Support for CSS nesting. (I wanted to wait with this until there is a finished standard for it, but some website authors don't seem to care about such trivialities, so I just hacked on it until it seemed to match what mainstream browsers do.)
Some significant layout bugs regarding image sizing and handling of
overflow: prehave been fixed. (And some others that would take too much space to explain.)
Some less visible, but still notable changes:
Clicking on anchors pointing to the current page no longer forks new processes. (Impressive as making a deep clone of the current page is, it was a maintenance nightmare; a shallow clone works better.)
The pager/command API has been rewritten in JS. The primary goal was to stop mixing the QJS and Nim GCs, but this has also made adding new commands easier.
A new config parser. Previous versions parsed the file into a hash map before actually assigning the result to the Config object, but a) this was slow, b) it discarded line information. The new parser parses TOML types directly into config types, and can report all errors as soon as it encounters them (with line info).
This is far from an exhaustive list of all changes. For a full changelog, see the NEWS file.
## What's next
I got bogged down in yak shaving for this release, so the plan for persistent connection support has been postponed. Nevertheless, its absence is still the main usability issue in my eyes, so I want to work on that soon.
Of course I have many other ideas too, but we'll see how much of those will be finished by the next release.