Epiktistes

Epiktistes is my home in the Fediverse. It is an instance of Ktistec, a single-user ActivityPub server like Mastodon, but with fewer users and fewer commits. Here's my introduction (last updated early-2025).

I wrote a series of posts about optimizing the performance of the Ktistec server, its build time, and its executable size: part 1, part 2, part 3, part 4, and part 5.

Some things I regularly write about, organized by hashtag:

I also wrote some #pointfreeverse.

Todd Sundsted
Release v3.3.5 of Ktistec

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

Todd Sundsted

mastodon API support in Ktistec is almost an MVP. building it has involved an unexpected number of side quests. but some of them have been worthwhile excursions—Ktistec will be getting cursor based pagination (a popular request) and offset/limit pagination will be going away.

#ktistec

Todd Sundsted

today's goal: figure out what's causing these large, temporary memory spikes that don't seem to correspond to large activity spikes.

two charts. the top one showing inbox and outbox activity. the bottom one showing memory allocated and free.
Todd Sundsted

apparently i don't own any .ai domain names, so i registered ideahamster.ai because it seemed appropriate and stochasticparrot.ai was already taken.

Todd SundstedCrystalLanguage

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: man.as/crystal2026ama-zoom
Live Stream: man.as/crystal2026ama

More info: forum.crystal-lang.org/t/5-yea

#CrystalLang #ask_me_anything

Todd Sundsted
Todd Sundsted
Release v3.3.4 of Ktistec

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

Todd Sundsted

test post from tusker via Mastodon-compatible API… #ktistec

Todd Sundsted

@reiver i installed vibefed. to shrink context usage at the top level, i put everything into one of three groups of skills: fediverse-detection, fediverse-protocols, or fediverse-platforms. the top level skill, in each case, is an index that links to the individual documents. starting with JSON-LD, i'm scrutinizing ktistec's implementation of core technology against your best practices.

Todd Sundsted

after a long detour away from functional programming, i've swerved back and i'm studying lean.