Releases3 min read•2026-09-30Updated 2026-10-11Featured

Introducing Kora 2.0

A Built-In Dashboard, a Setup Wizard, Signed Responses and Official SDKs

Introducing Kora 2.0
Key Takeaways
  • The dashboard is part of Kora and runs on port 3000, with the API on 3001. There is nothing extra to install or build.
  • A setup wizard in the browser activates your license, connects the database and sets up Discord sign-in, with no restart.
  • Only startup settings stay in config.json. Everything else lives in your database and is changed from the dashboard.
  • Every validation response is signed with Ed25519, and whitelists, leak detection and validation logs keep keys where they belong.
  • BuiltByBit purchases become customers and licenses on their own, and customers can sign in to see their own keys.
  • Official SDKs cover Node.js, Java, Python and FiveM.

Kora 2.0 is a rebuild from the ground up. It runs on the same module system as Medusa, the dashboard is part of Kora itself, and setup happens in your browser instead of in a config file.

Here is what changed.

The Dashboard Is Built In

The dashboard runs inside Kora on port 3000, and the API runs on port 3001. There is no second app to host and nothing to build.

Everyone signs in with Discord. The owner of your Kora license gets full access, staff get the permissions of their role, and customers land on the client dashboard.

It has pages for licenses, products, addons, customers, whitelists and validation logs, plus:

  • Integration, with your request URL, your public key, ready-to-paste code and a live key 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 a module shows, in 16 languages.
  • Logs, with the live console.

Press Ctrl K or ⌘K to search licenses, products, customers and members from anywhere.

Setup in the Browser

The first start opens a setup wizard. You enter your Kora license key, your database details and a Discord application for sign-in, and pick a name and accent color. Kora then connects to the database, activates the license, loads its modules and checks for updates, showing each stage with the live console. When it finishes you sign in. There is no restart.

The Discord account on your license becomes the dashboard owner.

Settings Live in Your Database

config.json now holds only what Kora needs to start: the sign-in secret, the database connection, the ports and the public URLs. The wizard fills it in for you.

Everything else is stored in your database and changed from the dashboard:

  • Settings for language, appearance, sign-in, updates and the client dashboard.
  • Configs for each module's settings.

Settings > Transfer Options exports your settings to a file and imports them on another install.

Signed Responses

Every validation response is signed with an Ed25519 key, in the x-kora-signature header. Put the public key in your product and check the signature, and nobody can point your product at a fake server that always says yes.

Get the public key from Settings > Response Signing Key or from GET /api/v1/public-key.

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.
  • Leak detection flags a key when it is checked from more IPs or devices than you allow in a time window, and can suspend it.
  • Validation logs record every request with its key, product, result, IP and device.
  • License statuses are yours to define, such as Suspended or Revoked, and each one returns its own code.

Modules

Everything in Kora 2.0 is a module. Three ship with it:

  • Core: licenses, products, customers, addons, whitelists and the validation endpoint.
  • BuiltByBit: reads your resources and purchases, creates a customer for each buyer, issues their license, can revoke it on a refund, and fills license key placeholders.
  • Discord: slash commands for staff, /mylicenses for customers, a validation log channel and live numbers in the bot's status.

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.

Client Dashboard

Customers sign in with Discord at your dashboard address. They see their own licenses and keys, add and remove their own whitelist entries up to the limit you set, and see the activity on each key. Turn it off under Settings > Client Dashboard.

Official SDKs

The zerodev-ca/Kora-SDKs repository has an SDK for each platform:

PlatformPackage
Node.js and TypeScript@zerodev-ca/kora
Java 17+ (Paper, Spigot, Velocity, Folia)ca.zerodev:kora-java
Python 3.8+zerodev-kora
FiveM and RedMkora-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.

import { Client } from "@zerodev-ca/kora";

const kora = new Client({ url: "https://kora.example.com", product: "Test Product 1", publicKey: process.env.KORA_PUBLIC_KEY });

const result = await kora.validate(licenseKey);
if (!result.valid) throw new Error(result.message);

See the SDK docs for Java, Python and FiveM.

Updates

Settings > Updates shows your version and the newest one. Click Update to install it, or turn on Automatic Updates to install new versions when Kora restarts.

Getting Kora 2.0

Kora 2.0 is a fresh install. Download it from BuiltByBit, create an empty PostgreSQL, MySQL or MariaDB database and follow the setup guide. You need Node.js 20 or newer, or Bun.

Questions

What changed in Kora 2.0?

Kora 2.0 is a rebuild. The dashboard is built in, setup runs in a browser wizard, settings live in your database, responses are signed with Ed25519, and BuiltByBit purchases become licenses on their own.

Can I upgrade from an older Kora to 2.0?

Kora 2.0 is a fresh install. Create an empty database and follow the setup guide at zerodev.ca/docs/kora/setup.

What ports does Kora 2.0 use?

The dashboard runs on port 3000 and the API on port 3001. Both can be changed in config.json.

Keywordskora 2.0kora license managerbuiltbybit licensingself-hosted licensingsoftware licensing sdks
Back to Blog