# Pro (/pro)



Everything Lumi does is in the free copy. A licence lifts exactly one number:
&#x2A;*how many ways into a flow may be armed at the same time.** Free runs three;
Pro runs all of them.

Shortcuts, the Hyper key, leader menus, snippets, variables, and building and
editing flows are all the same on a free copy. Nothing expires, and no feature
is taken away when a subscription ends.

## What counts as a "way in" [#what-counts-as-a-way-in]

The unit is a **place**, not a flow and not a shortcut:

* An armed flow spends **one place per trigger combination** it claims.
* A switched-on flow that holds no combination spends **one**.
* A flow that is switched **off** spends nothing.

So a flow with three `Shortcut` trigger nodes is three places; a flow started
only by name is one. A flow that alone asks for more places than the plan has
arms **nothing** rather than half of itself — a document where two of four
combinations answered the keyboard would do something nobody wrote.

Flows fill the plan from the top of the Flows list. The rest keep their
settings and simply stop claiming the keyboard; the row says so. A declined
press is never silent — it names the flow and the pane that would free a place.

## Losing Pro is harmless [#losing-pro-is-harmless]

* **A capped flow is never rewritten.** `enabled: true` stays, the switch stays
  on. Regaining Pro turns it back on with nothing to redo.
* **Subscribe again and the flows arm themselves.** There is nothing to switch
  back on, because nothing was switched off.

The **Run** button inside the flow editor is never capped, so a flow can always
be built and tested.

## Pricing [#pricing]

One plan, two ways to pay: **$4 / month*&#x2A;, or **$40 / year**. The yearly price
is the same product billed once.

Checkout is Lemon Squeezy's hosted page — the
[store](https://store.thiennguyen.dev), also reachable from the License pane and
the [homepage](https://lumikeys.app).

## Activating [#activating]

Paste the licence key into **Settings → About → License** and press Activate.
The License screen is a sub-view of **About** rather than a tab of its own; the
`Pro` badge in the sidebar footer is the other way in.

That is the whole of it — there is no account to make and nothing to
re-activate on renewal: the key lives as long as the subscription does, and
renewals extend it silently.

<Screenshot name="license-pane-unlicensed" alt="The License pane before activation" />

`license.json` sits beside `config.json` in
`~/Library/Application Support/dev.thiennguyen.lumi/`. It holds the key, this
Mac's seat, the last known status, and the timestamps the re-check runs on. It
is written `0600`, and the key is never logged or shown again after you type it.

## Moving to another Mac [#moving-to-another-mac]

A licence covers three devices — the pane's **This Mac** row counts them. To move one:

1. On the old Mac, **Settings → About → License → Deactivate**. That releases this Mac's
   seat.
2. On the new Mac, paste the key and Activate.

If a Mac is gone — wiped, or the app deleted — its seat can only be released
from the billing portal (&#x2A;*Manage…** on the License pane), because the handle
that identifies the seat went with `license.json`.

<Callout type="warn" title="Deactivation needs the network">
  If Deactivate cannot reach the store, the key is still removed from this Mac,
  but the seat stays counted until you clear it from the portal. The pane says
  so when this happens.
</Callout>

## Going offline [#going-offline]

A live subscription publishes **no expiry date** — Lemon Squeezy sends none
while it is healthy and moves the status to `expired` only once it ends. So
there is no local countdown, and a lapse is visible only through a successful
check.

* **A failed check is not an expiry.** A timeout, a rate-limit or a server
  error leaves the stored licence exactly as it was. Offline for a week is
  still entitled.
* **Thirty days without a *successful* check** drops entitlement whatever the
  stored status says — the only bound available when there is no date to count
  down. One successful check undoes it: focus a window with a network behind it
  and the flows arm themselves again.
* Lumi re-checks quietly at launch and when a window is focused, at most once a
  day. A shortcut that runs a flow also consults entitlement, so a menu-bar app
  that goes weeks without a window still notices a lapse.

## Reading the License pane [#reading-the-license-pane]

<Screenshot name="license-pane-active" alt="The License pane with an active subscription, and the Pro badge in the sidebar footer beneath the version" />

A status pill heads it — **Active** while the subscription is running — over the
product, who it is licensed to, and the key itself, masked, with a button to
reveal it and one to copy it.

| Row              | Says                                                                                                                                                                                                                                                                                                   |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **This Mac**     | Which seat this machine holds, and how many the licence has — `1 of 3 devices`.                                                                                                                                                                                                                        |
| **Activated**    | When this Mac took its seat.                                                                                                                                                                                                                                                                           |
| **Renews**       | `Automatically — see Manage` while the subscription is running. This is the ordinary case, not a fallback: a live subscription publishes no expiry date, so there is no countdown to show. A licence that *does* carry a date reads **Ends** instead — it has not renewed — and **Expired** past that. |
| **Subscription** | **Manage…**, straight to the billing portal.                                                                                                                                                                                                                                                           |
| **Activation**   | When the last check succeeded, with **Check again** to force one now, and **Deactivate** to release this Mac's seat.                                                                                                                                                                                   |

**Check again** is the manual form of the quiet re-check above; the *Last
checked* date beside it is the one the thirty-day bound counts from.

A licence on this Mac that is not currently granting Pro reads **Pro inactive**
on the badge — expired, disabled, a released seat, a retired variant, or a
month with no successful check. Only that one word is true of all of them,
which is why the badge says it and the pane says which.

The badge under the version in the sidebar footer — visible above — is the
short version of that pane, and clicking it opens it. The tray's `Version:`
label carries the same word, which is the half that earns the feature: a
menu-bar app's window can go unopened for weeks, so a lapse that announced
itself once in a toast would otherwise show nowhere.

A free copy is never labelled. The badge is a reward, and a label on a copy
that has bought nothing is an advertisement; there is no "Free" pill anywhere
in Lumi.
