Experience lifecycle manager handling the full journey from draft through live deployment to retirement.
| Server | hydraexperiencelibrary.experiencenet.com (46.225.120.6) |
| hcloud | hydraexperiencenet context, cx23 nbg1 |
| Config | /root/.hydraexperiencelibrary/config.yaml |
| Data | /root/.hydraexperiencelibrary/ |
| Service | systemctl status hydraexperiencelibrary |
| Logs | journalctl -u hydraexperiencelibrary -f |
| Health | GET /api/v1/health |
ssh root@46.225.120.6 systemctl status hydraexperiencelibrary
Or via the health endpoint:
curl -s https://hydraexperiencelibrary.experiencenet.com/api/v1/health
ssh root@46.225.120.6 journalctl -u hydraexperiencelibrary -f
Show last 100 lines:
ssh root@46.225.120.6 journalctl -u hydraexperiencelibrary -n 100 --no-pager
ssh root@46.225.120.6 systemctl restart hydraexperiencelibrary
Updates happen automatically. The service polls releases.experiencenet.com for new versions and applies them. To check the current version:
ssh root@46.225.120.6 hydraexperiencelibrary version
Never manually deploy -- always use the release pipeline (tag + push to trigger CI, release server distributes, service auto-updates).
Creates a new experience in draft state:
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Experience Name",
"organization_id": "<organization-id>",
"description": "Description of the experience"
}'
curl -s https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences \
-H "Authorization: Bearer <token>" | jq .
Move an experience to the next lifecycle state (e.g., draft to staging, staging to live):
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/<id>/promote \
-H "Authorization: Bearer <token>"
Pause a live experience (can be resumed later):
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/<id>/pause \
-H "Authorization: Bearer <token>"
Roll back an experience to a previous build version:
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/<id>/rollback \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"target_version": "<version>"
}'
Permanently retire an experience (terminal state):
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/<id>/retire \
-H "Authorization: Bearer <token>"
Returns all experiences with status live, a production build, and a non-empty build URL. Used by hydrabody to discover which experience builds to download:
curl -s https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/live \
-H "Authorization: Bearer <token>" | jq .
Response:
[
{"name": "rupelmonde-castle-viewer", "build_number": 1, "build_url": "https://releases.experiencenet.com/builds/...", "exe_path": "C:\\experiences\\rupelmonde-castle-viewer\\Rupelmonde.exe"}
]
Returns a URL to hydraheadwebstream for browser streaming of the given experience:
curl -X POST https://hydraexperiencelibrary.experiencenet.com/api/v1/experiences/<name>/stream \
-H "Authorization: Bearer <token>"
Response:
{
"stream_url": "https://hydraheadwebstream.experiencenet.com/?experience=<name>"
}
Requires hydraheadwebstream_url to be configured.
draft -> staging -> live -> paused -> retired. Promotion moves forward, rollback reverts to a previous build version. Paused experiences can be resumed to live. Retired is a terminal state./root/.hydraexperiencelibrary/. Each experience file tracks its current state, build version history, and metadata. No database required.hydraheadwebstream_url config field enables stream links. Stream buttons redirect to hydraheadwebstream, which manages its own streaming sessions (moonlight-web-stream instances, Sunshine pairing, WebRTC).If the YAML store becomes corrupted (partial writes, disk issues):
systemctl stop hydraexperiencelibraryls -la /root/.hydraexperiencelibrary/systemctl start hydraexperiencelibraryjournalctl -u hydraexperiencelibrary -n 50 --no-pagercat /root/.hydraexperiencelibrary/config.yamlss -tlnp | grep <port>ls -la $(which hydraexperiencelibrary)hydraexperiencelibrary servecurl -s https://hydraauth.experiencenet.com/api/v1/verify -H "Authorization: Bearer <token>"ssh root@46.225.120.6 curl -s https://hydraauth.experiencenet.com/api/v1/healthssh root@46.225.120.6 date -- token validation may fail if the server clock is skewed/root/.hydraexperiencelibrary/ for the current statejournalctl -u hydraexperiencelibrary --since "1 hour ago" | grep <experience-id>curl -s https://hydrarelease.experiencenet.com/api/v1/healthssh root@46.225.120.6 curl -s https://hydrarelease.experiencenet.com/api/v1/health