streamdeck_flutter 0.4.0 copy "streamdeck_flutter: ^0.4.0" to clipboard
streamdeck_flutter: ^0.4.0 copied to clipboard

PlatformmacOS

Build Elgato Stream Deck plugins with Flutter. Renders UI offscreen, slices frames into key-sized tiles, and pushes them via the Stream Deck WebSocket protocol.

0.4.0 #

Breaking #

  • StreamDeckPlugin no longer takes actionBuilder. Each ManifestAction carries its own build (WidgetBuilder), and Manifest.actions is the single source for both manifest.json and event dispatch.

Added #

  • runHeadless(widget) — renders the plugin in a detached render tree with no on-screen window. The host window is orderOut'd; tiles are captured from the detached tree.
  • ManifestAction.build — the WidgetBuilder that renders the action (excluded from JSON), so Manifest.actions drives both manifest.json and event dispatch.
  • Manifest models (Manifest, ManifestAction, …) moved here from streamdeck_client and are re-exported from the package barrel.
  • Layout moved here from streamdeck_client (render geometry is a rendering concern) and is re-exported.
  • buildGrid(actions, devices) — builds the per-device grid with empty-slot placeholders, moved here from the client's grid getter.

Removed #

  • The streamdeck.size window-resize channel (Dart MethodChannel + native handleResize). The window is never shown, so there is nothing to resize.

Changed #

  • Tiles are captured at the device's reported devicePixelRatio (Raster.pixelRatio) instead of a hardcoded 2.0, and encoded as JPEG (Raster.jpegQuality, default 85) via package:image reusing the change-detection RGBA. Together ~14× smaller payloads on Stream Deck + (which reports 1.0). Raster.mimeType is sent to setImage/setFeedback.
  • JPEG encoding runs on a long-lived background isolate (JpegWorker) — only changed tiles are sent across (TransferableTypedData) — keeping the DCT/quantization work off the UI/render isolate.

0.3.1 #

Fixed #

  • Build command preserves manifest.json across rebuilds, avoiding unnecessary double restart.

0.3.0 #

Breaking #

  • Remove builder from ManifestAction and ManifestState. Use actionBuilder on StreamDeckPlugin instead.
  • StreamDeckAction takes a single builder (WidgetBuilder) instead of keypadChild / encoderChild.
  • Keypad and Dial take builder (WidgetBuilder) instead of child (Widget).
  • StreamDeckAction.animating defaults to false.
  • Unified CLI: streamdeck_flutter build / run subcommands replace separate build, create, docs executables.
  • --uuid / -i is required for build and run commands.
  • --assets / -a flag removed — assets auto-discovered from AssetManifest.bin.

Added #

  • actionBuilder on StreamDeckPlugin — single builder for all actions, reads StreamDeck.actionOf(context) for routing.
  • CaptureBoundary — custom render object that notifies the raster only when pixels actually repaint.
  • setupLogging() — automatic log setup in HeadlessBinding, writes to app.log and developer.log.
  • run command: build, link, restart, attach with hot reload, tail logs.
  • .vm_service file written by plugin for CLI attach discovery.
  • Bootstrap manifest on first install — plugin writes full manifest on launch.
  • Manifest skip-write when content unchanged.
  • Window resizes dynamically when devices connect/disconnect.
  • contentMinSize set on macOS window.
  • canvas.json bundled as package asset.
  • Empty placeholder actions skip raster registration.

Fixed #

  • Animation timestamp assertion with monotonic Stopwatch.
  • Skip frame pump when engine has a scheduled frame.
  • setFeedbackLayout removed — manifest handles encoder layout.
  • Handle already-linked gracefully in build command.

0.2.0 #

  • Remove DialPressEvent handling, add DialDownEvent / DialUpEvent.
  • Keypad / Dial accept WidgetBuilder instead of Widget.
  • StreamDeckAction takes single builder.
  • CustomMultiChildLayout for device grid positioning.
  • Client factory caches instances by port.

0.1.1 #

  • Flatten directory structure: move action/model files into lib/src/.
  • Consolidate analysis_options.yaml to workspace root.
  • Regenerate freezed outputs and format all code.
  • Add macOS plugin class for Flutter plugin registration.

0.1.0 #

  • Initial release.
  • Offscreen Flutter rendering with tile-based change detection.
  • Stream Deck WebSocket protocol client with auto-reconnection.
  • Keypad, encoder, and touchscreen action support.
  • Gesture injection (tap, scroll, dial) from Stream Deck events.
  • CLI tools: build, create, docs.
  • Target device: Stream Deck + (4x2 keys, 4 encoder slots).
0
likes
150
points
96
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Build Elgato Stream Deck plugins with Flutter. Renders UI offscreen, slices frames into key-sized tiles, and pushes them via the Stream Deck WebSocket protocol.

Repository (GitHub)
View/report issues

Topics

#streamdeck #elgato #macos #plugin

License

BSD-3-Clause (license)

Dependencies

args, flutter, freezed_annotation, image, json_annotation, logging, rxdart, standard_message_codec, streamdeck_client

More

Packages that depend on streamdeck_flutter

Packages that implement streamdeck_flutter