Skip to content

Releases: Icelk/kvarn

v0.6.3

06 Nov 19:20
Compare
Choose a tag to compare

v0.6.3

Fixed compilation when the zstd feature was disabled, but other compression features were enabled.

v0.6.2

06 Nov 19:19
Compare
Choose a tag to compare

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

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

06 Nov 19:19
Compare
Choose a tag to compare

Hotfix related to Windows builds failing.

v0.6.0

06 Nov 19:17
Compare
Choose a tag to compare

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

29 Aug 16:43
Compare
Choose a tag to compare

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 to kvarn-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 and content-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 over kvarn-auth's redirect to login page)

v0.4.1

26 May 11:31
Compare
Choose a tag to compare

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.

v0.4.0 ctl

24 Apr 13:39
Compare
Choose a tag to compare

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

Changed

  • Constructor methods on CORS and CSP.
  • Make templates use $[] instead of [].

Fixed

Improved

  • Stability improvements
  • Production ready reverse proxy.
  • Improvements to cargo feature in documentation.
  • Major improvements to Chute
  • Removed insecure chrono dependency in favour of time.
  • 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

05 Nov 21:18
Compare
Choose a tag to compare

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!