- Flexible Authentication: Natively supports both legacy Active Directory / LDAP and modern Enterprise SSO (OpenID Connect via Google, Keycloak, Auth0) out-of-the-box using a simple
AUTH_MODEtoggle. - Role-Based Access Control (RBAC): Users are systematically classified strictly as
REQUESTERorAPPROVERdynamically via whitelist environment constraints. - Request Collections (Templates): High-density management of reusable request blueprints. Supports direct template creation, custom visibility (Global/Private), and full feature parity with the main dashboard (Auth, Params, Headers).
- Granular Payload Construction: Full GUI support for mapping URL search parameters, Header key-values (with dynamic Basic/Bearer Auth injection), and raw JSON bodies.
- Audit Transparency: Detailed audit trails for all request lifecycles. Rejections now capture
rejectedByandrejectedAtmetadata for full accountability. - Structured JSON Logs: A zero-dependency metadata flattening logger outputs strictly formatted non-nested JSON strings natively to
stdoutβperfect for Datadog, ELK, or Loki. - Request Cloning: Easily clone and mutate existing/historical requests into new drafts natively from the dashboard.
- Execution Telemetry: Permanent attachment of raw response data and network latency (mapped via
performance.now()) to executed tickets.
- Framework: Next.js 16 (App Router + React)
- Styling: Tailwind CSS
- Database: Prisma ORM with SQLite backend (Easily swappable to PostgreSQL/MySQL)
- Authentication: Dual-mode engine utilizing
ldap-authenticationfor Active Directory and vanillafetch()+josefor pure natively validated OAuth2 (OIDC) JSON Web Tokens.
-
Install Dependencies
npm install
-
Configure Environment Copy
.env.exampleto.env(or create a.envfile natively) and populate your database architecture alongside your AD/LDAP variables:# Database Configuration DATABASE_URL="file:./dev.db" # Flexible Environment Toggles AUTH_MODE="LDAP" # Choose strictly "LDAP" or "SSO" # LDAP / Authentication Configuration MOCK_LDAP="true" # Set to false to bind to real LDAP instances LDAP_URL="ldap://your-server:389" LDAP_SEARCH_FILTER="(|(sAMAccountName=%s)(userPrincipalName=%s))" # OIDC Configuration (If AUTH_MODE="SSO") OAUTH_CLIENT_ID="your-client-id" OAUTH_CLIENT_SECRET="your-client-secret" OAUTH_AUTH_URL="https://accounts.google.com/o/oauth2/v2/auth" OAUTH_TOKEN_URL="https://oauth2.googleapis.com/token" OAUTH_REDIRECT_URI="http://localhost:3000/api/auth/callback" # Security Roles APPROVERS="admin,supervisor.name"
-
Sync Database Architecture
npx prisma db push
-
Launch Application
npm run dev
Heimdall is designed for zero-config local development with SQLite, but supports MySQL and PostgreSQL for production scalability.
- Verify your database server is running and you have a database created.
- Switch the project configuration:
npm run db:mysql # For MySQL npm run db:postgres # For PostgreSQL
- Update
DATABASE_URLin.envto your connection string (see.env.example). - Apply the schema and generate the client:
npx prisma migrate dev --name init
- Run the switch script:
npm run db:sqlite
- Update
DATABASE_URLin.envtofile:./dev.db. - Sync the database:
npx prisma db push
The repository contains a fully structured Dockerfile to seamlessly host the server on any infrastructure without local dependencies.
-
Build the container
For SQLite (Default):
docker build -t heimdall-platform .For MySQL:
docker build -t heimdall-platform --build-arg DATABASE_PROVIDER=mysql . -
Run the secure instance
docker run -p 3000:3000 --env-file .env -d heimdall-platform
- Session Integrity: The system securely manages stateless session cookies globally.
- Environment Strictness: Unless
FORCE_HTTPS=trueis set, development setups natively bypass the "Secure" flag on cookies allowing local infrastructure hosting across IP networks. - HMR Strictness: Turbopack inherently isolates socket headers. If you are developing over a network,
next.config.tsdynamically scans node hardware IP paths internally to allow hot-reloading anywhere on the VM array natively.