BetterIAM

Features

Every Better IAM feature module with one line on what it adds, the API group, server option, or package that turns it on, and a link to its page.

better-iam@better-iam/server@better-iam/oauth@better-iam/saml@better-iam/scim@better-iam/ldap@better-iam/mcp@better-iam/a2aoptions.tsindex.tslifecycle.tsapipackage.jsonapi.jsonexports.json

Better Auth adds capabilities through plugins you register one by one. Better IAM ships its feature modules inside @better-iam/server instead: most of them are API groups that exist on every instance (iam.api.<group>.<method>, and POST /api/iam/<group>/<method> over HTTP), a few are switched on with a server option, and the standard protocols (OAuth, SAML, SCIM, LDAP, MCP, A2A) live in their own packages that you import and mount. This page lists every module, says exactly what turns it on, and links to its page.

How a module is turned on

MechanismWhat you doExamples
Always-on API groupNothing. The group exists on every instance, and its collections are created by better-iam migrate with the rest of the schema. Permissions decide who may call it.teams, guests, licenses, billing, quotas, features, keys, vault
Server optionSet the option in the object you pass to betterIam(). Without it the module reserves nothing and enforces nothing.ssh, inference, clearances, verifiableCredentials, accessUsage, a2a
Tuning optionThe module is always on; the option only changes its defaults.billing, vault, signals
Protocol packageImport a factory from its package and mount its routes next to the IAM handler.createOAuthProvider (@better-iam/oauth), createSamlService (@better-iam/saml), createLdapServer (@better-iam/ldap)

The umbrella package better-iam re-exports every protocol package as a subpath (better-iam/oauth, better-iam/saml, better-iam/scim, better-iam/ldap, better-iam/mcp, better-iam/a2a), so installing better-iam is enough for every module on this page.

iam.ts
import { betterIam } from 'better-iam';
import { sqliteAdapter } from 'better-iam/adapter-sqlite';

export const iam = betterIam({
  database: sqliteAdapter({ filename: './iam.db' }),
  secret: process.env.BETTER_IAM_SECRET!,
  baseURL: process.env.BETTER_IAM_BASE_URL!,
  // Modules that are off by default:
  ssh: true, // SSH certificate authority
  inference: true, // AI model access control and the inference gateway
  verifiableCredentials: true, // SD-JWT verifiable credentials over OpenID4VCI
  accessUsage: true, // record which actions people use, for right-sizing and role mining
  clearances: {}, // security clearances and mandatory access control
  // Tuning for always-on modules:
  billing: { currency: 'EUR', timeZone: 'Europe/Berlin' },
});

There is no plugin to register for any built-in module, and no module has to be installed separately from @better-iam/server. The plugins option is for your own extensions (actions, resource types, endpoints, hooks); see Adapters and plugins. @better-iam/projects (createProjectsPlugin()) is a reference plugin built that way.

Organizations

Structures and commercial controls inside one organization (a ). All are always on.

FeatureWhat it addsTurned on byPage
Teams and departmentsNested teams with maintainers, join requests, membership reviews and directory sync; a department tree whose heads become managersAlways on: teams and departments API groupsTeams and departments
OnboardingChecklists for new members and for new organizations and projects, inherited down the tenant tree, visible to policiesAlways on: onboarding API groupOnboarding
Feature flagsPer-tenant boolean flags with targets, overrides, rollouts and a kill switch, readable in code, React, and policiesAlways on: features API group, iam.features; hooks in better-iam/reactFeature flags
GuestsSponsored guest accounts for people from partner organizations, with expiry, renewal, and cross-tenant admissionAlways on: guests API group, iam.guests; needs authentication.sendEmailGuests
LicensesProducts, seat pools, assignments, waiting lists and reclaim, with seats visible to policies and birthright rulesAlways on: licenses API group, iam.licensesLicenses
Billing and spendUsage meters, rate cards, spend by person, team, department and project, budgets, invoices, plans and subscriptionsAlways on: billing API group, iam.billing; the billing option tunes currency, time zone, and invoicingBilling and spend
API quotasUsage plans that throttle and cap a meter per API key, agent, person, group, or organizationAlways on: quotas API group, iam.quotasAPI quotas

Privileged access

Keeping standing privilege low and access time-bound. All are always on.

FeatureWhat it addsTurned on byPage
Just-in-time elevationEligible bindings people activate for a bounded time, with justification, MFA, and approvalAlways on: bindings API group (bindings.activate)Just-in-time elevation
Access lifecycleExpiring identities, temporary memberships, future-dated bindings, API key hygiene, one-call offboardingAlways on: identities, groups, bindings, credentials API groupsAccess lifecycle
Access packagesBundles of roles and group memberships that administrators assign and members requestAlways on: packages API groupAccess packages
Automatic assignmentBirthright rules that grant a package to every matching identity and remove it when they stop matchingAlways on: packages API group (autoAssign), iam.reconcilePackages()Automatic assignment
Access reportWhat ends soon, what is elevated now, and unused keys, plus owner digestsAlways on: reports API groupAccess report
Configuration as codeExport, plan, and apply a tenant's access model as one reviewed documentAlways on: config API group; CLI config-export, config-plan, config-applyConfiguration as code

Governance

The loop that keeps access correct over time.

FeatureWhat it addsTurned on byPage
Usage and role miningRecords which actions people use, right-sizes roles, mines redundant grants and outliersroleMining API group is always on; usage tracking needs the accessUsage optionUsage and role mining
CertificationsCampaigns where reviewers or managers keep or revoke each bindingAlways on: certifications API groupCertifications
Change safetyImpact previews before a change and access invariants no change may breakAlways on: impact and invariants API groupsChange safety
Terms of useVersioned agreements members accept, enforced through policiesAlways on: agreements API groupTerms of use
Privacy and consentPurposes, consent receipts, data-subject requests, and legal holdsAlways on: privacy API groupPrivacy and consent
Lifecycle workflowsJoiner, mover, and leaver automation with the owner's rights checked at each stepAlways on: workflows API groupLifecycle workflows
Compliance centerIdentity checks mapped to SOC 2, ISO 27001, NIST 800-53 and GDPR, with signed evidenceAlways on: compliance API group; CLI compliance-evaluateCompliance center
Application catalogA My apps launcher with assignments, access requests, and launch auditAlways on: applications API groupApplication catalog
Access pathsTells a denied person what they could do themselves to get accessAlways on: accessPaths API groupAccess paths
SchedulingThe jobs and CLI commands that keep governance runningYour scheduler, calling iam.* jobs or the CLIScheduling
Security clearancesClassification labels, clearances, and compartments enforced before any role or policy is readThe clearances option (clearances API group)Security clearances

Security services

FeatureWhat it addsTurned on byPage
Key managementTenant keys that never leave the server, for encryption, signing, MACs and JWTsAlways on: keys API groupKey management
Secrets vaultVersioned secrets with rotation, check-outs, and dynamic credentialsAlways on: vault API group; the vault option adds rotators and dynamic enginesSecrets vault
Data protectionTokenization of card numbers, SSNs and other values, read back per profile and purposeAlways on: protection API groupData protection
Private CAPer-tenant X.509 authorities for mutual TLS, internal HTTPS, and SPIFFEAlways on: pki API groupPrivate CA
SSH accessShort-lived OpenSSH user and host certificates decided by policy, with revocationThe ssh option (ssh API group, iam.ssh); CLI ssh-cert, ssh-host-enrollSSH access
Device posturePolicies that see which registered device a request comes from and whether it is managed and compliantAlways on: devices API group; prover in better-iam/client/deviceDevice posture
Threat detectionDetection rules over the audit trail, incidents, identity risk, and response playbooksAlways on: threats API group; CLI detect-threatsThreat detection

AI agents

FeatureWhat it addsTurned on byPage
AI agentsAgent identities with a sponsor and a boundary, and delegated sessions when they act for a personAlways on: agents and delegations API groupsAI agents
Model access and budgetsWho may call which models, token and cost caps, metering, and a gateway that keeps provider keys server-sideThe inference option (inference API group, iam.inference)Model access and budgets
MCP serversTool-level authorization for Model Context Protocol servers@better-iam/mcp (createMcpGate)MCP servers
Agent-to-agent (A2A)IAM-attested agent cards, card verification, and authorization for A2A calls@better-iam/a2a; the a2a option signs agent cardsAgent-to-agent (A2A)

Federation protocols

FeatureWhat it addsTurned on byPage
OAuth and OIDC sign-inSign-in with Google, GitHub, Entra ID, or any OIDC or OAuth2 providercreateOAuthLogin from @better-iam/oauthOAuth and OIDC sign-in
SAMLSAML 2.0 single sign-on with tenant-managed connectionscreateSamlService from @better-iam/samlSAML
OAuth/OIDC providerA tenant-aware authorization server for your own apps, CLIs, and devicescreateOAuthProvider from @better-iam/oauthOAuth/OIDC provider
Resource servers and tokensAudience-restricted JWT access tokens verified offline, DPoP, token exchangecreateAccessTokenVerifier and createResourceGuard from @better-iam/oauthResource servers and tokens
Dynamic registration and MCPRFC 7591 client registration for MCP hosts and self-configuring clientsThe registration setting of createOAuthProviderDynamic registration and MCP
Verifiable credentialsSD-JWT credentials for digital wallets with selective disclosure and status listsThe verifiableCredentials option (verifiableCredentials API group); CLI vc-sweepVerifiable credentials
Shared Signals transmitterSigned CAEP and RISC events pushed to SIEMs and partner IdPscreateSharedSignalsTransmitter from @better-iam/oauthShared Signals
Shared Signals receiverCAEP and RISC events received from an organization's identity providersAlways on: signals API group, iam.signals; the signals option tunes fetching and the push pathShared Signals receiver
SCIM inboundConnection-scoped SCIM 2.0 endpoints an organization's directory provisions intocreateScimService from @better-iam/scimSCIM inbound
SCIM outboundPush members and groups to downstream SaaS over SCIM 2.0createScimProvisioner from @better-iam/scimSCIM outbound
LDAP gatewayRead-only LDAPv3 directory with password and API key bindscreateLdapServer from @better-iam/ldap; ldap API group for each organization's settingsLDAP gateway
Enterprise onboardingOne customer from "we use Okta" to SSO, provisioning, and offboardingThe domains API group plus the SAML, OAuth, and SCIM packagesEnterprise onboarding

Next steps

Was this page helpful?

Better IAM is created by Sean Filimon

Last updated

On this page