Plugin registry for tachyne — discovery over git-hosted plugins: search, versions, ratings, installs
  • Go 97.8%
  • Dockerfile 2.2%
Find a file
Wesley Channon 6bcedefb68 Scope listing freshness to the module's directory
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
2026-07-12 19:53:51 +02:00
.github/workflows rename to tachyne-registry (org naming convention) 2026-07-12 15:52:05 +02:00
cmd/registry rename to tachyne-registry (org naming convention) 2026-07-12 15:52:05 +02:00
internal/registry Scope listing freshness to the module's directory 2026-07-12 19:53:51 +02:00
CONTRIBUTING.md tachyne registry: plugin discovery for every instance 2026-07-12 15:36:51 +02:00
Dockerfile tachyne registry: plugin discovery for every instance 2026-07-12 15:36:51 +02:00
go.mod rename to tachyne-registry (org naming convention) 2026-07-12 15:52:05 +02:00
LICENSE tachyne registry: plugin discovery for every instance 2026-07-12 15:36:51 +02:00
NOTICE tachyne registry: plugin discovery for every instance 2026-07-12 15:36:51 +02:00
README.md rename to tachyne-registry (org naming convention) 2026-07-12 15:52:05 +02:00

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.