Kitsune

v0.0.1-pre.2: Yet another release

v0.0.1-pre.2 Aug 13 2023 at 15:34 UTC

Another release without that many big changes. I had some personal stuff to get through over last weeks.
This release was made to have one clean cut-off point to not forget about things that happened and to keep the changelog somewhat manageable.
Also I wanted to keep the two month release "schedule"

Feel free to join one of the chat options to chat with us!
Both of them are connected via a bridge, so it doesn't matter which one you join

Highlights

Switch from Dhall to TOML

We are now using TOML for our configurations.

Dhall had issues with bad error messages, a more unfamiliar syntax for a lot of people, and the requirement to manually write types ourselves.
TOML, on the other hand, is a simple configuration format that is well-known and ubiquitous.

Our documentation isn't updated yet, we are tracking it in #281

More general ActivityPub federation

Kitsune now has basic federation with non-microblogging services such as Lemmy and PeerTube.
This federation includes:

  • Loading profiles
  • Loading videos and longer-form articles
  • Parsing post bodies as Markdown, when requested
  • Some special-case formatting for articles to link back to the source (similar to what Akkoma does)

Link previews

You know these nice little cards Mastodon has? Where it shows you an image and a bit about the link that was just posted?
Kitsune can do that, too!

Thanks to the generosity of @novacrazy, we now make use of Lantern Chat's embed service for fetching link metadata.
The service can be found here: https://github.com/Lantern-chat/embed-service

New job scheduler

This release includes a new job scheduler: Athena.

The scheduler aims to improve issues with contention and database utilization our old approach had.
Our old approach used to poll the database every few seconds for new jobs and lock rows exclusively.

Since we also ordered the jobs by a date key, this meant that locked rows would make each job runner wait.

We resolved this by outsourcing the job queuing to Redis but keeping the context in the database for latency reasons.
Redis Streams and Lua scripts are used to ensure atomicity and that we don't accidentally lose jobs, even with catastrophic failures, such as crashes.

This means that we require a Redis installation though

Email verification

You can now require email verification for new accounts by configuring an email server.

These Emails are somewhat nice looking HTML emails with a plain text fallback.
We use mrml to not have to deal with the frankly ancient HTML you'd have to write for Email clients.

Improved OAuth2 implementation

Previously we rolled our own OAuth2 logic. The logic was not entirely perfect.
With this release we ported Kitsune to the oxide-auth library, helping us provide standards-compliant OAuth2 flows.

Note: We did implement a hack to enable JSON-encoded bodies for OAuth endpoints, even though that is technically against the standard, since a lot of Mastodon clients did that.

Docker images and Docker Compose deployment

We used to have Docker images and a Docker Compose file, these weren't maintained and not kept up-to-date with newer changes.
Thanks to @Zeerooth all the Docker files are now up-to-date and use cargo-chef for improved build speed utilizing Docker's layer caching.

Smaller changes that might be of note

UI improvements

The UI has progressed. Even if not immediately visible, we now have:

  • Working authentication
  • a 404 page (thanks @Zeerooth)
  • Nicer registration forms
  • A new, smaller GraphQL client

In-memory cache changes

@tesaguri recommended switching over our primitive self-rolled in-memory cache with a more sophisticated library.

We chose moka which is giving us simplified internals and less faulty key-evictions, meaning Kitsune should be that little bit faster when using the in-memory cache.

Kitsune deployable via Nix

@Nemo157 updated our Nix flake, so you can now deploy Kitsune as a Nix service via the flake.
See #270 for an example.

General performance improvements

We make use of smol_str string inlining and SIMD-accelerated libraries wherever possible.
Our JSON parsing is done via simd-json, UUIDs are parsed via uuid-simd, Base64 is handled via base64-simd, and Hex encoding is powered by hex-simd.

The following SIMD libraries we use are all maintained by a single person, @nugine, big props to him:

  • base64-simd
  • hex-simd
  • uuid-simd

This release has incompatible configuration and database changes to the previous release. Until we publish a full first alpha, we reserve us the right to continue making these kinds of breaking changes.


Now follows the GitHub-generated changelog:

What's Changed

New Contributors

Full Changelog: https://github.com/kitsune-soc/kitsune/compare/v0.0.1-pre.1...v0.0.1-pre.2