v0.15.0For B2B products · Open source · Runs on your servers

Start with the platform already built.

Sign-in works. Customers get organizations and projects, or whatever levels your product has, with roles at each level, invites and their own API keys. Your team has an admin console to manage every customer. Every write lands in an audit log, every request has an id you can trace, and the dashboards are already up.

Now add your services, in any language. Every request arrives signed in, checked and traced. That's Plat5.

curl -fsSL https://plat5.com/install.sh | sh

Docker required.

$ plat5 startrunning

For your customers

  • Sign-inyour IdP, or Plat5 Auth
  • Organizations and projectsor the levels you declare
  • Roles and permissionsat any level, inherited below
  • Invitesto the org, or one project
  • API keyspersonal and service accounts
  • Audit logper customer, per project
  • Account pagesaccess, members, invites, keys

For your team

  • Admin consolemanage every customer
  • Operator audit logevery action your team takes
  • Rate limitsper caller, project or org
  • Request tracingone id on everything
  • DashboardsGrafana, preloaded
  • Config as codeplan, apply, roll back
GET /orgs/northwind/projects/web/taskssigned in · checked · traced→ GET /projects/01jbx9q3t5/tasks
  • tasksGo
  • billingNode
  • + yoursany HTTP server
All of it runs after plat5 start. Keep the defaults or change them; most pieces are optional. You write the dashed boxes.

/adding-an-endpoint

You write the feature. Plat5 does the rest.

Every endpoint in a B2B product needs the same eight things before the feature. Plat5 does them before the request reaches you. Your handler gets the project id in the path, filters by it and returns JSON. The permission is one line of YAML.

services/api.yml
api:
  url: http://api:3000
  scopes:
    project:
      upstream_prefix: /projects/{project.id}
      routes:
        - path: /tasks
          methods:
            GET: { required_permissions: [project:read] }
            POST: { required_permissions: [project:write] }

Write a service →

Adding POST …/taskswho

  • Check the token or API keyplat5
  • Find the organization and projectplat5
  • Check the caller's role thereplat5
  • Rate limit itplat5
  • Write the audit recordplat5
  • Attach a request id and traceplat5
  • Format the errorplat5 + starter
  • Build an admin API for supportplat5

Write the featureyou

/admin-console

An admin console from day one.

  • Your company login

    Your team signs in with your company's identity provider, never your customers'. No separate accounts to manage.

  • Every customer

    It calls the same service APIs your product does, on any organization or project, so there's no admin API to build.

  • Every step recorded

    Your team's actions go in their own audit log, apart from customers' logs.

  • Yours to extend

    The console is an open-source starter. Fork it and add your own tools.

The admin console showing Northwind Traders' audit log: who made each request, the route, the service and the outcome, including a refused 403.
A customer's audit log, as your team sees it, with sample Northwind activity. Your team's own calls are recorded separately, in the operator log.

The admin console →

/coding-agents

Your agent writes the features. Not the auth.

Who is calling, which customer and project it is, whether their role allows it and what gets recorded are decided outside the handler, so generated code can't skip them. Every endpoint follows one pattern, and the line to review is the filter by the id in the path.

How agents fit in →

/your-call

Sensible defaults. Nothing forced.

Everything works on day one. Keep the defaults, change them, or swap pieces out when you need to.

PieceOut of the boxYour call
Sign-inPlat5 AuthAny provider that issues JWT access tokens. Your services don't change.
HierarchyOrganizations, with projects insideYour own levels, like workspaces or environments, in one file.
RolesExample roles: admin, member, developer, viewerRename or replace them, and choose where each can be granted.
AuditEvery write, in its customer's logChoose per route, or turn it off.
Rate limitsA default limit on every routeYour own limits per route, shared across a project or an organization, or none.
DeletesRestorable for 30 daysSet the grace period.
TelemetryGrafana on your laptopAny OTLP collector, or scrape Prometheus.
ServicesGo, Node and Bun startersAny HTTP server.
Account pagesA starter web appRebrand it, fork it, or build your own.
Admin consoleA starter console for your teamFork it, or call its gateway directly.

/best-practice

Best practice, built in.

The defaults a careful platform team would pick, on from the first start.

Secure by default
Anything you haven't declared returns 404. Only routes you mark public take anonymous calls.
Customer isolation
Access is checked on the organization or project in the path. One you can't reach looks the same as one that doesn't exist.
Observable by default
One request id across logs, traces and audit.
Fail closed
No audit record, no write.
Least privilege
Read-only or limited keys, through a service account with a smaller role.
Secrets never touch app code
Credentials are stripped at the edge, and keys are stored hashed.
Audit by default
Every write is recorded in its customer's log unless you opt it out.
Safe changes
Every config change shows its plan before it applies. Deletes are soft, and restorable.
Open standards
OAuth 2.0 JWT access tokens, AuthZEN, OpenTelemetry, Prometheus, W3C Trace Context.
No lock-in
Open source, your servers, any identity provider, any language.

/yours

Yours to keep.

  • Open source

    The runtime is Apache-2.0. The CLI, starters, Plat5 Auth and the admin console are MIT.

  • Your servers, your data

    It runs where you run it. Your customers' organizations, members and audit logs live in your Postgres.

  • Plain HTTP services

    No Plat5 SDK in your code. Your services stay ordinary HTTP servers.

Today

  • Your laptop, with plat5 start
  • Your server, with Docker Compose

Next

  • Kubernetes and Helm
  • SAML SSO and SCIM for your customers
  • Custom roles per customer
  • Permissions on single records, through an optional policy engine
  • Audit export
  • Plat5 Cloud

Running on your laptop in minutes.

Open source. Runtime Apache-2.0. Everything around it is MIT.

Docker required
curl -fsSL https://plat5.com/install.sh | shplat5 init my-appcd my-app && plat5 start