Skip to content

Legacy profile and migration

Older Freedome apps (flutter_freedome 1.x / 3.x, react-native-freedome, razvivalka, churyavzrosliy, Manager v3 / v4) speak older protocols. With [legacy] enabled = true (default in 1.x, off from 2.0) the server also serves:

  • socket.io default namespace / with the old event names (command → command_response, getState, setState, sendOsc, brightness, volume, rotation, dome-state, integration-event, clear-integration), and optionally the fixed port 3000 ([legacy] listen_3000);
  • legacy REST paths: /api/dome/info, /api/dome/status, /api/system/*, /api/vendor/*, POST /api/command, the Manager v4 /api/{status,play,pause,stop,brightness,volume,rotation,…} set, Manager WS /ws;
  • legacy OSC aliases (see OSC).

Each legacy message is translated to one native operation (same scopes). Legacy clients authenticate with a pairing token (auth.token / ?token=) or fall into the guest policy ([auth] legacy_guest, [legacy] guest_playback_control). Legacy 0..100 values are scaled to 0..1. Unknown message types answer legacy-unsupported: <type> — nothing is silently ignored. Every legacy hit is counted in freedome_mediaserver_legacy_requests_total{client,message} so you can see which old clients are still in use. socket.io v2 clients are not supported.

Migration: move apps to the SDKs (freedome_client for Dart, @freedome/client for TypeScript), which use the native API (/api/v1, socket.io /v1, WebSocket freedome.v1). Discovery: mDNS _freedome._tcp + GET /api/v1/info instead of port scans. The contract repo has the full mapping table and replay fixtures (compat/legacy/).