Gosh, it's been such a long time. I regret that this summer is not going how I would've originally planned it because of some complications with my job, but I'm making the most of it. I do have a handful of exciting things to share, and I'm hoping to keep up the hard work on Telodendria.

Version 0.3.0

I won't go into the details here, but Telodendria v0.3.0 has finally been released after a few delays, although it is on schedule for v0.2.0, which was released very early, so I'm kind of right on schedule. I am currently hoping to get v0.4.0 out by the end of this year, but we will see if that happens or not.

I'm not going to hash out all the changes in this section, that's what the change log is for. As always, if you haven't joined #telodendria-releases:bancino.net, that's where you can get concise notifications about new releases.


Cytoplasm is what I'm calling our new general-purpose C library that supports Telodendria. I think Cytoplasm/README.txt explains it best, so I've copied some of it below.

Cytoplasm is a general-purpose C library and runtime stub for
creating high-level (particularly networked and multi-threaded) C
applications. It allows applications to take advantage of the speed,
flexibility, and simplicity of the C programming language, while
providing helpful code to perform various complex tasks. Cytoplasm
provides high-level data structures, a basic logging facility, an
HTTP client and server, and more.

Cytoplasm aims not to only do one thing well, but to do many things
good enough. The primary target of Cytoplasm is simple, yet higher
level C applications that have to perform relatively complex tasks,
but don't want to pull in a large number of dependencies.

Cytoplasm is extremely opinionated on the way programs using it are
written. It strives to create a comprehensive and tightly-integrated
programming environment, while also maintaining C programming
correctness. It doesn't do any macro magic or make C look like
anything other than C. It is written entirely in C89, and depends
only on a POSIX environment. This differentiates it from other
general-purpose libraries that often require modern compilers and
non-standard language and environment features. Cytoplasm is intended
to be extremely portable and simple, while still providing some of
the functionality expected in higher-level programming languages
in a platform-agnostic manner. In the case of TLS, Cytoplasm wraps
low-level TLS libraries to offer a single, unified interface to TLS
so that programs do not have to care about the underlying

Originally a part of Telodendria (https://telodendria.io), a Matrix
homeserver written in C, Cytoplasm was split off into its own project
due to the desire of some Telodendria developers to use Telodendria's
code in other projects. Cytoplasm is still a Telodendria project,
and is maintained along side of Telodendria itself, even living in
the same CVS module, but it is designed specifically to be distributed
and used totally independent of Telodendria.

The name "Cytoplasm" was chosen for a few reasons. It plays off the
precedent set up by the Matrix organization in naming projects after
the parts of a neuron. It also speaks to the function of Cytoplasm.
The cytoplasm of a cell is the supporting material. It is what gives
the cell its shape, and it facilitates the movement of materials
to the other cell parts. Likewise, Cytoplasm aims to provide a
support mechanism for C applications that have to perform complex

Eventually it is my hope that Cytoplasm will get a nice spot on the Telodendria website (either its own page or subdomain), and that tarballs for it will be published independently of the Telodendria tarballs, but for now, everything is bundled in with Telodendria.

Status Update

Here are some things I mentioned in the last newsletter, as well as a few new ones:

  • Ports: I removed all the documentation for the Ports staging module because nobody is using it. It looks like Telodendria has been ported to OpenBSD, which means that I don't have to maintain the port myself, which I am glad about.
  • User Interactive Authentication: The Matrix specification is implemented here, I just have to implement the administrator API for dealing with registration tokens.
  • Configuration API: I am still working on it. You can currently replace the entire configuration, but not yet only one or two settings. That feature should come with v0.4.0.
  • User Data & Capabilities: Capabilities are hard-coded, but the endpoint exists now. I haven't implemented the directory search yet.
  • Continuous Integration: It looks like progress is being made on getting some CI up and running for Telodendria, which is very exciting.
  • Documentation: Cytoplasm includes hdoc, a simple CLI tool for generating man pages by parsing a C header file. This tool is very primitive, but suits Telodendria's needs just fine.

What Have I Been Working On Lately?

You may have noticed that things have been rather quiet around here. While I haven't committed much or written a lot of newsletters, I've still been hard at work; every free minute I have is spent on Telodendria. At the moment, I've been trying to debug some nasty memory corruption bugs, but I simply cannot figure out how to reliably reproduce them. I cannot pinpoint what makes the issue happen, because it seems so random. I've torn Telodendria down to basically nothing in my own working directory, and I still can't figure it out because it is so hit-or-miss whether or not I can actually get the issue to show itself. At some point I will put together some documentation on this, but I've been working on this for almost a month now, so I think it's time to just move on and deal with it later. I can assure you all that I will not release v1.0.0 with this still being a problem, but for now, I think my limited energy is best spent moving Telodendria forward and building out more of the Matrix specification. I do not want all development to stall just because of this, I have to keep moving on, particularly because I don't have very much time to spend on this project.

What's Next?

From the TODO.txt file:

[~] /_telodendria/admin/config endpoint
    [ ] Update only certain values
[ ] Client-Server API
    [ ] 6: Filtering
    [ ] 7: Events
    [ ] 8: Rooms
    [~] 9: User Data
        [x] Profiles
        [ ] Directory

This is the fun stuff! I'm excited to get into this, because it is the meat of the specification. With the next release, Telodendria just might be usable for local user communication, which is really amazing to think about.

Previous Post Next Post