generated from alex/base-template
Gohper server baked by ATproto
- Crystal 98.1%
- Just 1.2%
- Dockerfile 0.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Release / build-and-push-1 (push) Successful in 1m18s
Release / build-and-push (push) Successful in 0s
Release / publish-release-1 (push) Successful in 7s
Release / publish-release (push) Successful in 0s
Release / deploy-1 (push) Successful in 3s
Release / deploy (push) Successful in 0s
|
||
| .forgejo/workflows | ||
| scripts | ||
| spec | ||
| src | ||
| .ameba.yml | ||
| .env.example | ||
| .gitignore | ||
| CHANGELOG.md | ||
| Containerfile | ||
| justfile | ||
| lefthook.yml | ||
| LICENSE | ||
| README.md | ||
| renovate.json | ||
| shard.lock | ||
| shard.yml | ||
💎 Crystal Goph 💎
A Gopher server backed by an ATproto PDS, written in Crystal.
Serves your Bluesky posts, profile, and images as a Gopher hole over TCP — the PDS is the source of truth.
How to run it
Configuration via environment variables only:
| Variable | Default | Meaning |
|---|---|---|
DID |
— (required) | did:plc:... — the repo owner DID |
PDS_URL |
resolved via plc.directory from the DID | optional override, e.g. https://social.l3x.in |
LISTEN_BIND |
0.0.0.0 |
bind address |
LISTEN_PORT |
7070 |
listen port |
ADVERTISE_HOST |
localhost |
host written into gophermaps |
ADVERTISE_PORT |
LISTEN_PORT |
port written into gophermaps |
CACHE_DIR |
./cache |
snapshot + blob cache |
POLL_INTERVAL |
60 |
seconds between PDS head checks |
LOG_LEVEL |
info |
debug/info/warn/error/none |
Run as:
- (Podman) container:
podman run --rm forge.l3x.in/alex/crystalgoph:latest - or build the binary:
crystal build --release --output bin/crystalgoth src/main.cr && ./bin/crystalgoth
Flags: --resync forces a full resync, --version, --help.
Development
Requirements:
Setup
just setup # Install dev dependencies (Ameba) and build the bin/ameba launcher
just # List all available commands
License
MIT — see LICENSE.