an experimental chat system built within Gemini

f4bd32b move design document out of lib/

1 year, 2 months ago

e505729 delete old/unused files

1 year, 2 months ago


galaxy-chat is a hip new experimental chat software which runs entirely over gemini following the existing gemini protocol.

You can kinda think of it as an API specification "governed" by a reference server implementation, designed to be completely interoperable with existing gemini clients. The "specification" is so trivial that any ecosystem with an existing gemini toolkit could build a server with minimal effort.

The reference server implementation, which is written in Elixir, can be found here:

=> https://git.sr.ht/~slondr/galaxy-chat-server

It works for testing purposes, which is pretty exciting, but there are a few known bugs which I'd like to iron out before opening a public instance. Right now, joining rooms and sending messages to rooms is supported and working. Your username is the CN of your SSL client certificate; messages are sent to members with a timestamp, your username, and message.

Most of the important information about galaxy-chat as an API (as opposed to as an Elixir program) can be found in a file called design.org in the root directory of galaxy-chat-server's tree.

#Super TLDR

galaxy-chat has 2 endpoints: /publish and /subscribe. Both endpoints need a room, specified in the URI fragment. Requests to /publish need a client certificate with a CN and a query string, which is the message content.

Requests to /subscribe are never closed by the server. New messages will be appended to the output. This means you need a gemini client that "streams" the output document as it's received. gmni (the command line utility) and Lagrange both support this out of the box, and I'm sure plenty of other clients do as well.

#The Future

It was always my intention when starting this project that galaxy-chat would get a custom client which supports a chat-like interface, asynchronously sending messages and displaying relayed message in the same window pane, with support for joining rooms and a customizable user interface. The latter part will require a slight reworking of the message output format (basically, to put the metadata on its own line so the message content can be rendered natively in gemtext) but it shouldn't be too hard. The repository for my custom client exists already but right now it's just a fork of another project I was working on, so stay tuned:

=> https://git.sr.ht/~slondr/galaxy-chat-client

The plan is to write the client in Common Lisp, and to use a TUI for the interface.

However, DIY galaxy-chat clients with a rich interface should be trivial to write in any language with good GUI primitives and a gemini client library.