Private container registry.
Pay for storage, not for seats.

An OCI registry with organization namespaces and robot accounts for CI. No per-pull, per-seat or per-repository charges.

OCI distribution spec. Works with docker, podman, nerdctl, buildkit, crane, skopeo and cosign. Read the FAQ

acme/api
$ docker push registry.wirestack.net/acme/api:1.4.2
The push refers to repository [registry.wirestack.net/acme/api]
7a3c0e1b5f2d: Layer already exists
e9d1a84c3b70: Pushed
1.4.2: digest: sha256:9f2c6b8d1e0a… size: 1572

$ docker pull registry.wirestack.net/acme/api:1.4.2
HTTP requests made by the pull
requeststatusserved by
GET /token?scope=repository:acme/api:pull200registry
GET /v2/acme/api/manifests/1.4.2200registry
GET /v2/acme/api/blobs/sha256:7a3c…307registry
GET blobs.wirestack.net/sha256/7a3c…?expires=…200storage, 28.4 MB
GET /v2/acme/api/blobs/sha256:e9d1…307registry
GET blobs.wirestack.net/sha256/e9d1…?expires=…200storage, 3.1 MB

Private by default

Every repository is private. Members get a role, CI gets a robot account, and nobody outside your organization can see that a layer exists.

Robot accounts reach the organization's repositories, anonymous callers are turned away. acme acme/api acme/worker acme/www acme+ci anonymous 401

Built for CI

One login in your pipeline, then push from GitHub Actions, GitLab, Jenkins or a laptop. Works with docker, podman, buildkit and every other OCI client.

A build pushes a tagged image and every host deploys it. build push deploy api:1.4.2

Priced by storage, nothing else

Unlimited pulls, unlimited members, unlimited repositories on paid plans. Base layers shared between your images are stored and counted once.

Base layers shared by several images are stored and counted once. node:24-slim 3 × 1 ×

Pricing

Every plan includes unlimited pulls, unlimited members, robot accounts for CI and an audit log. Each repository is stored in the US or the EU, your choice, at the same price.

Free

$0

10 GB storage

  • 1 repository
  • Unlimited pulls and members
  • Robot accounts and audit log
  • US or EU data residency
Start free

Team

$20per month plus tax

400 GB storage

  • Unlimited repositories
  • Unlimited pulls and members
  • Robot accounts and audit log
  • US or EU data residency
Choose Team

Prices are in US dollars; VAT or sales tax is added at checkout where it applies. Storage is counted on distinct layers after dedup, so shared base images count once. Pick the region per repository; data never leaves it.

Frequently asked questions

What is wirestack?

wirestack is a hosted private container registry for Docker and OCI images. Each organization gets its own namespace at registry.wirestack.net/<organization>, with members, robot accounts for CI and an audit log, and pays only for the storage it keeps.

Which clients and image formats work?

Any client of the OCI distribution spec: docker, podman, nerdctl, buildkit, crane, skopeo and cosign. Multi-architecture images, Helm charts pushed as OCI artifacts, and signatures and attestations stored through the OCI referrers API all work.

How is storage counted?

Storage is the distinct layers and manifests your organization keeps. A layer used by several images or repositories in the same region is stored and counted once, so a shared base image is paid for once. Pulls, members and data transfer are never counted.

Are pulls metered or charged?

No. Pulls are not metered or billed on any plan, including Free, and there is no charge for data transfer.

What happens when I reach my plan's storage limit?

Pushes that would take your organization over the limit are refused with an error, and pulls keep working. Nothing is billed for overage: delete tags you no longer need, or move to a larger plan. Layers that no tag uses any more are cleaned up within about a day.

How do I push from GitHub Actions or another CI?

Create a robot account in the console. It gets a username such as acme+ci, a secret and a role: writer to push, reader to pull only. Store the secret in your CI's secrets and log in once per job:

printf '%s' "$WIRESTACK_SECRET" |
  docker login registry.wirestack.net --username acme+ci --password-stdin

Where are my images stored?

In the US or the EU. You choose the region for each repository, at the same price, and its layers are stored only in that region.

Can I make a repository public?

No. wirestack hosts private images only. Every pull needs the credentials of a member, a personal access token or a robot account of your organization.

Is there a free plan?

Yes. Each account can have one organization on the Free plan, with 10 GB of storage, one repository, and unlimited pulls and members. No payment details are needed.

How does billing work?

Paid plans are monthly subscriptions in US dollars, sold through Creem as merchant of record, which adds VAT or sales tax where it applies. Owners change or cancel the plan in the console; a cancellation takes effect at the end of the paid period. See the Refund Policy.

Start free. Upgrade when you outgrow 10 GB.

$ docker login registry.wirestack.net
$ docker tag api:latest registry.wirestack.net/acme/api:1.4.2
$ docker push registry.wirestack.net/acme/api:1.4.2