Product

One licensing and entitlement broker. Every consuming package.

Palladium is a multi-tenant licensing and entitlement service. It assigns licences to software packages scoped per client and per project, and brokers role-based access decisions on behalf of each licensed package from that package's own declared role catalogue. It is built and released from a single shared codebase, deployed as independently administered production instances rather than one shared multi-tenant runtime.

2
independent production deployments
1
shared codebase
.NET 10
current LTS runtime
900s
max continuity without network
OAuth2
Authorization Code + PKCE
RLS
database-enforced tenant isolation

The Problem

Every package that needs licensing and RBAC ends up building its own.

A software package that has to check whether a user is licensed, and what that user is allowed to do, typically builds that logic itself - roles hardcoded into the package, licence checks scattered through the codebase, and no consistent record of who has access to what across products.

Palladium separates that concern out. A consuming package self-registers once and declares its own role and permission catalogue; Palladium stores and versions that catalogue without hardcoding any package's semantics, then owns role assignment, licence validity, and decision evaluation on the package's behalf. The consuming package only applies the decisions Palladium returns - it does not administer roles itself.

How It Works

Two artefacts. One broker. No per-interaction network call.

Package Registry

Self-registration

Each consuming package self-registers at publish time and declares its own role catalogue. Palladium stores and versions that catalogue - it never hardcodes what a role means for any particular package.

Two-Artefact Model

Identity, then entitlement

A short-lived access token carries identity and tenant, no permissions. A separately-fetched entitlement snapshot carries the resolved permission set. Consumers cache the snapshot and evaluate each action locally against it, rather than calling Palladium per interaction.

Connectivity Resilience

Fail-open vs. fail-closed

A defined FRESH/STALE/DENIED/RECOVERY state machine fails open on a transient network loss and fails closed on an integrity failure - revoked, tampered, or a mismatched tenant or catalogue. Maximum continuity without network contact: 900 seconds.

Deployment Model

White-label by configuration, not by fork.

Palladium is designed to run as two independently administered production deployments - one on UV's own Hetzner account, one on CodeZero's - built and released from a single shared codebase. Per-tenant branding (display name, logo, colour palette) is applied by configuration only, from that one codebase, so a new tenant's identity never requires a code change.

The operator administration surface used by UV and CodeZero staff to manage tenants, licences, packages, and role assignments is the one exception: it carries Palladium's own platform identity rather than any tenant's branding, because it is never tenant-facing.

Scope Boundary

What Palladium is not.

Not billing or invoicing

Billing, payments, invoicing, subscriptions, and price books are explicitly out of scope. The architecture must not foreclose them later, but Palladium itself does not build them.

Not an identity provider

Palladium consumes an identity assertion; it does not own primary authentication credentials, password reset, or MFA. It is a licensing and entitlement broker, not an SSO replacement.

Technology Stack

.NET, PostgreSQL row-level security, and a dependency-light client SDK.

Server-side projects target net10.0, the current .NET LTS release. The consumer-facing client SDK targets netstandard2.0 with zero third-party dependencies, so it can run in-process inside a host application alongside third-party add-ins.

Server.NET 10 (LTS), ASP.NET Core Minimal APIs
DatabasePostgreSQL 17+, three-role Row-Level Security for tenant isolation
Cache / rate limitingRedis, per-instance, non-persistent
API contractREST/JSON, OpenAPI 3.1, frozen and diff-gated
Auth / sessionOAuth 2.0 Authorization Code + PKCE, public client, no embedded secret
Client SDKnetstandard2.0, zero third-party dependencies
Operator console (O7)ChameleonV2, UV's own React/TypeScript schema-driven component library

Status

In active development.

Platform IP

Palladium is UV platform IP, measured on reusability across consumers - not built for a single client. CodeZero's "Pyrometrix" project is the first consumer and the acceptance vehicle for the platform, not the product definition.

Pilot deployment

A CodeZero-side UAT server is provisioned and live, with Docker installed. Development is proceeding Ordinatum by Ordinatum against a documented delivery plan, with each milestone independently verified before it is marked complete.

Talk to the Team About Palladium

Palladium is in active development, with a CodeZero pilot integration underway. Contact us to discuss licensing and entitlement brokering for your own software packages.

Start a Conversation