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.0 of Ktistec

Release v3.3.0 of Ktistec adds support for consent-respecting quote posts (FEP-044f). Quote posts represent the most lines of code I've written for any single changelog entry in my life.

Added

  • Support for consent-respecting quote posts (FEP-044f).

Changed

  • next_attempt_at in tasks now means not scheduled when nil.
  • Permit type changes for ActivityPub objects.

Important: Quote posts come with a few big caveats. I've been using iterations of this in production for weeks, but if you don't like what you read below you might want to wait for the patch release.

  • FEP-044f quote posts require delicate choreography between quoted and quoting servers. Server support across the fediverse is incomplete and evolving. If a quote post doesn't display it might be my bug, it might be their bug. Expect bugs.
  • Quote authorization is currently all or nothing—you either blanket reject quote post requests (the default) or blanket accept them. I intend to support more granular controls and manual approval but that comes later.
  • Quote authorization revocation isn't supported.
  • Automatic re-verification of quote authorization isn't supported.
  • Compatibility with other quote implementations is incomplete.
  • There will be bugs 🐞 and more bugs 🐜.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

still working on quote posts... getting close...

as an aside, #ktistec x-ray mode is really useful when debugging and when i want to navigate to a quoted post that hasn't yet been remotely approved!

Todd Sundsted

i think i'm going to add a feature to #ktistec that rolls up a chain of self-replies into a single post that i can just read. i don't understand why that (mis)feature of twitter remains so popular on the #fediverse

Todd Sundsted

this year I learn to play “iko iko”

Todd Sundsted
Todd Sundsted

I think my ideal “salted caramel ice cream” is just caramel…

Todd Sundsted@reiver ⊼ (Charles) :batman:

I think hobbyist programmers should (in a practical sense) be able to create Fediverse applications & other Fediverse software — and not just career software-engineers.

#Fediverse

Todd Sundsted

I managed to get 2/3rds of quote posts (FEP-044f) working in #ktistec. The only part remaining is quote posting from the server and this depends on functionality to delay delivery until the quote request is accepted (or not). I need that for scheduled posts, so it's a delay but time well spent!

#activitypub #fediverse

Todd Sundsted

got my bookmarks down to just one page

Todd Sundsted
Release v3.2.9 of Ktistec

I just released v3.2.9 of Ktistec!

You can now customize the secondary menu on your home page. This is the menu that links to your posts, drafts, notifications, etc. Posts, drafts, and notifications are fixed, but you can change the final three—they default to bookmarks, followers, and following. Edit the links on your Settings page in the section titled Pinned Collections. I typically replace the defaults with hashtags I'm following and threads I'm actively participating in.

I am slowly adding functionality to support Mastodon API compatible clients. In line with that effort, OAuth access tokens are now associated with sessions, which makes it possible for clients that authenticate via OAuth (instead of username/password) to access all of the existing API.

I use this extensively when building scripts to automate my Ktistec instance. A script can authenticate and cache the access token in a secure keystore. Since access tokens have a limited lifespan and can be individually invalidated, a compromised access token does not force me to change my password!

Here's the full list of changes:

Added

  • Support for customizing the secondary menu with pinned collections.

Fixed

  • Thread rendering no longer fails when drafts are present.

Changed

  • Content warnings are now preserved when replying to posts. (fixes #136)
  • OAuth access tokens are now associated with sessions.
  • Attachments are deleted when draft objects are destroyed.
  • Actor icons and images are deleted when replaced or unset.

A recent poll prioritized emoji reactions and quote posts. I see dozens of quote posts every day, so that's where I plan to focus next.

#ktistec #crystallang #activitypub #fediverse