simpod_core

Shared protocol models for Simpod — the data types that the simpod CLI, the native helper, and the simpod_client web dashboard exchange over the HTTP/WebSocket wire. Pure Dart, no runtime dependencies, so both the CLI and the Flutter client can depend on it.

Its job is to be the single source of truth for the wire format: JSON (de)serialization, the integer/snake_case tokens the native helper expects, and the enums shared across every layer.

What's in it

Everything is re-exported from package:simpod_core/simpod_core.dart.

Models (src/models)

Type Role
SimpodSession A running helper session — pid, port, device, url, streamUrl, wsUrl, and the optional accessToken. Serialized to the session/pid files under $TMPDIR/simpod/ and returned by the CLI's JSON API.
DeviceInfo / DeviceState A simulator (udid, name, runtime) and its booted / shutdown / unknown state, parsed from xcrun simctl output.
AXNode A node in the simulator's accessibility tree — role, label, value, identifier, frame (x/y/width/height), enabled/focused/hidden flags, depth, and children. Built from the helper's AX dump.
SimpodKeyEvent SimpodKeyDownEvent / SimpodKeyUpEvent carrying a HID usage code, plus buildKeysMap() mapping characters to (usage, shift) for the US keyboard used by type.

Protocol (src/protocol)

Type Role
SimpodOrientation portrait / portraitUpsideDown / landscapeLeft / landscapeRight, each with the integer value sent in the WebSocket payload and the snake_case wireName accepted by the CLI's rotate command. Includes rotatedLeft / rotatedRight helpers.
SimpodTouchEdge Screen edge a touch starts from for edge-swipe gestures (e.g. bottom → Home). value maps to the helper's HIDInput.TouchEdge.
AccessibilitySetting Boolean accessibility toggles (reduce motion, reduce transparency, show borders) with the CLI command name, label, and the com.apple.Accessibility defaults key the CLI writes.

Usage

import 'package:simpod_core/simpod_core.dart';

final session = SimpodSession.fromJson(jsonDecode(body));
final orientation = SimpodOrientation.fromWireName('landscape_left');
print(orientation?.value); // 4 — sent over the WebSocket

Development

cd packages/simpod_core
dart pub get
dart test

License

See LICENSE.

Libraries

simpod_core