From 0618422b684f763063fbdd971b08edbf5b71d30e Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Thu, 12 Jun 2025 12:05:26 +0200 Subject: [PATCH] otter: 0.1.0 post --- content/dev/otter/0.1.0.md | 108 +++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 content/dev/otter/0.1.0.md diff --git a/content/dev/otter/0.1.0.md b/content/dev/otter/0.1.0.md new file mode 100644 index 0000000..c25c91b --- /dev/null +++ b/content/dev/otter/0.1.0.md @@ -0,0 +1,108 @@ +--- +title: "Otter 0.1.0" +date: 2025-06-12 +--- + +Although life's been busy with university, I've found some time to finish +things up with the current codebase and release a first version. This version's +been running on my Raspberry Pi for a couple of months without problems, so it +seems to be fairly stable. + +For context, Otter is a lightweight implementation of the [gpodder.net +API](https://gpoddernet.readthedocs.io/en/latest/), specifically the parts +required for synchronizing subscriptions between clients. Its goal is to be an +easy-to-install alternative to gpodder.net, allowing self-hosters to easily +use the various Gpodder-based clients available across devices. + +Version 0.1.0 has a fairly complete implementation of the parts of the Gpodder +API that's required for synchronizing clients. I've currently got no plans to +implement the more social media-related API routes, as these aren't necessary +for the goal of this project. + +## Supported features + +Otter 0.1.0 implements the following API sections: + +* Authentication +* Devices +* Subscriptions +* Episode actions +* Device synchronization + +This includes both the basic routes and the "advanced" sections, as described +in the API documentation. OPML and text output formats aren't supported yet, so +currently the API only supports JSON. I am planning on adding support for the +other output types later. + +In terms of client compatibility, Otter definitely works with AntennaPod and +Kasts. Kasts does have the strange bug where it crashes if you agree to the +"synchronize with all devices" popup when adding a new device. However, after +manually marking the devices as being synchronized on the server, all syncing +functionality works as expected. The Gpodder client also does not work, as it +strangely uses a different form of authentication. + +Both of these issues should get fixed in a following release, as I'd like Otter +to be generally usable with any client. + +### Ease of use + +Otter is distributed as a single binary configurable via a configuration file, +environment variables and CLI arguments. Everything can be set up via any of +these three methods (or a combination), allowing Otter to be easily used in +both Docker containers and directly as a background service. For fun, I've also +added support for listening on a Unix socket instead of a TCP socket. + +The goal is to always keep this setup, as a single binary is by far the easiest +way this type of software can be distributed. I currently publish binaries for +`x86_64` and `arm64`, as these are the platforms that I use. It should be +possible however to compile Otter for any build target supported by Rust. + +## Plans + +Before Otter reaches version 1.0, there are still some features I'd like to +add. + +### UI + +The biggest feature would definitely be a web UI. This UI will contain +everything required to manage an Otter server, both as a user and an admin. +Users should be able to see and remove sessions, manage their synced devices, +and view and edit their subscriptions and other stored data. Admins also +require the ability to add, remove and edit accounts, as well as seeing other +global service data. The goal is to have an easy-to-use UI that contains +everything you'd need to effectively use an Otter server. + +Important here is that I don't have any plans to recreate any of the social +media-related aspects of Gpodder. Otter is just a sync server; it's not meant +as a full-on replacement of the gpodder.net website. + +In terms of technology, I'm using [HTMX](https://htmx.org/) and +[PicoCSS](https://picocss.com/) to develop the frontend, combined with a +templating system in the backend. In my opinion, these two are the perfect +combination for developing simple frontends, especially for someone like me +that isn't the best at creating UIs. + +### CLI + +It's always useful to have a more technical CLI-focused way of accessing the +data of an application. For this, I want to add a full CLI interface that +allows an admin to interact with the server through the same abstractions used +by the API. There's already some very basic functionality available right now +on which I'd like to build to expose the full functionality of the API in CLI +form. + +### Database support + +Otter currently only support SQLite as it's easy to develop with and install on +the server. I do however know lots of people prefer running PostgreSQL, so +support for this will be added. Due to the way the codebase is structured, this +shouldn't be too hard, as all database-related functionality is hidden behind +an abstraction that can simply be implemented for PostgreSQL as well. + +Those are my plans for this project! I'm hoping I can keep up the development +pace, as I should be having a lot more free time the next couple of months. +I've grown quite fond of this project, as it solves a specific problem I had +while allowing me to screw around with some design patterns I hadn't used +before. I hope to continue developing it into a mature application. + +As always, thank you for reading, and have a nice day.