Go Meow Server: setup and live sessions
Each participant connects to the same Go Meow Server and plays prepared local audio against a shared musical timeline.
Session coordination and media delivery are different services
Go Meow Server shares transport, timing and scheduled events; clients render their own prepared audio. It does not host a streaming media library, transcode recordings or transfer project assets. The Go Meow web platform separately serves authorized project media and marketplace previews. MusicScript’s local serve/session/daemon commands are separate protocols and do not automatically join this server.
Go Meow Toolkit provides local file analysis rather than a media server.
1. Start the server
From a source checkout, use Node.js 22 or newer. Initialize credentials once; use the serve command for subsequent starts.
cd gomeow.media/gomeow-server
npm ci
npm run build
npm start -- init credentials.json
npm start -- serve credentials.jsonOpen http://127.0.0.1:4455 on the server computer. The credentials file contains individual producer and agent API keys. Share only each participant’s own key. Keep the file private and out of Git.
2. Connect and admit players
- In Desktop, open Live Session, enter the server address and your API key, then connect.
- The host creates a session. Other clients refresh the session list and request to join.
- The host approves each request; the guest retries Join after approval.
- Enable the shared metronome and check the clock status on each client.
The server’s browser page can also join and play clicks. That page is separate from Web Studio.
3. Arm local playback
Open your local project or score, then choose an engine under Follow with engine. Each client arms one engine. The host controls shared transport; guests follow it.
| Engine | Preparation and limits |
|---|---|
| Studio | Prepared patterns start at the shared beat and tempo on the local audio clock. |
| Arrangement | One tempo, looping disabled. Unfreeze tempo-dependent tracks before following a different tempo. Running seeks and tempo changes restart through native IPC with a brief gap of at least 30 ms, then recover the shared position. |
| MusicScript | Finite score, one shared tempo, no section BPM overrides or infinite melody loops. The adapter rejects vocal declarations; prepare vocals as sample assets. Late joins skip earlier note attacks and do not reconstruct sustained synth tails. |
All three adapters currently require four quarter-note beats per bar. Re-arm after editing the prepared score or arrangement. Disarm to return to local playback.
4. Start together and recover
Choose 500–10,000 ms of lead time; increase it when loading assets or working over a slower connection. Clients prepare before the deadline. Late joins enter at the next whole bar. A missed preparation deadline stops playback and displays an error; increase lead time and use Re-arm engine.
Leaving or losing the connection stops following. Reconnect, rejoin and arm again. Stale clock samples pause scheduling. A server restart clears in-memory sessions, so create a new one. Network clock estimates, device latency and background throttling mean audible alignment is not guaranteed to be sample-accurate.
Connect from another location
Configure a reachable listening interface and a TLS reverse proxy. Both clients must use the same server address; 127.0.0.1 always means the computer running that client. Desktop accepts plaintext WS only for localhost or 127.0.0.1 and requires WSS for remote servers.
Add the exact browser or Desktop origin to the server’s origin allowlist. Desktop displays its origin in Live Session. Assign identities to the same discovery group. Restart after changing credentials or origins. The service does not provide NAT traversal or a public relay.
Scripting hosts and agents
The SDK exports @gomeow/server/client, /timing, /metronome and /scheduling. Build it before use. In another repository, consume a built package; avoid a dependency that reaches into a separate product’s checkout.
import { StudioClient } from '@gomeow/server/client'
import { followTransport } from '@gomeow/server/scheduling'
const client = new StudioClient(serverUrl, apiKey)
await client.connect()
await client.create('Writing session', 120, 4)
// adapter is your local engine's SchedulingAdapter implementation.
const stopFollowing = followTransport(client, adapter, reportStatus)
await client.transport({ playing: true, beat: 0, delayMs: 1500 })
// On shutdown:
stopFollowing()
await client.disconnect()An adapter implements prepare, schedule, stop and dispose. Translate the plan’s localTimeMs from performance.now() into the engine’s audio clock, and cancel queued output when stopped. Event payloads remain data; the server never runs incoming scripts. Only the host changes transport or schedules production events.
The CLI’s gms serve, gms session and gms daemon are local host services. They do not connect to Go Meow Server automatically, and there is no network-session MusicScript keyword. Read the language guide →