Skip to content

Write the 20% that is your product. We already wrote the rest.

Build your product as a UniCore plugin: one .NET assembly, no frontend for the admin console, and multi-tenant accounts, sign-in, permissions, sharing, billing and GDPR erasure already underneath it.

Who this is for

Teams building industry software for a specific trade

Agencies serving many small businesses from one platform

Product teams whose value is the domain, not the plumbing beneath it

What we solve for you

Every product needs the same foundation: accounts, sign-in, permissions, multi-tenancy, sync, sharing, billing, data export, deletion and an admin console. You have built it before. You will build it again for the next product, unless something else owns it. That is where we come in: UniCore provides the foundation, and you build your product on top of it.

What you get

One assembly, one hard boundary

A plugin is a single .NET assembly that references only the SDK. A compiler analyzer fails the build if it reaches into the platform internals, so your plugin stays separable and upgradable by construction.

An admin console you don't write

Declare settings, collection, insight and action panels in your manifest and the dashboard renders them, including forms, grids and foreign-key pickers. There is no frontend code in a plugin.

Your data model, managed for you

Declare a domain and the platform provisions it, namespaced by your plugin so two products can never collide. Schema changes go through a forward-only migrator you control.

A published API with up-to-date docs

Turn on the domain API and the platform serves OpenAPI, a browsable Swagger UI and typed CRUD straight from your loaded plugin, including an optional anonymous read surface for public pages.

Billing, metering and erasure as facades

Declare products, charge once, create subscriptions, record usage against a meter. React to the platform's erasure events instead of implementing account deletion yourself.

Deploy without a restart

Upload the assembly and it loads in place across every host that needs it, isolated and single-versioned. No rolling restart, no planned downtime required.

How it works

  1. Start with the SDK

    Reference the SDK package and declare a manifest: identity, version, the hosts you need, your permissions and your release notes.

  2. Declare your domain

    Describe your definitions and their fields. The platform provisions them on install and hands you a migrator for everything after that.

  3. Write your endpoints

    Define routes and attach a permission to each. Mark the ones that should be publicly reachable and the gateway publishes them anonymously.

  4. Declare the admin surface

    Write your panels as data in the manifest. This step usually costs multiple frontend sprints. Here it costs a single line of code.

  5. Verify in CI

    The SDK checks your manifest, plugin includes and the assembly boundary before anything is uploaded.

  6. Install and adopt

    The assembly is loaded only once. Each tenant then adopts the plugin independently, and the plugin can create initial data for them.

What ships with UniCore and what you write

Everything on the left already exists, is tested and is maintained by us. Everything on the right is yours to write.

Ships with UniCore

Multi-tenant accounts and tenant isolation

Email and password sign-in

Google, Microsoft and Apple sign-in

Sessions and session renewal

Roles, named permissions and row-level access

Sharing and group membership

A schema-managed data store with migrations

Background jobs

Messaging between hosts

Realtime push to connected clients

Email, Telegram and Discord notifications

Approve and reject buttons inside those messages

Products, subscriptions and entitlement gates

Usage metering

GDPR erasure and data export

Audit logging

An admin console rendered from your manifest

OpenAPI and Swagger for your own API

Release notes for your own versions

You write

Your domain model

Your business rules

Your user interface

Before you ask

What is not in the SDK yet?

There is no file or blob facade, so attachments are metadata today. There is no document-rendering contract, so PDF generation is up to you. The job interface has no schedule section, so recurring work runs on events, messages or on demand. And the query filter grammar is string-typed, with no boolean equality, so boolean predicates are evaluated after the query.

Can I ship a plugin without your source code?

Yes. The SDK is a package, and the analyzer enforces the boundary at build time rather than by convention. A third party can build and ship a plugin without ever seeing the platform source.

How does one plugin serve many customers?

Each tenant adopts the plugin independently, and every data call is tenant-scoped by the host's execution context. You do not write tenant filters, and you cannot forget one.

What happens when I upgrade?

Upgrades are deliberate. A newer binary on boot only marks an update as pending; the upgrade itself runs as a job you trigger. Uninstall is a soft delete and keeps the data. A full data purge is a separate, irreversible step that requires a manual trigger.

Where does it run?

On your infrastructure. UniCore is self-hosted: one compose file, PostgreSQL or SQL Server. Offline and air-gapped installs are supported. There is no managed hosting option today.

See it applied to your own case

Thirty minutes, screen-shared, with your API or your product idea on the table. No slide deck.

See pricing