Releases: Icelk/kvarn
v0.6.3
v0.6.2
v0.6.2
Many bugfixes to reverse proxy, including websockets finally working and body
streaming for large files (e.g. movies through Jellyfin). Zstd is also
supported now, and compression levels are generally more fitting.
Added
- Zstd compression
- Reverse proxy body streaming for large files
- Option to make systemd services work with a bug in io_uring
- Sometimes a double-free happens after Kvarn has finished. This can be
ignored, and so a flag to ignore that was added to kvarnctl
- Sometimes a double-free happens after Kvarn has finished. This can be
Improved
- Using official Quinn instead of the kvarn fork.
- zero copying
- less allocations
- more robust implementation
- Dynamic compress based on if the response is cached or not.
- Make io_uring even faster with less allocations
- Performance related to HTTP/1 requests and responses. Also useful for other
HTTP versions when reverse proxy is used (HTTP/1 is used for reverse proxy). - Updated dependencies
Fixed
- Reverse proxy websockets.
- Reverse proxy for Jellyfin
- Auto cert made more robust
- Auto cert in development behaves better
- Auto cert private key having permission 644 instead of 600
- kvarn_signal (used by kvarnctl) fixed commands sometimes not being sent
v0.6.1
v0.6.0
v0.6.0
This release adds support for HTTP/3, io_uring, automatic Let's Encrypt
certificate, and Mölla is released, a server binary
which reads a config and starts Kvarn.
Kvarn is the first server with HTTP/3 AND io_uring, bringing the best possible
performance to Linux servers.
Added
- HTTP/3
- io_uring
- Automatic certificate
- Stream body extension,
for streaming large files which don't fit in memory. - Kvarn Chute built in syntax highlighting
- A monoio-esque runtime for best web performance
Improved
- Internal stability
- Performance
- Use CompactString to reduce allocations.
- Use MokaCache instead of a shitty hashmap. (cache invalidation is better)
- Make CSP more flexible
- Caching of files, based on mtime.
Fixed
- kvarnctl and restarts on macOS.
- Change certificates live, in production. Enables auto certificate without
restarting the server.
v0.5.0 auth & WebSockets
This release adds support for WebSockets.
It's trivial to add WebSocket support for both HTTP and HTTPS; an echo socket takes 15 lines to implement,
thanks to Kvarn's robust extension system.
A new extension has also been developed, namely kvarn-auth
, a fast and easy-to-configure authentication service.
You just need to provide a callback which returns whether or not the user with the provided password is authorized,
and any other data associated with that user (e.g. it's permissions).
Added
- Simple WebSocket integration.
- Secure and fast authentication for all your Kvarn instances.
Supports multiple authentication systems per host. - Simpler PHP for specific paths wich need to correspond to a certain directory.
- HTML id
toc
tokvarn-chute
${toc}
generation.
Improved
- URL rewrite in reverse-proxy treats backticks as quotes when adding to the path.
- Various documentation improvements.
- Don't send
vary
andcontent-type
headers for responses with no body.
Fixed
- WebDAV methods are allowed.
- Issues with ALPN (we didn't advertise HTTP/1.1).
- Add
<!DOCTYPE html>
to default errors. - Reading HTTP/1.1 request bodies.
- CORS preflight is by default allowed from the same site.
Changed
CspValueSet::scheme
now takes a string.- The priority of the
http_to_https
extension is bumped.
(the cause of this was partially to have priority overkvarn-auth
's redirect to login page)
v0.4.1
A small patch to fix a panic in HTTP request parsing.
All crates using kvarn_utils
should upgrade it to =0.4.1
if you use the function headers
and accept arbitrary input.
Fixed
- Fixed panic when parsing malicious HTTP request.
Changed
- Default path for
kvarnctl
.- In root contexts, it was moved from
/tmp/kvarn.sock
to/run/kvarn.sock
- In user contexts, it was moved from
/tmp/kvarn.sock
to/run/user/<uid>/kvarn.sock
- This fixed the socket being garbage collected by the OS.
- In root contexts, it was moved from
v0.4.0 ctl
Production ready implementations.
A smaller release to improve the experience working with Kvarn.
Notably, a kvarnctl
executable allows you to change a running Kvarn instance, including restarting the server in-place, with zero downtime.
Added
- A
kvarnctl
executable to control the running Kvarn instance.- Implement all methods used in
kvarn-reference
- Plugins to add interfaces to Kvarn which can be accessed through
kvarnctl
. - Shell completion for most commonly used methods in
kvarnctl
.
- Implement all methods used in
- Extension system doesn't use unsafe!
- Reading host names from certificate. (commit)
- Graceful restart through systemd service
- doc_cfg (implemented through use of doc_auto_cfg).
- noonce implementation
- Parallel handling of requests per connection.
- Control over which compression method to prefer/use. (commit)
- Kvarn Search, an easy to integrate site search engine for Kvarn.
- API to access/remove extensions after they've been mounted.
- Added option to change directory where Kvarn gets it's error responses from.
- Shell completion to all binaries.
Changed
Fixed
- Correct PHP/FastCGI implementation.
- Percent decoding of requests
- Fixed small bug where Kvarn would emit multiple
charset=utf-8
attributes forcontent-type
. - Dependency clean-up.
- Proper handling of clients closing HTTP/2 streams.
- Fix issues with several present extensions.
utils::parse::query
.- All components of Kvarn are now shut down when you drop Kvarn's references. No memory leaks.
- Hosts are now recognized even if they are accessed through their FQDN.
Improved
- Stability improvements
- Production ready reverse proxy.
- Improvements to cargo feature in documentation.
- Major improvements to Chute
- Removed insecure
chrono
dependency in favour oftime
. - Removed many redundant allocations.
- Improve template performance.
- Improved
handle_cache
. You can now just get a response from Kvarn, with a guarantee of no error arising. - Cache performance
- Limiting performance
- Testing on CI for all crates.
- Debug implementations are less prone to errors and easier to maintain.
v0.3.0 Ext
This release is 7 long months in the making.
Extensions
Completely reworked the extension system to be more useful. Now, most things not related to the core is done using extensions.
The Kvarn extensions library uses the API to add several impressive features to Kvarn.
The API is also used for CORS and CSP.
Performance
General performance is greatly improved in this release. Everything I can think of is optimized to a reasonable extent.
CI
We now use GitHub Actions as the CI for Kvarn. This increases code quality (considering the strict Clippy rules) and test validation.
That brings us on to...
Testing and Documentation
A lot of work has gone into writing tests and documenting all public items in Kvarn,
Caching
The caching capabilities of Kvarn have been increased. Finer control over cache lifetime allows for more efficient caching.
Varied cache
Now, Kvarn also implements the vary
header. You can cache several responses per path if you configure the vary capability of Kvarn.
Graceful shutdown and handover
This could be a release in it's own!
Now, you can rebuild Kvarn and deploy a new version, without clients ever noticing.
The architecture of Kvarn's new graceful shutdown allows for seamless handover (on Unix platforms), not leaving 1µs of downtime!
Honourable mentions
- Byte ranges
- Reverse-proxy (extensions lib)
if-modified-since
support- Better structure; split into several crates.
- IPv6
- Workflow updates
- Much more...
Chute
I've also worked on Chute, Kvarn's MarkDown to HTML converter. With it, I've written large parts of https://kvarn.org and https://icelk.dev.
It works as a great and performant way to set up a blog, general-purpose website, or anything where you need to push out content fast.
I've included binaries for x64 Linux, ARM-64 Linux, and x64 Windows below.
Support
I will keep this release supported if any issues are found. This release is considered a stable release, unlike the last one.
See you next release!