Extension Distribution
Tuna’s extension store is curated during the public beta. Extensions must be open source and are reviewed, built, signed, and published with the maintainer.
This flow targets Tuna 0.80 and TunaKit 1.14.0.
Package
From the root of a project created from the starter:
./scripts/tuna-extension package
This builds Release and creates a .tunaextension archive under dist/store. The archive contains
the framework, declaration-derived metadata, compatibility, and integrity hashes. Store signing is
added during the review and publication process.
Keep compatibility.minTuna and compatibility.minTunaKit explicit in the Swift declaration;
packaging fails instead of inventing missing floors. For a one-off package test, you can override
the packaged compatibility and deployment target without editing source:
MIN_TUNA=0.80 MIN_TUNAKIT=1.14.0 MIN_MACOS=15.0 \
./scripts/tuna-extension package
Packaging requires a signed Release build and a Tuna installation to read the declaration. Select
your development team in Xcode for interactive use; the starter README documents the explicit team,
signing-identity, and TUNA_BINARY overrides for non-interactive builds.
Before proposing an extension
- Build against the released TunaKit package, not a local TunaKit checkout.
- Install into a released Tuna build and restart Tuna.
- Exercise every catalog, action, target, setting, connection, empty state, and error path.
- Confirm item, action, catalog, provider, and setting IDs are stable.
- Confirm minimum Tuna, TunaKit, and macOS versions are accurate.
- Include a clear README, license, screenshots, and setup/privacy notes.
The public TunaExtensions repository provides the complete first-party examples under the MIT License, copyright Mikkel Malmberg. The public starter uses the same license. TunaKit source remains proprietary, copyright Mikkel Malmberg; its released compiled binary is free to use for building Tuna extensions and themes.
Propose it for the store
Email Mikkel about your extension with a link to its public source repository and a short description of what it adds. We will review the API usage, trust/privacy implications, compatibility, packaging, and store presentation together.
You may also distribute the source independently. Manual native-code installs require an explicit trust decision because extensions execute inside Tuna’s process.
