ENGINEERING PLATFORM · SELF-HOSTED
Best practices that don't depend on discipline.
Catalog, infrastructure, secrets, databases, internal access, releases and incidents on one platform, in your infrastructure. One rule for every access, and every access on record.
Opens a WhatsApp chat. Prefer email? [email protected]
heimdall db access request pg-orders-orders --operations SELECT,UPDATE --tables public.orders,public.customers --reason "corrigir pedidos com total errado" --task-key OPS-101
✓ Access request submitted for database 'pg-orders-orders'
Operations: SELECT, UPDATE
Reason: corrigir pedidos com total errado
Task: OPS-101
Expires: 2026-10-10T08:13:58.978413Z
Duration: this database's default for those operations
('heimdall db expiry show --database pg-orders-orders' shows the defaults and the ceilings.)
Status: pending approval
An approver decides it with 'heimdall db access approve <grant-id>'.
heimdall db access approve 05512517-3276-4918-af87-79ef234fbd9d
✓ Access request 05512517-3276-4918-af87-79ef234fbd9d approved
Status: active
The requester can connect now with 'heimdall db connect <database>'.
THE PLATFORM
The whole cycle, under one set of rules.
From the map of what you run to the response to an incident: seven modules under the same access control, and every access on record.
-
01
CATALOG
The map every module uses as its address.
Domain, System, Component and
environment. Everything else builds on it: releases, incidents, secrets and network services point to the same Component, instead of separate records nobody reconciles. -
02
INFRASTRUCTURE MANAGER
Infrastructure requested from the catalog, applied inside your network.
Heimdall plans and applies Terraform in your infrastructure, and keeps the state in your account's bucket. On AWS, GCP and Azure, the credential comes from OIDC federation by default and is never stored. When the
resource schemarequires approval, someone else approves the exact version they saw. Works with AWS, GCP, Azure, Kubernetes, Helm and Cloudflare. -
03
SECRET MANAGER
A secret's value only exists in your Agent.
The API refuses to receive the value; it governs the name, the version, who may read it and who did. The Agent stores the value under a key you hold, and only serves a read once it has recorded it. When someone leaves the company, every
secretthey read is markedat_risk.$ heimdall secret access-log db-passwordACCESSED_AT ACCESSOR ENVIRONMENT VERSION SERVED_BY FROM READS 2026-10-10T06:18:58Z agent site-agent prod 3 site-agent 127.0.0.1 1 2026-10-10T06:18:45Z [email protected] prod 2 site-agent 127.0.0.1 1 2026-10-10T06:18:45Z [email protected] prod 3 site-agent 127.0.0.1 1
-
04
DATABASE MANAGER
Production access: requested, approved by someone else, set to expire.
Every access has a named approver and an expiry, and nobody approves their own request. Commands and
migrations respect the database's time window. The password is created in the Agent and stays there.maskingby source column: a tax ID comes back as[CPF]even when the query renames it, reads it in a subquery or goes through a view.guardrailsrefuse aDELETEwithoutWHEREon the spot; for it to run, someone else has to approve it, and the approval covers a single execution.NOTICE: Heimdall authenticated this connection as PostgreSQL role "hd_pg_orders_orders_7cyjmwi7_hdm" under access grant 05512517-3276-4918-af87-79ef234fbd9d; any credentials you supplied were not used and were not sent to the database. psql (18.6, server 17.11) Type "help" for help. => select cpf as documento, upper(email) as e, name from customers limit 1; documento | e | name -----------+---------+----------- [CPF] | [EMAIL] | Ana Souza (1 row) => UPDATE customers SET name = 'cliente de teste'; ERROR: HEIMDALL GUARDRAIL: UPDATE without WHERE clause is blocked by guardrail "DELETE and UPDATE need a WHERE" [require-where]. To run it, get it approved first, then run it again: heimdall db command submit 'b4bc0108-1814-47df-a9a9-7e591423dae6' --reason '<why this must run>' --sql 'UPDATE customers SET name = '\''cliente de teste'\'';'
Real output, through the Heimdall proxy. -
05
INTERNAL APP ACCESS
Internal apps in the browser, without a VPN.
The edge runs in your infrastructure, and that is where TLS terminates. Each access is granted to one person for one service, with an expiry and a reason, and is recorded before the first byte goes through.
-
06
RELEASE MANAGER
You approve the exact change that goes to production.
Heimdall commits the new version to your manifests repository, and your GitOps tooling delivers it. Approvers see the diff, the gate is asked again right before the commit, and a rollback returns to the previous known version, with no one picking the target by hand.
-
07
INCIDENT MANAGER
An incident only closes once its postmortem is approved.
Every rollback opens an incident automatically, dated from when the bad version landed. A database
break-glassis tied to the open incident, but the incident never grants access: it records why the access happened.
THE RULE IS YOURS
You set the rule. The platform enforces it.
Each organization sets, database by database, how long access lasts, who approves and when a command may run. From then on, the rule doesn't depend on anyone remembering it. Some limits, though, no configuration can exceed: no access lasts more than 30 days, and no break-glass more than 4 hours.
heimdall db expiry set --database pg-orders-orders --class write --default 2h --max 8h
✓ write access to 'orders' now defaults to 2h and is capped at 8h
Grants already open keep the window they were approved with — withdraw one with
'heimdall db access revoke <grant-id>', which is attributable and audited.
heimdall db expiry set --database pg-orders-orders --class read --default 8h --max 7d
✓ read access to 'orders' now defaults to 8h and is capped at 7d
Grants already open keep the window they were approved with — withdraw one with
'heimdall db access revoke <grant-id>', which is attributable and audited.
heimdall db expiry show --database pg-orders-orders
CLASS DEFAULT CEILING SOURCE
read 8h 7d configured on this database
write 2h 8h configured on this database
A request mixing SELECT with INSERT, UPDATE or DELETE takes the write ceiling.
No access may ever exceed 30d, whatever is configured here.
Change one with 'heimdall db expiry set --database pg-orders-orders --class write --default 8h --max 72h'.
heimdall db window add --database pg-orders-orders --kind command --timezone America/Sao_Paulo --days weekdays --from 09:00 --to 18:00
✓ command may be released on 'orders' during weekdays 09:00-18:00 America/Sao_Paulo
Window ID: 9ab22742-4c85-4537-8f47-b3d826d40588
Run 'heimdall db window list --database pg-orders-orders' to see whether it is open now.
heimdall db command approve 03fd8c04-9800-4369-a93a-6a1f1431316a
Error: OUTSIDE_EXECUTION_WINDOW: outside the permitted execution window for this database: a command may only be released during weekdays 09:00-18:00 America/Sao_Paulo. The next window opens Mon 2026-10-12 09:00 -03 (in 53h42m)
INSTEAD OF
One permission model. One place to look.
Today every point of the cycle has its own tool, its own invoice and its own permission model. Heimdall puts all of it under the same policy.
| INSTEAD OF | WHAT HEIMDALL OFFERS |
|---|---|
| A service catalog | Domain, System, Component and environment, used as the address by releases, incidents, access and infrastructure. Circular dependencies refused. What goes down together, in one command |
| Infrastructure provisioning | Resources requested from your team's resource schema, approved by someone else. Terraform running in the Agent, in your network. State in your cloud account's bucket. OIDC federation instead of keys |
| A secrets manager | Values in your Agent, under your key. A trail of who read each version. heimdall run and the External Secrets Operator. A leaked version deactivated on the spot. at_risk when someone leaves. Rotation of the database service user password |
| Database access tooling | Named approvers and expiry set by your organization, and a password nobody sees. Time windows for commands and migrations. Sensitive data masked by source column. guardrails that refuse before the database, and an approved command that runs once. A capped, reviewed break-glass. migrations approved and run inside your network |
| Internal app access | Web apps and APIs in the browser, without a VPN. TCP services by their real names, from the terminal. A grant per person and per service, with an expiry and a reason. Every flow recorded before the first byte |
| Deploy approval | The exact diff, approved by a named person and refused if the file changed. Window and freeze checked the instant before the commit. One-step rollback, to a version already approved |
| Incident management | A fixed lifecycle that only closes with an approved postmortem. Incidents opened by rollback. break-glass tied to the incident. A notice when an incident stalls |
Talk to the people who build Heimdall.
Tell us how your engineers store secrets and reach the database today. We'll answer with what Heimdall would put under rules first, and how the deployment would get there.
Opens a WhatsApp chat. Prefer email? [email protected]
YOUR DATA
It runs entirely in your infrastructure. Your data stays with you.
API, Agent, edge and database stay with you, with the encryption key under your control. Your secret values, your database passwords and query results, your infrastructure state, your traffic and your audit trail stay inside your network.
DEPLOYMENT
Yops deploys it with your team.
Deployment is part of the product. It happens inside your infrastructure, alongside your engineers, and ends with your team running Heimdall.
- Agree on the first phase with you: what goes under rules first, and whatever needs building for it, on an agreed timeline.
- Install the API, the Agent and the edge in your infrastructure, with your team.
- Put your first secrets and databases under rules, with your real data.
- Train the people who operate and the people who approve.
Leaving doesn't depend on us: you can export the organization at any time, and the Terraform state already lives in your bucket.
Talk to the people who build Heimdall.
Tell us how your engineers store secrets and reach the database today. We'll answer with what Heimdall would put under rules first, and how the deployment would get there.
Opens a WhatsApp chat. Prefer email? [email protected]