What Kora Is
Kora is a license server you run on your own machine. You create products and customers, Kora issues keys, and your products call Kora to check a key before they run.
Everything lives in your own PostgreSQL, MySQL or MariaDB database. There is no third-party service in the middle and no per-key fee.
Checking a Key
Your product sends one request:
{
"license_key": "ABCDE-FGHIJ-KLMNO-PQRST",
"product_name": "My Plugin"
}
Kora answers with valid and a code that says why, such as expired, wrong_product, not_whitelisted or leaked. You can change the message for each code from the dashboard.
Every response is signed with an Ed25519 key. Put the public key in your product and check the x-kora-signature header, and nobody can point your product at a fake server that always says yes.
Official SDKs
You do not have to write the request yourself. There are SDKs for:
- Node.js and TypeScript:
@zerodev-ca/kora - Java, for Paper, Spigot, Velocity and Folia:
ca.zerodev:kora-java - Python:
zerodev-kora - FiveM and RedM:
kora-fivem
Each one checks keys, verifies the signature when you give it the public key, and can manage licenses, products and customers with an API token. See the SDK docs.
Keeping Keys Where They Belong
- Whitelists limit where a key works, by IP, a request header or a request body field such as a hardware ID. Customers can add their own entries up to a limit you set.
- Leak detection flags a key when it is checked from more IPs or devices than you allow in a time window. Kora can return
leakedand also suspend the license. - Validation logs record every request with its key, product, result, IP and device.
- Expiry is handled for you. A product's duration sets the expiry on new keys, with a grace period you choose.
BuiltByBit
The BuiltByBit module connects Kora to your resources. Paste a BuiltByBit API token and Kora:
- Lists your resources and links each one to a Kora product.
- Reads every purchase, creates a customer for the buyer and issues their license.
- Can revoke a license when its purchase is refunded.
- Fills license key placeholders, so buyers get their key in the download.
It syncs every five minutes by default, or on demand.
Discord
The Discord module runs a bot in your server. Staff can create and edit licenses, products and customers with slash commands, and customers can run /mylicenses to see their keys. Every license check can be posted to a log channel, and the bot's status can show live numbers.
The Dashboard
The dashboard runs inside Kora on port 3000. Sign in with Discord. It has pages for licenses, products, addons, customers, whitelists and validation logs, plus:
- Integration, with your request URL, public key, ready-to-paste code and a live tester.
- Team members and Roles, so support staff only see what they need.
- Audit Log for every change, whether it came from staff, an API token or Kora itself.
- API Tokens with scopes for the management API.
- Lang, to edit any text Kora shows, in 16 languages.
Customers sign in at the same address and get the client dashboard: their licenses, their keys and the activity on each one.
Writing Your Own Modules
Core, BuiltByBit and Discord are all modules, and you can write your own. A module can add config, lang files, commands, dashboard pages, API routes, events, models and timed jobs. See the developer docs.
What You Need
- A host that runs Node.js 20 or newer, or Bun.
- An empty PostgreSQL, MySQL or MariaDB database.
- A Discord application for sign-in.
- Your Kora license key from the Zero Development Discord.
The first start opens a setup wizard in your browser. It takes about a minute.


