"Sublight thrusters, full power!" | nimble little matrix server you'll only see once
Find a file
timedout a54638c8b6
All checks were successful
Build binaries and images / binaries (amd64) (push) Successful in 36s
Build binaries and images / binaries (arm64) (push) Successful in 33s
Run tests / test (push) Successful in 52s
Style / Pre-commit style checks (push) Successful in 1m22s
style(logging): Rename leftover "duration"/"elapsed" to "elapsed_ms"
2025-11-03 14:57:24 +00:00
.forgejo/workflows feat(federation): implement federated invite support (#8) 2025-10-26 00:28:14 +02:00
cmd/hammerhead style(logging): Remove component and service keys 2025-11-03 03:23:42 +00:00
dev feat(federation): add room-server aggregation infrastructure (#10) 2025-10-25 21:59:30 +02:00
docker feat(docs,docker): Add release docker image and some basic documentation 2025-10-22 10:20:50 +01:00
docs docs(readme): Remove outdated contributing compiling information 2025-10-25 02:11:05 +01:00
hammerhead style(logging): Rename leftover "duration"/"elapsed" to "elapsed_ms" 2025-11-03 14:57:24 +00:00
.gitignore feat(docs,docker): Add release docker image and some basic documentation 2025-10-22 10:20:50 +01:00
.gitmodules feat: add pre-commit configuration and fix code quality issues (#3) 2025-10-20 16:19:06 +02:00
.markdownlint.yaml feat: add pre-commit configuration and fix code quality issues (#3) 2025-10-20 16:19:06 +02:00
.pre-commit-config.yaml feat: add pre-commit configuration and fix code quality issues (#3) 2025-10-20 16:19:06 +02:00
build.sh fix(build): $DIRTY is now more sensible 2025-10-25 01:10:12 +01:00
go.mod feat: Sending transactions to remote servers (#17) 2025-11-01 19:49:00 +01:00
go.sum feat: Sending transactions to remote servers (#17) 2025-11-01 19:49:00 +01:00
LICENSE Initial commit 2025-05-21 03:20:20 +01:00
mkdocs.yml feat(docs,docker): Add release docker image and some basic documentation 2025-10-22 10:20:50 +01:00
README.md docs(readme): Update README to direct setup to docs 2025-10-25 02:06:03 +01:00
requirements.txt feat(docs,docker): Add release docker image and some basic documentation 2025-10-22 10:20:50 +01:00

Hammerhead

Sublight thrusters, full power!

Note

Interested in Hammerhead as a project? Join #hammerhead:nexy7574.co.uk to discuss :)

Hammerhead is a small Matrix homeserver written in Go. It is not intended to be a full-fledged implementation, however, great strides are made every now and again, so who knows. Maybe something exciting will come of this!

The original intention for this implementation was for me to do hands-on learning to understand low-level properties of the Matrix protocol, such as the likes of federation, end-to-end encryption, and state resolution. As a result, a somewhat usable server has emerged, and I plan to sculpt it into a power-user tool, rather than something used for deployment at scale.

If you want a proper Matrix server, please consider continuwuity!

The name?

I came up with the name "Hammerhead" after watching Rogue One: A Star Wars Story, where a Hammerhead corvette makes a cameo. Previously the project was called "nexserv", but that was more of a codename than anything.

nerding out a little, spoilers for Star Wars: Rogue One

I chose "Hammerhead" because the Hammerhead corvette is a small but technically capital class starship. The Hammerhead that made an appearance in Rogue One was unique, as it was hailed during the battle of Scarif to sneak up behind, ram into, and use a Star Destroyer that was previously disabled by ion torpedoes as a battering ram to destroy another nearby Star Destroyer, ultimately crashing into the Scarif planetary shield, destroying all three, and allowing the Rebel fleet to dispatch re-enforcements to those trapped on the planet. While it got very limited screen time, it was ultimately this tiny ship that turned almost certain defeat into a victory, allowing the Rebellion to retrieve the death star plans and ultimately the destruction of the Death Star, leading to winning the galactic civil war.

I like to think that Hammerhead the Matrix server is a bit like that ship - small, unassuming, rarely seen, but still packing a hefty punch with the capability to make a big difference.

Installing

Hammerhead is still in a "rapid-iteration" development cycle, so please be aware that by the time you've got Hammerhead running, there's likely already a new version out.

The build action workflow produces pre-compiled static release binaries for Linux (x86_64 and ARM64) on every push to the dev branch. Tags will automatically get built and released as well, however binaries for Darwin and Windows will both be build manually as needed. If there is more interest in these platforms, they may be added to CI in the future.

Getting started

This section has been moved to the documentation (which will be hosted at an external website for proper viewing eventually).

Running

<insert warranty void sticker here>

Just running hammerhead is all you need to start the server. There is a Dockerfile (which you can be built with docker build -f docker/release.Dockerfile -t codeberg.org/timedout/hammerhead:dev .) if you wish to run Hammerhead with Docker, otherwise a simple systemd service file will suffice (but is not provided).

Packages for popular distros, alongside OCI releases, will be automatically provided once stable releases are tagged.

Roadmap?

There isn't really a roadmap as such, but issues and pull requests get triaged into version milestones, which can be read as a sort of roadmap.

If you wish to discuss things related to Hammerhead, please join the Matrix room at #hammerhead:nexy7574.co.uk.

Demo

There is a demo instance available at Hammerhead.nexy7574.co.uk which you can use to give Hammerhead a spin without installing it. The registration token is this repo's HTTPS codeberg clone URL, you can register using any client, such as Cinny or Element Web.

Caution

No guarantee of security, privacy, uptime, integrity, or availability is made. Please consider that your data may (and likely will) be deleted at a moment's notice without warning. Do not rely on this instance for anything you would miss if it got deleted.

Federation is enabled, so please be mindful. If this instance receives a lot of abuse, it may go closed-federation, no federation, or even just taken offline.