It is 10 minutes before a customer’s session, their studio computer has no connection, and the plug-in opens behind a screen that says only “locked.” At that point, the problem is no longer licensing architecture. It is a product decision that has become a support problem. A clear HISE plugin activation UI gives the customer a next step, shows when activation is moving, and states the offline policy without making promises the product has not chosen to make.
For a commercial HISE plug-in using Inlay, that starts with three documented states: activation_required, unlocking, and unlocked. You can use the optional stock lock overlay or build your own screen, but the underlying job is the same: make the browser handoff, retry path, and local-token validity policy understandable. Integrate InlayModule in HISE
This is a guide to those product decisions. Browser activation, serial keys, device binding, and machine-ID patterns are different choices; a good interface explains the model you have chosen instead of pretending one model suits every plug-in.
What a HISE plugin activation UI is actually deciding
Commercial access and the screen a customer sees are connected, but they are not the same problem. First, you decide what the customer has purchased and how that access is configured. Then, at runtime, the plug-in must show its current access state and keep the behavior you chose to protect unavailable while it is locked.
Keeping those jobs separate prevents a familiar failure mode: one opaque error that mixes purchase, account, and runtime state. Your activation screen should answer the questions that prevent abandoned sessions and avoidable support requests:
- Is activation needed now?
- What can the customer do next?
- Is activation already in progress?
- What should they do if it does not complete?
- What becomes available after validation?
Inlay provides licensing and activation infrastructure for commercial audio-plug-in developers, including HISE and JUCE integrations. In HISE, the interface should sit on top of the documented state and guard mechanisms, rather than trying to replace them. Integrate InlayModule in HISE
Model explicit activation states before designing the screen
The Inlay HISE integration exposes activation_required, unlocking, and unlocked through statusBroadcaster. Treat them as genuinely different moments for the customer, not as three labels for one generic modal. The integration also provides isLocked() as a lightweight guard for protected behavior. Integrate InlayModule in HISE
| Inlay HISE state | What the UI should communicate | Protected-behavior implication |
|---|---|---|
activation_required | Access is not currently available. Give a clear activation action and concise context. | Keep the behavior you have chosen to protect unavailable while the plug-in is locked. |
unlocking | Activation is underway. Show a waiting or progress state so the customer knows their action registered. | Do not treat activation in progress as unlocked access. |
unlocked | Access is available. Remove or update the lock presentation so normal work can resume. | Protected behavior can be available once access is unlocked. |
That distinction pays for itself in support and release quality. A person who sees “activation required” needs an action. A person who has already launched activation needs confirmation, not a second invitation to click. A person who is unlocked should not keep wondering whether the plug-in is usable.
Assign the UI and runtime responsibilities to the right mechanisms
statusBroadcaster is the reactive UI mechanism: it lets the screen respond when the integration changes state. isLocked() is the lightweight guard for protected behavior. The separation matters because a convincing screen and an actual access boundary have different jobs:
- The UI explains the current situation and offers the next meaningful action.
- The guard determines whether protected behavior remains locked.
Do not try to infer one from the other with a collection of button flags. A screen can look finished while protected behavior is still locked, or remain visually locked after access becomes available, when transitions are handled indirectly. Map the documented states first; then the presentation has a clear source of truth and the product has a clear behavior boundary.
Define recovery as part of each state
Recovery is part of the design, not an error screen added at the end. In activation_required, recovery may simply be the activation action. In unlocking, the customer needs to know the flow is still underway. If activation cannot complete, return to an understandable state where a retry is appropriate instead of leaving the plug-in on an unexplained progress screen.
That is a design principle, not a claim about a particular browser-return mechanism or failure policy. Match the actual interactions to the integration route you implement and to the actions your UI can support.
Stock overlay or custom HISE plugin lock screen UI?
The Inlay HISE integration includes InlayUi, an optional full-plug-in lock overlay. Its documented actions include activation, progress, retry, and logout. It is a presentation layer you can choose, not a requirement. Integrate InlayModule in HISE
A custom HISE plugin activation state UI can use the same state model while letting you control the structure, copy, placement, and visual language. The real trade-off is straightforward: how much presentation control do you need, and how much interface work are you willing to maintain?
| Decision area | Optional InlayUi overlay | Custom state-driven UI |
|---|---|---|
| Starting point | A documented full-plug-in lock overlay is available. | You design the presentation around the documented integration states. |
| Documented actions | Activation, progress, retry, and logout. | Decide how applicable actions appear in your product while retaining clear state and recovery messaging. |
| Branding and layout | Use the supplied overlay presentation. | Control the layout, language, hierarchy, and brand treatment. |
| Integration ownership | Use the optional stock UI route. | Own the state presentation and its transitions. |
| Best question to ask | “Is the documented overlay sufficient for this plug-in?” | “Does this product need an activation surface that fits its existing UI?” |
Neither route is automatically better. The stock overlay can be the sensible choice when you want the documented interaction without turning activation UI into another feature to own. A custom route fits when the plug-in needs activation messaging inside an established interface or a particular presentation. This is a presentation-and-effort decision, not a claim about security, conversion, support, or protection strength.
A short selection checklist
Choose the optional stock overlay when these statements fit your release:
- A full-plug-in lock overlay is an acceptable presentation.
- The documented activation, progress, retry, and logout actions cover the interaction you need.
- You do not need to control every detail of the screen’s visual structure.
Plan a custom UI when these statements fit better:
- Activation messaging needs to match an existing interface and product voice.
- You need direct control over how
activation_required,unlocking, andunlockedappear. - You are ready to implement and maintain the visual transitions while relying on the documented integration state and guard mechanisms.
Whichever route you choose, do not expose internal state names unless they help the customer. The goal is an accurate explanation and a clear next action, not a vocabulary lesson.
Design the HISE browser activation UI as a handoff, not a dead end
The Inlay HISE integration can start a browser activation flow. From the customer’s side, that browser should feel like one visible step in the plug-in experience, not an unexplained detour that leaves them guessing whether the button worked. Integrate InlayModule in HISE
The visible sequence is simple:
- The plug-in is in
activation_required, and the lock screen explains that activation is needed. - The customer explicitly starts activation.
- The plug-in enters
unlocking, and the screen acknowledges that activation is in progress. - The integration resolves to
unlocked, or the UI returns to an understandable, retryable recovery state when appropriate.
The browser-return details are outside this article. Do not invent a webview, callback, or return model in your copy unless it belongs to the exact integration you implemented and documented. The screen only needs to make the observable handoff legible: activation started, progress is being handled, and the plug-in will update when the flow resolves.
Write handoff copy around the user's next action
Useful activation copy is specific without making promises the system cannot establish. Write separately for each moment:
- Access required: say that activation is needed and label the user-initiated action plainly.
- Activation in progress: confirm that the flow started; do not present the plug-in as unlocked yet.
- Recovery: where applicable, offer retry language that tells the customer what they can do next.
- Access available: remove the block or make the move back to normal use obvious.
This is not an argument that browser activation is better than serial-key or machine-ID patterns. They have different interface and entitlement trade-offs. If your plug-in uses a browser-based flow, the job is simply to communicate it clearly.
Local validation and the offline-access policy
Offline copy is where a helpful activation UI can become misleading. The documented Inlay HISE behavior relies on a saved cached access token that is locally validated against the configured product, current device, issuance time, expiry, and configured public key. A valid cached token can permit offline use for its validity period. Integrate InlayModule in HISE
That calls for product language that reflects a policy choice. The organization needs to decide what validity horizon fits its product and customers. Configurable expiration is planned, rather than established as a currently documented release capability; when it is available, an organization may choose an appropriate horizon, including a date far enough in the future to support very long-lived offline access. Until that capability is documented as released, do not present a particular configurable horizon as something the current integration provides.
A conceptual offline example
Imagine a customer who previously completed activation and has a cached token that validates locally. If the device is offline, that cached access can allow use while the token is valid. The validity period is the condition the UI should communicate. In a future configuration model, the organization could make that period short, long, or potentially long enough for near-indefinite offline use, according to its chosen policy.
This is not a blanket promise of offline availability. It is a local-validation condition tied to the token’s validity period, and that is the policy your activation UI should state wherever it sets offline expectations.
Keep lifecycle detail separate from a service promise
The documented HISE module lifecycle includes a refresh when a locally validated token is more than one day old. If a refresh temporarily fails, a still-valid token is retained. Integrate InlayModule in HISE
This matters when you plan and test the integration, but it is not a service-availability guarantee. It does not itself change the token’s validity period or justify promising that access will survive every connection problem. For customer-facing copy, keep the durable message: a previously validated cached token may support offline use while it is valid.
Keep full-plug-in access separate from paid expansion entitlement
A full plug-in lock state and an expansion entitlement are separate scopes. In the Inlay HISE model, protected expansions are separate subproducts, and host access must be unlocked before expansion access is checked or requested. Protect HISE expansions with InlayModule
This is a small distinction with a large UX consequence. A host activation screen should not imply that every paid expansion has been granted, and an expansion prompt should not hide whether the host plug-in itself is locked. Name the scope in both the UI and product decisions: host access first, then the separate expansion entitlement when it is relevant.
For expansion-specific implementation guidance, see Protect HISE expansions with InlayModule. For broader commercial context without turning this article into a fulfilment guide, see Sell and protect paid HISE expansions.
Implementation checklist for a HISE plugin activation UI
Use this checklist before calling the activation screen ready to ship:
- Decide whether the optional
InlayUifull-plug-in overlay or a custom UI fits the presentation you need. - Map
activation_required,unlocking, andunlockedto distinct customer-facing states rather than one generic lock message. - Use
statusBroadcasterfor reactive state presentation andisLocked()as the lightweight guard for protected behavior, as documented for the Inlay HISE integration. Integrate InlayModule in HISE - Make activation user initiated and make the browser handoff understandable without claiming undocumented return mechanics.
- Show an in-progress state during unlocking; do not imply protected behavior is available before the state is unlocked.
- Provide a clear retryable recovery path where it applies to your implementation.
- Write offline messaging around the product policy: locally validated cached access can work offline while its token remains valid; do not claim a configurable horizon is currently available unless the released documentation supports it.
- Keep host plug-in access separate from any paid-expansion entitlement in both the interface and product model.
- Review the canonical HISE integration guide during implementation rather than relying on UI copy as a setup reference.
- Configure the relevant product and access rules in the Inlay Console for the release you are building.
Common activation-UI mistakes to avoid
Treating “locked” as the only state
One lock screen cannot tell a customer whether to start activation, wait for a process already in motion, retry an incomplete flow, or return to work. Preserve the distinction between activation required, unlocking, and unlocked even when the visual design is deliberately minimal.
Making the browser launch invisible
When activation launches a browser flow, acknowledge that it began and show the in-progress state. Otherwise, customers have to guess whether the button worked or whether they should click again.
Treating offline access as a fixed technical rule
Local validation is governed by a token validity period. In the documented Inlay HISE flow, cached access is conditional on a token that remains valid through its expiry. Frame that period as an access-policy decision, and distinguish today’s documented behavior from planned configurable expiration. Integrate InlayModule in HISE
Mixing host and expansion messages
When a product includes paid expansions, distinguish host access from the expansion’s separate entitlement. In the documented integration model, the host must be unlocked before expansion access is checked or requested. Protect HISE expansions with InlayModule
Build the UI around a truthful access story
The right activation UI is not the one with the most copy or the most elaborate screen. It is the one whose visible states match the access model underneath it. For an Inlay-powered HISE plug-in, start with activation_required, unlocking, and unlocked; then choose the optional stock overlay or a custom presentation according to the control you need.
Choose the stock overlay if its documented interaction is enough for this release. Choose a custom UI if a consistent product experience is worth owning the state transitions. In either case, make the browser handoff clear and describe offline access precisely: a locally validated cached token can permit offline use while it remains valid. Treat the validity horizon as a product-policy choice, and do not describe planned configurable expiration as already released.
For implementation details, review the HISE integration guide and configure products and access rules in the Inlay Console.
Try Inlay