Step-by-step guide

From an empty shop to a licensed plugin, one screen at a time. Every picture on this page comes from a real run of these steps on a fresh WordPress shop. The shop in the pictures is “Acme Audio”, selling a made-up plugin called “AX1 Compressor”.

You do not need web or server experience. If you can install a WordPress plugin and build a JUCE project, you can do this. In part 2 you copy a few commands into Terminal, and each one is shown in full. If you use an AI coding assistant, give it this page and the README files in your download. If you get stuck, write to support@seatlocklicense.com. We help until it works.

What you need

  • A WordPress shop with WooCommerce. It needs hosting with https. Most hosting plans install WordPress in one click, and WooCommerce is a free plugin.
  • A Mac with Xcode and CMake. Xcode is free from the App Store. CMake is free from cmake.org.
  • JUCE 8 or 9. You also need a JUCE licence that lets you sell closed-source products.
  • Your Seatlock download. Unzip it. The folder holds the shop plugin, the SDK, seatlock-tool and the example plugin.

Part 1: your shop

1. Upload the plugin

In WordPress, open Plugins → Add Plugin → Upload Plugin. Choose seatlock-license-server-1.0.0.zip from your download, click Install Now, then Activate.

The WordPress Upload Plugin screen with the Choose File and Install Now buttons.
Plugins → Add Plugin → Upload Plugin.

2. Read the Health panel

Open Seatlock in the left-hand menu. The Health panel lists what is still missing. Red rows are normal on a new shop, and the right-hand column says what to do.

The Seatlock Overview screen on a new shop. Three health rows are red: signing keys, signing key file and master key.
A new shop: three red rows, each with its fix.

Check the row Key file outside the web root. On most hosting it is green, as here. If it is red, your host needs one line in wp-config.php. Write to us and we tell you the exact line for your host.

3. Create your keys

Open Seatlock → Signing keys. Click Generate keys. Then click Create master key on the same screen.

The Actions panel with the Generate keys button, and the Master key section with the Create master key button.
Two buttons, clicked once each.

The signing keys sign every licence your shop issues. The master key locks the release keys you add in step 6. Both are written to a folder outside your website, which a browser cannot reach.

The Signing keys screen after both clicks: two published keys, the private key file present, and the master key set.
Done: two published keys, and the master key is set.

Back up the key folder now. The screen shows where it is. Ask your host how to download a folder, or use their file manager. Keep the copy off the server. If you lose the signing keys, installed copies of your plugin stop accepting new licences. A database backup does not contain them.

Go back to the Overview. Every health row is now green.

The Health panel with all five rows green.
All green.

4. Add your plugin as a product

Open Seatlock → Products & releases. Under Add a product, type a short product code and the name your customers read. The other fields have sensible defaults. Click Add product.

The Add a product form with product code AX1 and display name AX1 Compressor.
Product code AX1, name AX1 Compressor.

Choose the product code carefully. It goes into every key and every build, so it cannot change later.

5. Connect it to your WooCommerce product

On the same screen, What a purchase issues lists everything your shop sells. A red note means a customer could buy something and receive no key. Pick your product code next to the shop product and click Map.

What a purchase issues: the shop product AX1 Compressor with the product code AX1 chosen and the Map button.
Before: the shop product issues nothing.
After mapping: the shop product now issues AX1 full licences, and it appears under Mappings.
After: a purchase now issues an AX1 licence.

Part 2: your plugin

You start with the example plugin in your download. It is the smallest plugin that licenses itself, and every line in it is a line you will use in your own product.

6. Create your release key and register it

Open Terminal. Type cd and a space, drag your unzipped Seatlock folder into the Terminal window, and press Return. Then copy these lines one at a time:

xattr -dr com.apple.quarantine tool
T=tool/seatlock-tool/seatlock-tool; K=~/seatlock-secure
mkdir -p $K && chmod 700 $K
[ -f $K/vendor-salt.hex ] || $T salt > $K/vendor-salt.hex
[ -f $K/AX1-1.0.0.key ] || $T release-key > $K/AX1-1.0.0.key
pbcopy < $K/AX1-1.0.0.key

What they do: the first line lets macOS run the tool you downloaded. The second gives the tool and your private folder short names. The next lines make that folder, create your vendor salt (once for your whole company, never changed) and a release key for version 1.0.0, and copy the release key to your clipboard. The salt and key lines never overwrite a file you already have, so running them twice is safe.

In WordPress, open Seatlock → Products & releases → Register a release key. Choose your product, type the release 1.0.0, paste the key and click Store sealed.

The Register a release key form with product AX1, release 1.0.0 and a pasted 64-character key.
Product, release, key, Store sealed.
The Release keys table with AX1 release 1.0.0 marked live.
The release is live.

Keep the ~/seatlock-secure folder, and back it up. You need the same salt for every product you ever ship, and each release key to rebuild that release.

7. Put your shop’s details into the example

In the same Terminal window, replace your-shop.com with your shop’s address in both places, then run:

T=tool/seatlock-tool/seatlock-tool; K=~/seatlock-secure
curl -s https://your-shop.com/wp-json/seatlock/v1/pubkey \
    > $K/pubkey.json
$T emit --out sdk/hello-seatlock/Source/SeatlockGenerated.h \
    --vendor "Acme Audio" --vendor-salt @$K/vendor-salt.hex \
    --product AX1 --release 1.0.0 --app-version 1.0.0 \
    --server https://your-shop.com/wp-json/seatlock/v1 \
    --pubkeys $K/pubkey.json

Use your own company name after --vendor and your own product code after --product. The file this writes holds only public values: your shop’s public keys, your salt and your shop’s address. You do not edit any code. The example finds the file by itself.

8. Build the example and open it

Replace /path/to/JUCE with the folder where JUCE is on your Mac:

cmake -S sdk/hello-seatlock -B build -DJUCE_DIR=/path/to/JUCE
cmake --build build --target HelloSeatlock_Standalone
open "build/HelloSeatlock_artefacts/Standalone/Hello Seatlock.app"

The plugin opens unlicensed. It is silent until it is activated. That silence is the whole protection: no nag screen, no noise.

The example plugin window: unlicensed, a key field and an Activate button.
The example plugin, before activation.

Part 3: a test purchase

9. Buy your own product

Place an order for your product in your shop, as a customer would. You can also create one in WooCommerce → Orders → Add order and set it to Completed. When the order is complete, the customer receives this e-mail:

The licence key e-mail: the product name, the full key, and how to activate.
The key e-mail, sent by your shop in your name.

10. Activate

Paste the key into the plugin and click Activate.

The example plugin with a licence key typed in.
The key, typed in.
The example plugin licensed: the masked key and 1 of 2 machines in use.
Licensed, on 1 of 2 machines.

The customer sees the same machine in their account, and can free it there when they change computers:

The customer's Licenses page: the product, the masked key, 1 of 2 computers in use, and a Release button for that computer.
My account → Licenses, on your shop.

If you see this, everything works: your shop issued the key, the plugin checked it with your shop, and your shop recorded the machine.

Part 4: before you sell

  • Your own product. Copy the licensing parts of the example into your plugin. The example’s README shows the five lines that do the check in your audio code, and the rules that keep them safe.
  • Your DSP constants. To encrypt the values your sound depends on, pack them with seatlock-tool before step 7. The tool’s README shows the one command.
  • Backups. The key folder on your server, and your ~/seatlock-secure folder on your Mac. Keep both off the server and off that Mac.
  • A second computer. Activate on it too, then free a machine from your account page. It is the quickest real-world check.
  • Each new version. Repeat steps 6 to 8 with the new release number, for example 1.1.0 in place of 1.0.0. Your salt stays the same.

Stuck anywhere?

Write to us with the step number and what you see. We help until the example plugin activates against your own shop.

Write to support Open the live demo