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

listening to the repo man soundtrack... i didn't love the movie but i continue to love the tracks...!

#music

Todd SundstedCrystalLanguage

A new release is out: Crystal 1.21.0 馃殌

We've reached a major milestone with making Execution Contexts the default concurrency model. crystal-lang.org/2026/07/12/re

Read more at crystal-lang.org/2026/07/16/1.

#crystallang #release

Todd Sundsted

i think Zombie (The Cranberries) aged well and listening to Dolores O'Riordan sing it still gives me shivers.

Todd Sundsted

"We put the exploit in a picture. The AI code reviewer never opened it."

This line from the article:

CodeRabbit ships with a default configuration that excludes image files from review outright (!**/*.png).

#ai #infosec

Todd SundstedWeek in Fediverse :fediverse_light:
Todd Sundsted
Release v3.8.0 of Ktistec

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the database鈥攚hich is how I've been previewing them. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

the backend for ktistec algorithmic feeds just landed in commit 627c9292.

it's a proof-of-concept implementation of hashtag-mention-keyword feeds popular in other servers with any/all/none clauses鈥攏ot very algorithmic but it gets the plumbing right and tested. it builds on top of the materialized views support i implemented a few releases ago.

#ktistec #fediverse

Todd Sundsted

does anyone have any experience with any of the existing fediverse hashtag relays?

Todd Sundsted

there are a lot of open tabs in my life...
聽 20+ in my browser
聽 15+ in my terminal
聽 40+ in my editor

Todd Sundsted

i'm sure inline json-ld contexts with server extensions seem like the wrong thing, but they're preferable to identical copies of the same context hosted externally and served by a dozen or more instances of a server or family of servers.

i could be persuaded to change my mind if a server allowed meaningful customization. but if a server is publishing a canonical vocabulary of extensions for that server, it should be hosted in a single, well-know location.

#fediverse #activitypub