A lightweight service that maintains a public directory of SoundTime instances. Nodes self-register via heartbeat, are health-checked every 5 minutes, and automatically removed after 48 hours of downtime.
npm install
npm startThe server runs on http://localhost:3333 by default.
| Variable | Default | Description |
|---|---|---|
PORT |
3333 |
HTTP server port |
DB_PATH |
./data/listing.db |
SQLite database path |
Register a new node or send a heartbeat for an existing one.
Request body:
{
"domain": "music.example.com",
"name": "My SoundTime Instance",
"description": "A community music server",
"version": "0.1.0",
"token": null
}- Omit
tokenfor first registration → response includes a token to save. - Include
tokenfor heartbeat updates.
Response (first registration):
{
"status": "registered",
"id": "uuid",
"domain": "music.example.com",
"token": "save-this-token",
"message": "Save this token! You need it for future heartbeats and to remove your node."
}Returns all online nodes. Add ?include_offline=true for all nodes.
Requires Authorization: Bearer <token> header.
docker build -t soundtime-listing .
docker run -d -p 3333:3333 -v listing-data:/app/data soundtime-listing-
Registration: SoundTime instances call
POST /api/announcewith their domain. The listing server verifies the node is reachable via/healthzbefore accepting. -
Heartbeat: Registered nodes periodically send heartbeats (same endpoint, with their token). The listing server also fetches fresh stats from
/api/nodeinfo. -
Health Checks: Every 5 minutes, the server checks all registered nodes via their
/healthzendpoint. -
Auto-Removal: Nodes that have been offline for more than 48 hours are automatically removed from the directory.
In your SoundTime admin panel, enable "Publish to Public Directory" to automatically register and send heartbeats to the listing server.
AGPL-3.0 — Same as SoundTime