SGKEMBEDDED PERFORMANCEEpicTunerSDK · PrereleaseContact ↗
EpicTuner SDK/ Package and distribute a plugin

Download the complete Markdown manual ↓
One file with guides, API headers and examples for developers and coding agents.

Package and distribute a plugin

A plugin installation is a signed .etplugin archive containing a manifest, target-specific libraries, declared dependencies, assets and license notices. The host verifies the publisher and every inventoried file before loading code. External redistribution terms for this SDK remain pending.

Development and distribution

Development mode accepts an explicitly named unsigned manifest for one launch. It is useful for iteration. Installation uses the signed package manifest described in the package contract. Do not put a development manifest directly into an archive and expect production installation to accept it.

Prepare the payload

payload-root/
  payload/windows-x64/my-plugin.dll
  assets/icon.png
  licenses/your-plugin.txt

Declare the matching target entry in your package manifest. Include only needed files. Native dependencies belong under their target payload directory and must be declared in dependencies. Images use package-relative assets/... paths. Application source, captured ECU data, private keys and customer tunes never belong in the payload.

Use the generated licensed example manifest or ImGui manifest as a schema example. Replace the test publisher and placeholder product URLs, set your host/ABI requirements and select the exact capabilities used by your binary. The files inventory is populated by the packaging tool.

Sign

python -m pip install -r tools/requirements.txt
python tools/package.py --manifest package-manifest.json --payload-root payload-root --key /outside/sdk/publisher.pem --output my-plugin.etplugin

Supply an external Ed25519 private PEM. The tool does not create or embed private keys. It refuses an existing output path. Keep the resulting package immutable; build a new semantic version for an update. Full canonicalization, inventory and signature rules are in PACKAGE.md.

Verify and install

Prepare a publisher public-key file with publisher, keyId, publicKey (32-byte hexadecimal Ed25519 public key). The imported file has exactly these three keys; the host adds revocation state to its trust registry. Review the identity before importing it through Tools → Plugins → Trust publisher key. Choose Install package, select the archive, review requested capabilities and enable it. The host verifies native OS/architecture and required features.

For automation, the separate package checker takes the archive and a trust registry containing {"schema":1,"keys":[...]}:

epictuner-plugin-package-check my-plugin.etplugin trust.json

That checker verifies the package; it does not install it or exercise the UI. Run the actual application acceptance case after installation.

Updates and recovery

An update stops the worker, stages and verifies an immutable version, then switches the active registry. New capabilities require review. Failed updated workers trigger rollback; plugin settings snapshots are handled separately. Test schema migration and rollback before delivery.

Use --safe-mode if a plugin prevents normal startup. It suppresses third-party starts while retaining management/recovery access. Do not repair a package by editing its installed files; that invalidates its signature/inventory.

Publisher trust authenticates the binary. Issuer trust authenticates an entitlement. They are separate identities and checks. Follow licensing for a local test issuer and offline activation.

The SDK's tools/test-catalog.py creates a signed local catalog for developer acceptance. Its domain-separated signature authenticates canonical catalog content and package hashes against an explicitly supplied public key. Production hosting, catalog discovery, issuer operations, purchase/refund and publisher payouts are outside this test catalog and remain later commercial-service work.