Fridr AS
Get software into restricted networks, and know exactly what you're running once it's there.
Two tools that work alone and fit together: Bifröst brings artifacts across the boundary, Sindri decides which of them are approved for which environment.
Bifröst
Pre-1.0 · early accessBring approved software across the air gap.
Fetches container images, packages, and models from the open internet and delivers them into air-gapped and restricted networks through one auditable crossing.
Sindri
v1 · open sourceThe artifact repository that knows what's approved where.
One Go binary for OCI and PyPI, with hosted, proxy, and virtual repositories. Artifacts carry identity, evidence, and per-environment approval instead of being copied around.
Bifröst
Pre-1.0 · early accessCommercialBring approved software across the air gap.
Move approved software across the air gap, without opening a hole back out.
Bifröst fetches container images, packages, and models from the open internet and delivers them into restricted and air-gapped networks through a single, auditable bridge.
The crossing mechanism is yours to choose. See the options.
How a request crosses the boundary
- 1
Request
A request or schedule comes into the Orchestrator API on the high side, and is placed on the job queue.
- 2
Cross to the low side
The bridge relays the job request across the boundary to a Minion worker with internet access.
- 3
Fetch
The Minion fetches the requested artifact from its source registry — Docker, Maven, PyPI, npm, Helm, Hugging Face, a website, or a plain file.
- 4
Cross back
The bridge relays the fetched artifact back to the high side, where it's recorded and made available. Nothing else crosses.
On-demand or scheduled
Trigger a one-off pull, or set a recurring schedule — a nightly base-image sync, a weekly package mirror — and Bifröst keeps it current without anyone re-triggering it.
Driven by API, not a human
The same REST surface that runs the request above —
/downloadsand/schedules— is what your CI pipelines call directly. No UI to script around.Pick your own crossing
This is the reference setup: one live bridge. Swap in a diode-paired bridge, a one-way diode relay, or fully manual carry to match your compliance posture — see architecture options.
Built for restricted networks
One set of Minion workers per ecosystem, each speaking that registry's protocol directly rather than shelling out to its CLI.
- Docker
- Maven
- Python
- npm
- Helm
- Files
- Websites
- Hugging Face
Every request has an owner
Bifröst sits behind Keycloak, so every download request and every scheduled job is tied to an OAuth2/OIDC identity — not just a source IP. Job history is kept, so you can answer "what came in, and who asked for it" after the fact.
The bridge is the only door
Minion workers never talk to the high side directly. The bridge is the single, policy-controlled crossing point — the one thing you have to trust, instead of every worker on the low side.
Sindri
v1 · open sourceApache 2.0The artifact repository that knows what's approved where.
Not “does this image exist?” but “is exactly this artifact approved for this environment?”
A lightweight, multi-protocol artifact repository in a single Go binary. It starts from one Docker Compose file and grows to a Kubernetes install without switching products. It sits between heavyweight Nexus/Artifactory and a patchwork of Harbor, Verdaccio, and a homegrown PyPI server.
payments-api:1.4.2 ├─ identity sha256:abc123… ├─ owner team:payments ├─ source git abc123 ├─ evidence sbom · signature └─ lifecycle dev ✓ staging ✓ prod ✗
Identity, not file copies
An artifact isn't copied between repositories as it matures. It keeps one identity (digest, owner, provenance, evidence) and its trust status changes per environment.
One core, many protocols
Protocol adapters sit on one content-addressed store, so lifecycle and policy exist once. Hosted, proxy, and virtual repositories are kept separate, and that separation blocks dependency confusion.
Config as code
One short YAML file declares repositories, stages, and access, reconciled on startup with no apply step. Teams that outgrow it use enveloped manifests and org policy from CI.
Where it is
- OCI / DockerToday
- Helm (OCI)Today
- PyPIToday
- SBOM & signaturesToday
- npmNext
- Scan to evidenceLater
- MavenLater
- K8s admissionLater
Better together
PlannedEach tool stands on its own. In an air-gapped or restricted Sindri install, Bifröst becomes its native downloader: the open-source repository gets a way in, and the bridge gets a place to land.
- 1
A pull misses
A developer or CI job asks Sindri for an image or package the restricted network doesn't have yet.
- 2
Bifröst fetches it
The proxy repository's upstream is Bifröst, not the internet. The miss becomes a Bifröst request, and the artifact crosses the boundary through your chosen mechanism.
- 3
It lands with a history
The artifact arrives in Sindri as a proxied artifact with its provenance attached, and from there goes through the same lifecycle gates as everything else.