← Back to Blogus

Grant: The Open Source Identity & Access Management Platform

9 min read
Ale Heredia
grant-platformsecurityopen-sourceidentityannouncement

A couple of weeks ago we published Grant on GitHub at github.com/grant-js/grant. Documentation lives at docs.grantjs.org. This post is the first in a series about the platform—not a deep dive into protocols or database schemas, but the story behind it: the motivations, what I learned about how cybersecurity ideas become standards, and a concise look at what Grant is meant to do for developers and organizations.

Why Grant exists

The seed was personal and practical—Why I Decided to Focus on Security covers that path. Like many of us, I live in a world of MFA codes, password managers, and “sign in with…” buttons. That friction pushed me to look at how authentication actually works under the hood—TOTP, WebAuthn, OAuth 2.0, OpenID Connect—and at the same time, how authorization is supposed to work when you are not just logging a person in, but deciding what they may do inside a product, across teams, customers, and environments.

Commercial identity products are mature, but the space I cared about sat in a different gap: open, self-hosted access control that treats multi-tenancy, least privilege, and developer experience as first-class concerns—not an afterthought behind a proprietary dashboard. Grant is my answer to that: an open-source, multi-tenant RBAC platform you can run yourself, integrate with familiar stacks, and extend without vendor lock-in.

None of that is novel as a slogan. What made the journey meaningful was having to align implementation choices with standards that were not written for hobby projects—they were written so that organizations could agree on what “secure enough” means.

Standards and reading the map

Building Grant meant going beyond “OAuth and JWTs on a slide.” I kept returning to NIST—the National Institute of Standards and Technology, a U.S. agency that publishes widely used cybersecurity and identity guidance (notably SP 800-63, Digital Identity Guidelines). I am not claiming certification; I am saying that implementing MFA, verification, and session behavior made those documents feel like a shared vocabulary for why controls exist, not just policy text.

On the authorization side, the same idea applies: formal RBAC work (including what NIST helped shape and standards such as ANSI INCITS 359) gives a stable model—users, roles, permissions—so products and auditors can mean the same thing. I wrote about RBAC foundations earlier; Grant is where that model meets organizations, projects, and APIs in a running system.

What we built (a high-level tour)

Grant is documented on Grant's Docs Site. Here is what the platform includes, in plain language.

Multi-tenancy and RBAC

  • Organizations and projects — Isolated scopes for customer data; resources, roles, and keys live inside projects.
  • Permissions and resources — Action-based permissions on resources you define (for example document:create, document:read); optional permission conditions for finer rules.
  • Groups and roles — Bundle permissions into groups, assign groups to roles, assign roles to project users.
  • Tags — Label and organize project entities where your model needs metadata.

Identity and sessions

  • Sign-in methods — Email and password, OAuth providers (e.g. GitHub), with email verification and password policies as documented in security.
  • MFA — Set up TOTP and recovery codes; MFA challenge on sign-in when enabled.
  • Sessions — JWT-based sessions with device-aware behavior; users can review and revoke sessions from security settings.
  • API keys — User-scoped and project-level keys, with token exchange for calling your APIs (API keys).

Apps that use Grant

  • Project Apps — OAuth clients for your own apps: redirect URIs, scopes, default sign-up role, and Project OAuth flows (integration guide).
  • Account workspaces — Switch between personal and organization accounts without losing context.

Developer experience

  • TypeScript-firstGraphQL API with generated types; REST where you need it (API reference).
  • SDKs@grantjs/server middleware (Express, Fastify, NestJS, Next.js, and more) and @grantjs/client for React and permission-aware UI.
  • CLI@grantjs/cli for setup, auth, and type generation.

Operations, privacy, and observability

  • Self-hosting — Docker Compose, Kubernetes (Helm), your infrastructure and data (self-hosting).
  • Observability — Structured logging, metrics, and tracing (overview).
  • Privacy and compliance-oriented features — Account data export, deletion, retention configuration, and audit logging to support “who did what” narratives.

Internationalization — Built-in i18n for the product UI and translated API errors (i18n).

You can try a hosted demo at demo.grantjs.org with short data retention, or follow the quick start to run it locally.

From sign-up to a project app (a visual walkthrough)

The Integration Guide runs the same path with Run buttons and captured IDs. Below is the same story in screenshots—onboarding and verification, MFA, then project setup (create project, resource, permissions, groups, roles, tags, users, API key), and finally a Project App with OAuth through to an authenticated session.

Sign up — Create a new account.

Grant sign-up form

Email verification — Grant asks you to confirm your address.

Email verification prompt in Grant

Verification email — The message you receive to complete verification.

Email client showing Grant verification email

Before verification — What stays restricted until your email is verified.

Grant UI showing restrictions until email is verified

Email confirmed — Verification succeeded.

Grant email verification confirmation

MFA setup — Start adding a second factor.

Grant multi-factor authentication setup

Authenticator QR — Scan the code with your app.

Grant MFA setup QR code

Recovery codes — Save one-time backup codes in a safe place.

Grant MFA recovery codes

Sign in — Return with email and password.

Grant sign-in page

MFA at sign-in — Second step after password.

Grant MFA challenge on sign-in

Enter the code — Complete MFA with your authenticator.

Grant MFA code entry on sign-in

Security settings — Review sessions and security options.

Grant account security settings

Preferences — Locale and other account preferences.

Grant account preferences

Create a project — Add an isolated project (Integration Guide step 2).

Grant create project form

Project ready — New project created; next you attach resources and RBAC.

Grant project created confirmation or empty project

Create a resource — Define what your app protects (here, a Document with actions).

Grant create resource form

Permissions — Project permissions derived from the resource.

Grant project permissions list

Permission cards — Same model, card layout.

Grant project permissions as cards

Groups — Bundle permissions (e.g. full Document access).

Grant project groups

Roles — Attach groups to roles for assignment.

Grant project roles

Tags — Organize project metadata with tags.

Grant project tags

Tag colors — Pick a color for a tag.

Grant project tag color palette

Project users — Users inside the project with roles.

Grant project users list

Project user detail — Inspect or edit a single project user.

Grant project user detail

User API key — Issue a key scoped to the project user (matches the guide’s API key step).

Grant create user API key

Project App — OAuth client for your app (redirect URIs, scopes, sign-up role).

Grant project app configuration

OAuth flow — User lands on Grant to sign in or consent.

Grant project OAuth sign-in flow

Callback — Redirect back to your app with the authorization result.

OAuth callback in example app

Signed in — End state: authenticated against the project.

Grant project OAuth authenticated session

For the exact API bodies and token exchange, follow the Integration Guide; the Server SDK and Client SDK docs show how to enforce permissions in your code.

Open source and what comes next

Releasing Grant publicly is not the end of the story; it is the point where feedback, contributors, and real workloads matter most. Security-sensitive projects depend on transparency—see the repository’s SECURITY.md for responsible disclosure—and on documentation that stays honest about scope and limits.

Future posts in this series can go deeper: architecture, RBAC design inside Grant, integration patterns, and lessons from production hardening. For this first installment, I wanted to anchor why the project exists and how the journey changed my relationship with formal guidance—from NIST and elsewhere—not as footnotes, but as part of how modern systems earn trust.

If you are building something that needs solid authorization and you value open source and self-hosting, I hope you will take a look at Grant on GitHub and tell us what you think.

Comments