Atom

Identity and authorization in one deployable service.

Open-source authentication, RBAC, ABAC, and runtime authorization in a single Rust binary backed by PostgreSQL.

Open Source · Apache 2.0
5
Entity kinds
Policy flexibility
100%
Online authorization
Features

Built for modern identity and access control.

Authentication, authorization, identity management, and policy enforcement — one service.

Identity Model

Humans, devices, services, workloads, and applications share one identity model. No special user class.

Runtime Authorization

Every policy decision is evaluated live. Token changes and revocations take effect on the next request — no restarts.

Authentication

JWT sessions, API keys, and OIDC social login (Google, GitHub). All flows produce a standard Atom JWT with zero-downtime key rotation.

Multi-Tenancy

Tenant isolation across entities, resources, and policies. Each tenant gets a bootstrapped admin role with full lifecycle enforcement.

Authorization Debugger

Ask why a request was allowed or denied. The explain endpoint returns a full decision trace — matched policies, skipped bindings, ABAC steps.

Open Source

Apache 2.0. GraphQL, REST, and gRPC APIs. Single Rust binary, PostgreSQL auto-migrated on startup. No vendor lock-in.

Architecture

Two modules. One binary.

Identity and Authorization run in the same process, backed by a single PostgreSQL database. No sidecars, no external services.

Atom
Identity Module
entitiescredentialssessionsgroupsownerships
Authorization Module
resourcescapabilitiesrolespolicy_bindingsPDP engine
PostgreSQL
Single database · Auto-migrated on startup
Request Pipeline
Handler
HTTP · parse · respond
Service / Engine
Business logic · audit
Repo
SQL only · domain types
How it works

Deploy. Model. Enforce.

01

Run Atom

Clone the repo and start the stack with Docker Compose. Atom migrates the database and seeds the admin account automatically.

02

Model your system

Create tenants, entity kinds, and resource definitions through the Admin UI or API. Profiles let you describe your platform's vocabulary.

03

Enforce access

Call the authorization endpoint from your services. The policy engine evaluates live state and returns ALLOW or DENY instantly.

Policy Engine

One policy primitive. RBAC and ABAC unified.

Both role-based and attribute-based access control are expressed through a single PolicyBinding — no separate systems to manage.

PolicyBinding
PolicyBinding {
  subject:    group("operators")
  grant:      capability("publish")
  scope:      tenant("factory-a")
  effect:     allow
  conditions: {
    "resource.env": "production"
  }
}

No permissions embedded in tokens. Every decision is evaluated online.

Explicit deny
A deny binding overrides any allow immediately — no policy ordering tricks.
Group inheritance
Policies on a group propagate to all members in real time.
ABAC conditions
Attach conditions to any binding — match on entity or resource attributes using dot-path assertions.
Bulk checks
Check dozens of permissions in one call — designed for gateway-level enforcement.
Explain endpoint
Get a full decision trace: matched policies, skipped bindings, ABAC evaluation, and final verdict.
Deny by default
No matching allow policy means denied. Nothing is implicitly permitted.
Admin UI

Built for operators.

Manage every object in the system from one interface. No SQL console, no curl scripts.

Live platform summary — entity counts, recent activity, authorization outcomes, and expiring credentials at a glance.

Create, update, and manage humans, devices, services, workloads, and applications with credentials and group membership.

Create and inspect RBAC and ABAC bindings. Set explicit deny rules and view all bindings for any subject or resource.

Define roles and assign capabilities. Role membership is evaluated live — no token reissuance when roles change.

Run explain queries interactively. See matched policies, skipped bindings, and ABAC evaluation steps without writing any code.

Every significant event — login, logout, credential creation, authorization checks — logged immutably and exportable to CSV.

Built-in Playground with full schema introspection. Explore the API, run queries, and test policies interactively.

Atom Admin Dashboard
Atom Entity Management
Atom Policy Bindings
Atom Roles Management
Atom Authorization Debugger
Atom Audit Logs
Atom GraphQL Playground
Developer Surface

GraphQL-native. Runtime-ready.

One endpoint for management. A dedicated gRPC channel for high-throughput runtime checks.

GraphQL API

All management at a single endpoint — full schema introspection and a built-in Playground.

Custom REST

Define REST routes in the Admin UI backed by GraphQL operations. No code deployment needed.

gRPC Runtime

High-throughput authorization checks over gRPC — used by Magistrala and microservice backends.

Built-in Playground

Explore the schema, run queries, and debug policies directly from the Admin UI.

Quick start

Up and running in minutes.

1. Start with Docker
git clone https://github.com/absmach/atom.git
cd atom
docker compose up -d
2. Open the Admin UI
# Open in your browser:
# http://localhost:3005
#
# Log in as the super admin
# using the credentials you
# set in ADMIN_SECRET
Use Cases

Where Atom fits.

Multi-Tenant SaaS

Tenant-scoped identities and runtime policy enforcement with full lifecycle isolation.

SaaSMulti-tenancyIsolation

IoT Platforms

Devices and gateways as first-class identities with credentials and fine-grained runtime policy coverage.

IoTDevice IdentityMQTT

Microservices

Centralized runtime authorization across services. One HTTP or gRPC call per check, policy changes propagate instantly.

MicroservicesAPI KeysgRPC

Security Operations

Access explainability through the API. Answer 'why denied?' and 'who can access this?' without touching the database.

SecOpsAuditCompliance

Edge Systems

Single-binary deployment alongside edge infrastructure. Minimal footprint with full policy enforcement.

EdgePropellerGateway
Deployment

One binary.

Self-contained and operational immediately after deployment. No infrastructure assembly required.

Single Rust binary
No runtime dependencies, no JVM, no Node.
PostgreSQL only
No Redis, no message queues, no coordination service.
Auto migrations
Schema migrations run on startup automatically.
Key generation
JWT signing key generated and stored on first boot.
Docker Compose
Atom + PostgreSQL, ready in one command.
Kubernetes
Single Deployment + Service. Config from env vars.
FAQ

Common questions.

How is Atom different from Keycloak?

Keycloak embeds permissions in tokens — policy changes require token reissuance. Atom evaluates every authorization decision live through the PDP. It also ships as a single binary backed by one PostgreSQL database, with no JGroups, no Infinispan, and no XML configuration.

Does Atom support RBAC and ABAC?

Yes. Both are expressed through the same PolicyBinding primitive. RBAC uses role grants with no conditions. ABAC attaches dot-path conditions evaluated against entity or resource attributes. You can combine both in a single binding.

Does Atom support OIDC?

Yes. Atom supports OIDC social login with Google, GitHub, and any standards-compliant provider. The OIDC flow produces a standard Atom JWT — same as password login. Atom also exposes a JWKS endpoint for zero-downtime key rotation.

Can Atom run in Kubernetes?

Yes. Atom is a single stateless binary that reads config from environment variables. Deploy it as a Kubernetes Deployment with a PostgreSQL service. Migrations run on startup — no init container or migration job needed.

Are permissions embedded in JWTs?

No. Atom JWTs carry only the entity ID and session ID. Authorization is evaluated live on every request. A policy change or session revocation takes effect immediately — no token reissuance or cache invalidation needed.

Is Atom open source?

Yes. Atom is licensed under Apache 2.0. The source is at github.com/absmach/atom. All APIs — GraphQL, REST, and gRPC — are fully open with no commercial restrictions.

Get started

Deploy Atom today.

Identity, authentication, and authorization from one deployable service. Apache 2.0. Single binary. Deploy alongside PostgreSQL on a VM, in Docker Compose, or on Kubernetes.