v2.0 — Open Source

Multi-tenant SaaS,
built for enterprise.

Schema-per-tenant isolation, multi-realm Keycloak auth,
and a plugin system powered by Module Federation.

Why Plexica?

Enterprise-grade multi-tenancy without the complexity tax.

Schema-per-Tenant

Each tenant gets an isolated PostgreSQL schema. DROP SCHEMA for GDPR right to erasure. No shared data, no leaks.

Multi-Realm Auth

Every tenant gets its own Keycloak realm. SAML, OIDC, social login, MFA — configured per-tenant.

Plugin System

UI plugins via Module Federation, backend via HTTP proxy, event subscription via Kafka. Plugin in half a day.

RBAC + ABAC

Role-based access control with attribute-based condition tree for workspace-level data isolation.

Event-Driven

Kafka/Redpanda event bus for async plugin communication. CRUD events emitted automatically on core entities.

Zero-Mock Testing

E2E tests run against real Keycloak, real PostgreSQL, real Kafka. What you test is what runs in production.

Quick Start

Up and running in 5 minutes.

Terminal
# Clone
git clone https://github.com/plexica/plexica.git && cd plexica

# Configure
cp .env.example .env

# Start infrastructure
docker compose up -d

# Install dependencies
pnpm install

# Run migrations
pnpm --filter core-api db:migrate

# Create a demo tenant
pnpm --filter core-api tenant:create -- --slug demo

# Start the API (Terminal A)
pnpm --filter core-api dev

# Start the Web UI (Terminal B)
pnpm --filter web dev

Documentation

Detailed specifications, architecture decisions, and project plan.

Technology Stack

Modern, battle-tested technologies.

RuntimeNode.js + TypeScript
BackendFastify
FrontendReact 19 + Vite
DatabasePostgreSQL + Prisma
AuthKeycloak (multi-realm)
EventsKafka / Redpanda
CacheRedis
StorageMinIO (S3-compatible)
Plugin UIModule Federation
RouterTanStack Router
StateTanStack Query + Zustand
StylingTailwind CSS + Radix UI
i18nreact-intl
E2EPlaywright
Monorepopnpm workspace
CIGitHub Actions

Ready to build with Plexica?

Star the repo, read the docs, or contribute to the v2 rewrite.