01
You choose how hard to protect it
Two integration models, your call, per feature. The simple path is a few lines — verify the licence, branch on the result. Its honest limit: that is one boolean gating a branch, and a determined attacker can flip it with a one-instruction binary patch in your own executable. The load-bearing path removes the branch entirely — the licence physically carries an encrypted data key, and a real feature asset is sealed under it and opened at runtime via the LicenseAsset type. A forged or patched licence yields the wrong key, so the feature just produces garbage; there is no verdict to patch. It ships as a toolchain — rg_bind_asset seals an asset at build time, a CMake helper wires it in, rg_bind_lint checks your binding — and it is incremental: protect one high-value feature, leave the rest on the simple path.