otter: 0.1.0 post

main
Jef Roosens 2025-06-12 12:05:26 +02:00
parent df67adc3ee
commit 0618422b68
No known key found for this signature in database
GPG Key ID: 21FD3D77D56BAF49
1 changed files with 108 additions and 0 deletions

View File

@ -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.