# What is Kora?

URL: https://zerodev.ca/blogs/what-is-kora
Published: 2026-10-11
Updated: 2026-10-11

> Kora is a self-hosted license server. Issue keys, check them from your products, sync BuiltByBit purchases and let customers manage their own licenses.

## 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:

```json title="POST /api/v1/licenses/validate"
{
    "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](/docs/kora/developer-documentation/sdks).

## 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](/docs/kora/developer-documentation).

## 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](https://discord.zerodev.ca).

The first start opens a setup wizard in your browser. It takes about a minute.

<Resources title="Get Started with Kora">
  <Resource name="Kora on BuiltByBit" description="Buy Kora and see its update history." link="https://builtbybit.com/resources/kora-next-generation-api.84931/" tag="License Manager" image="https://bucket.zerodev.ca/showcase/covers/kora-4.png" />

  <Resource name="Kora Setup Guide" description="Install Kora and run the setup wizard." link="/docs/kora/setup" tag="Docs" image="https://bucket.zerodev.ca/showcase/covers/kora-4.png" />

  <Resource name="Validating Keys" description="Check a license from your product, with code for each language." link="/docs/kora/extensions/core/api-reference" tag="Docs" image="https://bucket.zerodev.ca/showcase/covers/kora-4.png" />
</Resources>


## 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.