NAME
Telodendria
—
Start here. This page contains the
project introduction, and provides information about it, such as its status,
how to contact the developers, and what the source code license
is.
DESCRIPTION
Telodendria
is an open source Matrix
homeserver written entirely from scratch in ANSI C and designed to be
lightweight and simple, yet functional.
Telodendria
differentiates itself from the
other Matrix homeserver implementations because it:
- Is written in C, a stable, low-level programming language with a long history, low build and runtime overhead, and wide compatibility.
- Is written with minimalism as a primary design goal. Whenever possible and
practical, no third-party libraries are pulled into the source code.
Everything
Telodendria
needs is custom written. As a result,Telodendria
depends only on a standard C compiler and a POSIX C library to be built, both of which should come with any good Unix-style operating system already, which means you shouldn't have to install anything extra. - Uses a flat-file directory structure to store data instead of a database.
This has a number of advantages:
- It makes setup and maintenance much easier.
- It allows
Telodendria
to run on systems with fewer resources.
- Is packaged as a single small, statically-linked and highly-optimized binary that can be run just about anywhere. It is designed to be extremely easy to set up and consume as few resources as possible.
- Is permissively licensed.
Telodendria
is licensed under a modified MIT license, which imposes very few restrictions on what you can do with it.
Telodendria
is on Matrix! Check out the
official Matrix rooms:
#telodendria:bancino.net | The public "space" room. |
#telodendria-releases:bancino.net | Get notified of new releases. |
#telodendria-general:bancino.net | General discussion and support. |
#telodendria-newsletter:bancino.net | Periodic status updates. |
#telodendria-issues:bancino.net | Report bugs and issues. |
#telodendria-patches:bancino.net | Submit code patches to the project. |
#telodendria-ports:bancino.net | Discussion about porting and packaging. |
Telodendria
is designed to be fairly
straightforward, but that doesn't mean there won't be hiccups along the way.
If you're struggling to get Telodendria
up and
running, you're more than welcome to reach out for support. Just hop into
the appropriate Matrix rooms and talk to me!
RATIONALE
I want a lightweight Matrix homeserver designed specifically for OpenBSD, and other Unix-like operating systems. I want a homeserver that can be developed and compiled with built-in tools. I want it to function entirely on a base OS install without having to install any packages whatsoever. I've found that as far as these goals are concerned, the existing homeserver implementations fall short. This project aims to prove that Matrix homeservers can be lightweight and written in such a way that very few, if any, third-party libraries need to be pulled in.
I also want to learn how Matrix works, and I want to understand the code I'm running on my server, which is why I'm writing every component from scratch, even the HTTP server and router.
The advantage of using a flat-file database instead of a real database is that your data remains in a format that is incredibly easy to digest. Backups are incredibly easy as well—just tar(1) up the data directory and you're good to go.
PROJECT GOALS
The goals of this project are generally divided into user goals and developer goals, depending on who they impact the most. This isn't an exaustive list of the project's goals, but it is a list of things that I want to prioritize, because other server implementations lack them.
The user goals are as follows:
- To implement the latest Matrix specification as fully and completely as
possible. All features defined by the specification should eventually be
present in
Telodendria
. - To be as privacy-friendly as possible.
Telodendria
should not store any information it does not absolutely need to function as a Matrix homeserver. WhileTelodendria
strives to be feature-complete, it should not implement anything not explicitly defined in the Matrix specification. - To be a production-ready Matrix server capable of working in constrained
environments, such as embedded devices, cheap VPSs, or a peer-to-peer
device.
Telodendria
should also work on traditional setups as well, and be able to handle a decent amount of users. It should work well for personal Matrix homeservers that also host a few friends and/or family members. - To be easier to get up and running, and yet also be more configurable than other Matrix homeserver implementations. The configuration file should be flexible, well-documented, and easy to understand and modify. An intuitive command-line tool for administrative tasks should also be available.
The developer goals are as follows:
- To have as few build and runtime dependencies as possible. It should be
possible to compile and run
Telodendria
on any POSIX operating system right out of the box.Telodendria
should be fully statically-linked, so it can run under a chroot(3). Furthermore, it should be possible to read all the documentation offline, and without any overly complicated tools. You'll notice that this documentation is a collection of man(1) pages, not HTML or Markdown, to remove the dependency on a browser or Markdown parser. Any Unix-like system has a manual page viewer, which makes the documentation more accessible, even on remote systems that have no graphical interface to read the documentation. This ensures that you can read the documentation for the installed version ofTelodendria
without having to go online. - To have a simple yet elegant workflow, and not depend on any large or complex development tools such as code forges. The entire development workflow should be able to be successfully and efficiently completed on a base OpenBSD install. Of course, you don't have to use OpenBSD for development, but the point is that the workflow should require fairly standardized and simple tools.
- To write clean, elegant, well-tested, and well-documented code. The goal is to build a Matrix homeserver from the ground up, not just because I don't like the way existing homeservers are implemented, but also because I want to learn how Matrix works, make it more accessible, and potentially teach others a little bit along the way.
- To foster a welcoming community. Many big communities such as Linux and
OpenBSD have hostile leaders.
Telodendria
shouldn't have a hostile leader. I want to be as understanding as I can, and talk through issues politely and in a civil manner. If I'm failing in this way, don't be afraid to call me out!
SEE ALSO
STANDARDS
The installed version of Telodendria
conforms to the latest Matrix specification available at the time of its
release.
HISTORY
Telodendria
was started in early July of
2022. For a change log of this project, see
telodendria-changelog(7).
AUTHORS
Telodendria
was started by and is almost
exclusively developed by Jordan Bancino <@jordan:bancino.net>.
Contributions to the code, website, documentation, or other components of
this project have been made by various open source developers.
LICENSE
All of the code and documentation for
Telodendria
is licensed under a modified MIT
license. Please consult the LICENSE.txt file for the
actual license text. The Telodendria
license text
differs from the MIT license in the following ways:
- Where the MIT license states that the copyright notice and permission
notice shall be included in all copies or
substantial portions of the software, the
Telodendria
license requires the copyright notice and permission notice be included with all portions, regardless of the size, of the software by omitting the word substantial.
The Telodendria
logo in all forms,
including the ASCII representation, belongs solely to the
Telodendria
project. It must only be used to
represent the official Telodendria
project, and may
only appear in official Telodendria
media. If
Telodendria
is forked, the logo must be removed
completely from the project, and optionally replaced with a different one.
The logo may not be modified in any way or for any purpose.