Skip to content

Roadmap

The SDK is complete and self-testing for everything that doesn’t require the app itself to change. This page is the honest split: what you can rely on today, and what’s a documented contract waiting on app-side work. Nothing here is a promise of a ship date — it’s a map of the remaining seams.

These work identically off-app and in-app.

  • MixlarPlugin / PluginRegistry — standalone off-app, transparently the app’s live classes when actually running inside it. Proven both ways.
  • The full macro/slider/widget hook surface — see Plugin API.
  • Widget builder + lintingvalidator.lint_widget / lint_package produce spec-correct widget authoring and linting, checked against the real firmware source when reachable. See Widget Spec and CLI: validate & emulate.
  • settings_schema.SettingsSchema — build, validate, resolve defaults, and headlessly apply against a store. Fully functional as a library. See Settings.
  • Settings-schema renderer — the app reads a plugin’s settings.schema.json and renders a real settings panel from it automatically (static fields, all input types, dynamic options_from, show_when conditionals, and button/test actions), writing through the same _pget/_pset path as build_settings_ui. Ships in the app build that includes the renderer. A plugin’s build_settings_ui, if defined, still takes precedence over the schema. See Settings.
  • signing / packaging — ed25519 signing, digest-compatible with the app’s _plugin_package_digest, plus .mixplugin pack/unpack/install. Verified: an SDK-signed package verifies inside the real app. See Signing and .mixplugin format.
  • emulator.MockDevice + emulator.render — a full headless testing loop, no hardware and no app required. See Emulator.
  • The full mixlar-sdk CLIcreate / validate / link / dev / emulate / pack / sign / verify / keygen / publish. (publish itself is a stub pending a marketplace endpoint — tracked separately below.) See CLI Introduction.

These are finished on the SDK side — the types, hooks, and helpers exist and are tested — but nothing in the app (mixlar_mini.py) calls into them yet.

SystemEventsMixin’s six hooks are never called by the app:

  • on_app_launch
  • on_app_terminate
  • on_system_wake
  • on_device_connect
  • on_device_disconnect
  • on_deep_link

The exact call sites the app still needs are mapped out in the SDK’s events documentation: a ForegroundWatcher, the serial connection lifecycle, a Windows power-broadcast hook, and a mixlar:// handler that doesn’t exist yet either (see below). Reference: System Events.

events.parse_deep_link parses the URL shape correctly, but there is no OS URL-protocol registration or single-instance-activation handler in the app to receive one in the first place. This is a prerequisite for DEEP_LINK events ever firing — not just a missing broadcast() call.

Pinning a third-party publisher key is a manual, two-file, maintainer-mediated edit today. There is no self-serve flow and no key registry service. See Signing for the current manual process.

Plugins — SDK-authored or legacy — run in-process with the app, at the same privilege level, in the same crash domain. Individual hook calls are exception-guarded, but nothing sandboxes a plugin’s imports or I/O. Signing proves authorship, not safety.

Area SDK-side status App-side status
MixlarPlugin / PluginRegistry Shipped Shipped
Macro / slider / widget hooks Shipped Shipped
Widget builder + linting Shipped Shipped
Settings schema (library + renderer) Shipped Shipped
Signing / packaging Shipped Shipped
Emulator Shipped N/A (headless)
CLI Shipped N/A
System events (6 hooks) Shipped Not called
mixlar:// deep links Parser shipped No OS registration
Third-party key issuance Manual process documented No self-serve flow
Process isolation N/A Unstarted

mixlar-sdk publish / marketplace upload endpoint

Section titled “mixlar-sdk publish / marketplace upload endpoint”

The publish command is implemented and works against any URL you give it (multipart POST, token auth), but the actual marketplace API is being reworked, so there’s no default URL to point it at yet. This isn’t a code gap in the SDK — it’s a stub waiting on an external service. See CLI: pack, sign & publish.

The app adopting mixlar as its single source of truth

Section titled “The app adopting mixlar as its single source of truth”

Currently the app defines MixlarPlugin / PluginRegistry / colors / signing inline, and this SDK’s standalone copies mirror them by hand. Flipping that direction — having the app import from mixlar instead — removes the duplication, but it’s a deliberate, tested migration on its own, including a PyInstaller hiddenimports change. See Converting a plugin for related migration guidance.