Corresponding source: TeaVOX+ and TeaMIDI 1.0.0
Methane Co: Project Imitatio Dei

Keep the adjacent layout TeaVoxPlus/, TeaMIDI/, TeaGate/, Shared/Licensing/, dependencies/JUCE/, dependencies/curl-8.23.0/, dependencies/c-ares-1.34.8/ and cross-build-reference/. TeaVoxPlus/CMakeLists.txt builds both products; TeaMIDI remains a separate plugin and standalone app. Shared/Licensing/PublicKey.h is a public verification key, not a signing secret. Native licensing source and tests are included. Production signing keys, purchased licenses, customer keys, provider credentials, developer handoffs, caches, evidence media and build products are excluded.

The products use AGPL-3.0-or-later. Recipients retain its rights to inspect, modify and redistribute the source/software. See TeaVoxPlus/LICENSE and TeaVoxPlus/docs/THIRD-PARTY-NOTICES.md. JUCE is included under its AGPL option with its own notices; no commercial JUCE license is required for this AGPL source distribution. Network/compiler-runtime notices are in cross-build-reference/THIRD_PARTY_NETWORK_AND_RUNTIME_NOTICES.txt. All third-party notices continue to apply.

macOS native build (CMake 3.22+, Xcode/Command Line Tools, C++17):
  cmake -S TeaVoxPlus -B build-intel -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DTEAVOX_BUILD_TESTS=OFF
  cmake --build build-intel --parallel 2
Use arm64 instead of x86_64 for Apple Silicon, or set CMAKE_OSX_ARCHITECTURES="x86_64;arm64" for a universal native build. Both product artefacts appear under build-intel/{TeaVox,TeaMIDIPlugin}_artefacts/Release/{VST3,AU,Standalone}. macOS HTTPS activation uses Foundation; libcurl is unnecessary there. Local official bundles are ad-hoc signed and not notarized; rebuilding does not provide Apple notarization.

Windows/Linux native builds need a C++17 toolchain, JUCE's platform development libraries and libcurl >=7.85 with c-ares. Configure c-ares with CARES_STATIC=ON, CARES_SHARED=OFF. Configure curl with ENABLE_ARES=ON, ENABLE_THREADED_RESOLVER=OFF, BUILD_SHARED_LIBS=OFF, BUILD_CURL_EXE=OFF, BUILD_TESTING=OFF, CURL_USE_LIBPSL=OFF. Windows uses Schannel (CURL_USE_SCHANNEL=ON, CURL_USE_OPENSSL=OFF). Linux uses system OpenSSL and CA certificates. Install libraries to a dedicated prefix and pass -DCMAKE_PREFIX_PATH=<prefix> to the same product CMake command. Windows/Linux formats are VST3 and Standalone; AU is Apple-only. Disable executable tests while cross-compiling using -DTEAVOX_BUILD_TESTS=OFF. Cross-compilation and binary inspection do not establish native Windows/Linux or DAW runtime compatibility.

Windows llvm-mingw is an experimental toolchain rather than JUCE's supported MSVC configuration. The exact compatibility patch is cross-build-reference/juce9-llvm-mingw.patch. Apply once to the bundled upstream JUCE tree before llvm-mingw configuration:
  cd dependencies/JUCE
  patch -l -p1 < ../../cross-build-reference/juce9-llvm-mingw.patch
  cd ../..
Check applicability with patch -l --dry-run -p1 first. Native MSVC can use unpatched JUCE. Cross-build reference scripts preserve developer SSD paths as provenance and need adjustment for your checkout. Compilers and sysroots are not bundled; DOWNLOADS.sha256 and linux-packages.txt record upstream dependency provenance.

Testing and offline licenses:
  cmake -S TeaVoxPlus -B build-tests -DCMAKE_BUILD_TYPE=Release -DTEAVOX_BUILD_TESTS=ON
  cmake --build build-tests --parallel 2
Pure DSP tests and locked tests need no purchased key. Run TeaVoxLockedTests and TeaMIDILockedTests with no installed license. They exercise latency-aligned dry passthrough, note/export restrictions and saved-state preservation. The incumbent processor/GUI/workflow tests require an authentic installed live certificate because production processors deliberately have no test bypass. Do not mistake a missing license for a DSP regression. Tests that render GUI snapshots require a GUI session.

LicenseVerifierTests accepts six paths: public-key.txt valid.json tampered.json test.json wrong-product.json bundle.json. Generate independent RSA-2048 fixture signatures with a standard RSA-SHA256 PKCS#1 v1.5 implementation. Envelope: {"payload": <exact JSON string>, "signature": <standard-base64 signature>}. Claims: {"schema":1,"licenseId":"fixture-id","products":["teavox","teamidi"],"mode":"live","issuedAt":<positive Unix seconds>}. public-key.txt uses the JUCE format hexExponent,hexModulus. The "valid" fixture must include teavox; wrong-product must include only teamidi; the test fixture uses mode test and must be rejected. The verifier test's explicit public-key argument does not alter the production manager's compiled key.

LicenseManagerTests takes a production-key-signed bundle fixture, temporarily imports it and restores product-named license files afterwards. That private signing key and its fixtures are intentionally absent. For a modified source build you control, you may replace PublicKey.h with your own matching public key and generate matching isolated fixtures. AGPL source modification rights apply; never ship or publish a private signing key. Run license tests before provisioning the official certificate for incumbent tests, then run ctest --test-dir build-tests --output-on-failure. Set -DGMFM_TEST_FIXTURES=<fixture-folder> if using the registered signature test.

Official license locations are ~/Library/Methane Co/Licenses on macOS, %APPDATA%/Methane Co/Licenses on Windows, and ${XDG_CONFIG_HOME:-~/.config}/Methane Co/Licenses on Linux. TeaSUITE is represented by one signed file listing both products. No expiry or playback-time phone-home is required. No raw purchase key is stored in the certificate. In an unlicensed build TeaVOX passes dry with its declared latency, and TeaMIDI produces no notes or exports while retaining saved takes.

Tealy online features optionally use your own supported-provider API key. Offline operation and compilation require no provider key. No audio is uploaded by licensing. The source release contains the native client, public verification material and packaging references; the merchant's backend credentials/signing secrets are operational secrets and are not dependencies needed to compile these native products.
