Skip to content
Docs · Documentation

Kubyl Server

Server license

Activate Kubyl Server, the license states and grace period, and moving a license to another server.

Activation

A subscription is one server. You attach it to your install with an activation code from your customer portal at kubyl.dev.

  • Online (the default): in the console's License tab press A and type or paste the code, or use the web UI's License page, or the app's license screen (Activate with a code). The server sends the licensing service the code and a signed request with its install id and its public keys (nothing else: no clusters, no devices, no usage) and gets a lease bound to this install. It then renews itself: the lease is valid until the end of your paid period (a year at most), after which the server asks again. Once a day while the lease is valid it picks up changes such as more devices or another plan.
  • At startup, for containers and Kubernetes: set KUBYL_SERVER_ACTIVATION_CODE (or --activation-code; prefer the variable, arguments show up in ps). A server without a lease then activates itself, retrying while the licensing service is unreachable. A server that has a lease ignores it, and a refused code (unknown, in use by another install) is logged once. A code that isn't well formed stops the server at startup.
  • Air-gapped ("license": {"online": false} in settings.json): the server never calls out. Enter the install id shown on the License tab in the portal and you get the lease by email for each period. Install it with F in the console (paste the text or give the file's path) or on the web UI's License page. Install each new lease before the old one runs out. Kubyl Mobile does not take a license file or link: instead its license screen can activate and renew any server, air-gapped or not, because the phone (which is online) talks to the licensing service and hands the signed lease to the server (Settings and the license screen).

License states

Without a lease the server can pair devices and show its license screens, and nothing else. The credentials, the paired devices and the cluster list are encrypted with keys that only a lease for this install delivers, so an unlicensed server doesn't connect to any cluster.

StateWhenWhat works
UnlicensedNo license yet.Pairing, devices, the license screens.
LicensedA valid lease.Everything, up to your plan's device limit: Personal 3 paired devices, Team unlimited.
GraceThe lease ran out less than 3 days ago and the renewal is pending or failing.Everything. A banner says why.
LockedGrace is over, the subscription ended, the install was released, or the server's clock went back (clock_rollback: fix the date and time).Pairing and the license screens only. Open streams end.

A failed payment stays “pending” while the payment provider retries; the 3 days of grace are for that. A cancelled subscription locks the server when the paid period ends. A locked server keeps its devices and unlocks as soon as a valid file arrives. It asks hourly, or press N on the License tab.

Plans and what the lease contains

PlanPaired devicesSign-ins
PersonalUp to 3Shared by all devices
TeamUnlimitedShared, or per device
  • One subscription is one server: the license binds to the first install that activates it, so the server need not exist before you buy. Prices and plans are on kubyl.dev; the app shows none.
  • The lease is a signed, time-limited statement for this install. Besides saying how long the server may run it delivers the secret that opens the server's encrypted stores, which is why an unlicensed server connects to no cluster. The mobile app asks the server to prove it holds a current lease before it trusts it.
  • An activation code has 20 letters and digits in four groups. A device paired before the first lease is kept (up to 3 at once) and moves into the encrypted store when the first lease arrives.
  • The clock guard tolerates a clock up to 10 minutes behind the last lease; further back is clock_rollback and locks the server until you fix the time or a fresh lease arrives. An offline server cannot prevent a lease from being used until its end.
  • Manual license calls are paced to one every 2 seconds.

Moving or changing the license

  • Move to a new server: press R on the License tab (or “Release this install” on the web UI's License page; the app's license screen follows). The server tells the licensing service, locks at once, forgets its keys (what it stored can't be read any more) and makes a new identity. The next activation code is shown once, on that screen.
  • After losing the config directory, release the binding in the customer portal instead.
  • Switch to a different license on the same install: remove the installed one first (X on the License tab, or the web UI), then activate or apply the new one.

Something missing or wrong? Open an issue on GitHub.