Licensing3 min read•2026-10-11

What is Kora?

A License Server You Host Yourself

What is Kora?
Key Takeaways
  • Kora issues license keys for the things you sell and answers validation requests from your products.
  • Validation responses are signed with Ed25519, so a fake server cannot fake a valid answer.
  • Whitelists limit where a key works, and leak detection flags keys used in too many places.
  • The BuiltByBit module turns purchases into customers and licenses, and can revoke them on refunds.
  • Customers sign in with Discord to see their keys and manage their own whitelist entries.

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 leaked and 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.

Get Started with Kora
Kora on BuiltByBit
Kora on BuiltByBitLicense Manager
Buy Kora and see its update history.
View Resource
Kora Setup Guide
Kora Setup GuideDocs
Install Kora and run the setup wizard.
View Resource
Validating Keys
Validating KeysDocs
Check a license from your product, with code for each language.
View Resource

Questions

What is Kora?

Kora is a self-hosted license server by Zero Development. It issues license keys, answers validation requests from your products and gives you a dashboard for products, customers and keys.

How does a product check a Kora license?

It sends a POST to /api/v1/licenses/validate with the license key and product name. Kora answers with valid and a result code, and signs the response with Ed25519.

Does Kora work with BuiltByBit?

Yes. The BuiltByBit module reads your resources and purchases, creates a customer for each buyer, issues their license and can revoke it on a refund.

Which languages have a Kora SDK?

Node.js and TypeScript, Java (Paper, Spigot, Velocity and Folia), Python, and FiveM and RedM.

What database does Kora use?

Your own PostgreSQL, MySQL or MariaDB database. Kora needs Node.js 20 or newer, or Bun.

Can customers see their own licenses?

Yes. Customers sign in with Discord to the client dashboard to see their keys, manage their whitelist entries and see activity on each key.

Keywordskora license managerself-hosted license serversoftware license keysbuiltbybit licensinglicense validation apiminecraft plugin licensing
Back to Blog