- Go 97.8%
- Dockerfile 2.2%
A module inside a monorepo was listed with the repo HEAD's sha and last-commit time, so every unrelated push made all its installed copies look outdated forever. Scans now use a blob-less full-history clone and take latest/updated_at from the last commit touching the module's own subdirectory (manifest read via git show — no checkout). Fixture test pins the monorepo case. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F2HhhATcV5qn9mszokiJcm |
||
|---|---|---|
| .github/workflows | ||
| cmd/registry | ||
| internal/registry | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| go.mod | ||
| LICENSE | ||
| NOTICE | ||
| README.md | ||
tachyne registry
The plugin registry for tachyne: a small REST service every tachyne instance can query to discover plugins — search, latest version (and whether yours is out of date), last update, description, ratings, and install counts.
The registry indexes, it never hosts. A tachyne plugin lives in an
ordinary git repository and is installed by its module path (tachyne-daemon
for daemon plugins, tachyne-build for compiled-in ones — see the
plugin docs).
The registry stores metadata about those repositories and re-scans them
periodically for freshness; code always flows git → you.
Listing a plugin
Put a tachyne-plugin.json beside your plugin's main package:
{
"name": "webmap",
"type": "daemon",
"description": "Live web map of the running world.",
"tags": ["map", "web"]
}
(type is "daemon" for bus-attached daemons, "plugin" for compiled-in
plugin modules.) Then submit the module path:
curl -X POST https://<registry>/v1/plugins \
-d '{"module": "github.com/you/yourplugin"}'
Submission is open: the registry accepts the listing only if the repository exists and carries a valid manifest, and it re-scans regularly — stale or spoofed metadata can't be submitted because the repo itself is the source of truth. Spam is delisted by the operator.
API
| Endpoint | Effect |
|---|---|
GET /v1/plugins?q=&type=daemon|plugin&sort=updated|installs|rating|name |
search |
GET /v1/plugins/{module} |
one listing (compare latest to what you run) |
POST /v1/plugins {"module": "..."} |
submit / refresh a listing |
POST /v1/plugins/{module}/rate {"stars": 1..5} |
rate (per client, re-rating replaces) |
POST /v1/plugins/{module}/installed |
count an install (per client per day) |
DELETE /v1/plugins/{module} |
delist (admin token) |
POST /v1/refresh |
rescan all listings now (admin token) |
Running your own
The registry is deliberately self-hostable — one binary, one JSON file — and tachyne clients accept a list of registry URLs and merge results, so private or community registries sit beside the main one like extra package sources.
go install github.com/tachyne/tachyne-registry/cmd/registry@latest
ADMIN_TOKEN=… registry -addr :8080 -store registry.json -rescan 6h
or docker run -v registrydata:/data -p 8080:8080 ghcr.io/tachyne/tachyne-registry.
Requires git on the host (the container image includes it).
License
Apache-2.0. tachyne is an unofficial fan project, not affiliated with Mojang, Microsoft, or Minecraft's developer/publisher in any way.