v0.0.1-pre.2: Yet another release
Pre-releaseAnother 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
- Fix URL parsing by @aumetra in #235
- Update dependencies by @aumetra in #236
- Minor size adjustments by @aumetra in #237
- Better ActivityPub compatibility by @aumetra in #238
- Split Kitsune into more subcrates by @aumetra in #239
- Bump vite from 4.2.1 to 4.2.3 in /kitsune-fe by @dependabot in #240
- Update
diesel_migrations_async
to newest git revision by @aumetra in #241 - Add link to a Discord server by @aumetra in #243
- Improve error messages by @aumetra in #245
- Ignore duplicate mentions by @aumetra in #246
- Port OAuth2 endpoints to
oxide-auth
by @aumetra in #242 - Add link previews by @aumetra in #247
- Skip
serde_json::Value
step by @aumetra in #249 - Small optimisations by @aumetra in #250
- Bump semver from 7.3.8 to 7.5.3 in /kitsune-fe by @dependabot in #255
- Improved job scheduler by @aumetra in #254
- Add
target-cpu=native
to the RUSTFLAGS by @aumetra in #259 - Add email verification by @aumetra in #257
- Add middleware for handling JSON to OAuth endpoints by @aumetra in #261
- Add STARTTLS option to configuration by @aumetra in #262
- Added service example file by @SlimeyIceCream in #266
- Add caddy example file. by @SlimeyIceCream in #268
- Replace Dhall with TOML by @aumetra in #271
- Add nixos service module to the flake by @Nemo157 in #270
- Improve error handling by @aumetra in #272
- Do not assume CPU support for aes instructions by @Houkime in #274
- Build for x86-64-v3 in CI by @aumetra in #275
- Bump word-wrap from 1.2.3 to 1.2.4 in /kitsune-fe by @dependabot in #276
- Improve Nix in CI by @aumetra in #277
- GraphQL improvements by @aumetra in #273
- Layered docker images and improved docker-compose deployment by @zeerooth in #282
- Some UI progress by @aumetra in #279
- WIP: make dev shell self-contained by @Houkime in #278
- Validate passwords with zxcvbn in-browser by @aumetra in #286
- Port frontend from
@vue/apollo-composable
to@urql/vue
by @aumetra in #287 - Autogenerate types for GraphQL queries by @aumetra in #288
- Remove errornous type annotation by @aumetra in #289
- Update dependencies by @aumetra in #290
- Implement follow requests by @zeerooth in #283
- Update the in-memory cache to use
moka
by @aumetra in #291 - Bump version to v0.0.1-pre.2 by @aumetra in #292
New Contributors
- @SlimeyIceCream made their first contribution in #266
- @Nemo157 made their first contribution in #270
- @Houkime made their first contribution in #274
- @zeerooth made their first contribution in #282
Full Changelog: v0.0.1-pre.1...v0.0.1-pre.2