--- title: 'Telodendria v0.3.0 Released!' date: '10-06-2023 21:16' feed: limit: 10 --- 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](https://telodendria.io/man/man7/telodendria-changelog.7.html#v0.3.0) 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 **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 implementation. 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 tasks. ``` 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.