The Mastodon-compatible API is at a stable stopping point, so I have removed the gating with_mastodon_api build flag and made it generally available.

I use the API daily via a couple different client apps. What works, works. There are known limitations, most of them rooted in architectural differences between Mastodon and Ktistec. For example, Mastodon and Ktistec manage media differently. In Ktistec, there is no simple way to upload and manage media apart from creating a post. That difference will take some work to bridge.

Here's the full changelog for this release:

Added

  • Mastodon-compatible API endpoints:
    • /api/v1/accounts
    • /api/v1/accounts/lookup
    • /api/v1/accounts/:id
    • /api/v1/accounts/:id/statuses
    • /api/v1/accounts/:id/following
    • /api/v1/accounts/:id/followers
    • /api/v1/accounts/relationships
    • /api/v1/follow_requests
    • /api/v1/polls/:id/votes
    • /api/v1/preferences

Fixed

  • Correctly resolve keyId from Signature header for inbox verification.

Changed

  • Support both offset and cursor-based pagination in JSON collections.
  • Switch following/followers pages to cursor-based pagination.

Credit goes to this thread for inspiring me to review my signature verification. There is now one more correct implementation. 😉

The next release will focus on cleaning up the internals. Ktistec is just under 100,000 lines of code, 307 source files, and 195 spec files (7030 tests). With one maintainer, the only way to stay sane is by ruthlessly refactoring and paying down the debt!

#ktistec #crystallang #activitypub #fediverse

Evan Prodromou (@[email protected])

@[email protected] tell me that when Fedify is validating an HTTP Signature you load the key identified by the `keyID`, get its `owner`, and then load the owner ActivityPub object. 🙏🏼

CoSocial
The Weekly Challenge 366: The Time of the Count is Over

I’ve been doing the Weekly Challenges. The latest involved prefix testing and time validation. (Note that this ends today.)

RogerBW's Blog
Crystal is good for humans and LLMs.

Crystal is a compiled language inspired by Ruby. I kept my eye on it for quite a while. And I made myself productive in it in one day.

The amount of code you have to review and refactor has grown by factors.
So recently I've been looking for something easy to review, idiomatic and portable.

A ~10 years ago I had some experience with Ruby. I liked the language but the market decided what we had to use, so Ruby became locked in RoR ecosytem. It got me thinking - Wouldn't it be an advantage? Being a one-framefork-language means that it is idiomatic in every way possible.

So I made an exeriment. I gave coding agent a task to rewrite one of my services in Crystal. I only provided the tests and documenation. If Ruby is so idiomatic, whouln't Crystal be the same?

It was a success. I've got 50% less code than original, the logic is easy to trace, and during session the agent made less mistakes. I took less time to review and fix. Considering that It's  new for me and the language is not so popular I think It's a huge success.

I'll see how it goes from now on.

#crystallang #ruby
The Weekly Challenge 365: Alphabet Digit Counter Token

I’ve been doing the Weekly Challenges. The latest involved string mangling and regular expressions. (Note that this ends today.)

RogerBW's Blog

Time flies! It's already 5 years since the release of Crystal 1.0.
We're going to celebrate that! Meet the Core Team and community members looking back at that milestone, what happened since then, and what's coming next.
You can tag your questions with #Crystal2026AMA

Friday, 27 March 2026 16:00 UTC
Video Call: https://man.as/crystal2026ama-zoom
Live Stream: https://man.as/crystal2026ama

More info: https://forum.crystal-lang.org/t/5-years-anniversary-of-crystal-1-0/8801

#CrystalLang #ask_me_anything

Join our Cloud HD Video Meeting

Zoom is the leader in modern enterprise cloud communications.

Zoom

Release v3.3.4 of Ktistec is available.

This release adds Mastodon-compatible client support for publishing posts. Just like the previous release, however, all Mastodon API support is behind a build flag (-Dwith_mastodon_api). It's still experimental, so opt in only if you're happy to work with rough edges.

Beyond that, I focused on cleanup and refactoring throughout the codebase. Here's the full changelog:

Added

  • Cursor-based pagination on actor timeline and everything pages.
  • Mastodon-compatible API: /api/v1/statuses endpoint for status posting.
  • Mastodon-compatible API: /api/v1/timelines/public endpoint.

Fixed

  • Autosave focus handling. Fixes problems introduced in v3.3.3.
  • Prevent blur from creating a draft post when publishing a post.

Changed

  • Integrate X-Ray Mode colors into the theming system.
  • Improve CI: add npm audit, test, and caching.
  • Use npm ci in Dockerfile for reproducible builds.
  • Remove very old compiler bug work-around.

🏋️ Mastodon API support is coming along—more in the next release!

#ktistec #crystallang #activitypub #fediverse

Comparing f64f24d1...df77bdab · toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing f64f24d1...df77bdab · toddsundsted/ktistec

GitHub

is it the expectation that atomic should be used for all class level variables now?

#crystallang

The Weekly Challenge 364: Decrypted Goals

I’ve been doing the Weekly Challenges. The latest involved various sorts of string parsing. (Note that this ends today.)

RogerBW's Blog
Maybe one way to change the rules is to stop writing code that needs big hardware. The old options were C or C++ for speed and efficiency (which are difficult and dangerous) or Python, Ruby, NodeJS, Perl, PHP for quick and easy coding (but which are fat and slow). But we have better options now, better compromises... #RustLang, #NimLang, #GoLang, #CrystalLang ... the legacy languages have become the tools of the oppressor

I have started work on a Mastodon-compatible API layer intended to support the many Mastodon front-ends available. It is incomplete and requires an explicit build flag to enable, but what's there (the main timeline) already works with the official Mastodon app, Tusky, and Phanpy.

Here's the full changelog:

Fixed

  • Editor focus now stays in the editor after the first draft is saved. (fixes #139)
  • Filter settings instructions. (fixes #135)

Changed

  • Improved consistency of mini button colors.

As always, check out the full diff for the complete details.

#ktistec #crystallang #activitypub #fediverse

Get an app for Mastodon

Browse official and third-party apps for the decentralized social network Mastodon