Self-hosted service
regclient/regclient avatar
regclient/regclient

regclient/regclient for OCI Registry Operations in Go

Docker and OCI Registry Client in Go and tooling using those libraries.

1,960 stars124 forksGoApache-2.0

At a glance

What is it?
regclient/regclient is a Go library and CLI suite for working with OCI conformant registries, OCI Image Layouts, and Docker-format tar files. It targets Go developers, image distribution operators, and automation users who need registry operations without a container runtime.
Who is it for?
Adopt regclient/regclient when Go-based registry operations, artifact handling, mirroring, or Lua scripting fit your workflow. Do not assume its v0 version means unstable APIs, because the project states that the library and commands are stable for external use, while minor releases may still include breaking changes.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why regclient/regclient Targets Registry Workloads

regclient/regclient addresses a specific gap between ordinary application clients and full container tooling. It provides a client interface to OCI conformant registries and to content stored in an OCI Image Layout, with a Go library plus several command line programs. That makes it relevant to developers building image distribution tools, platform engineers managing internal registries, and operators who need a scriptable way to inspect or move registry content.

The project does not require a container runtime or privileged access to the local host. That boundary matters for environments where installing a Docker daemon is undesirable, restricted, or unrelated to the task. The library can query tags, repositories, image contents, and rate limits. It also supports image copying, retagging, manifest inspection, deletion, and modification. OCI Artifacts are supported, so the same registry client can handle arbitrary data as well as container images.

The target is not limited to conventional image pulls. regsync mirrors images between registries and OCI Layouts, including multi-platform images, referrers, and digest tags. regbot runs Lua scripts through a Go implementation of the regclient API. regctl supplies direct command line access, including image comparison, file extraction, manifest generation, and formatted output. The project therefore serves several operational roles, but the common thread is registry content rather than local container execution.

The Go Library and Command-Line Architecture

Based on the repository layout, the root Go files expose the central client model, including blob, manifest, image, repository, tag, referrer, and registry scheme concerns. The README identifies regclient as the underlying library, while the cmd and related package areas hold the command implementations and supporting code. regctl, regsync, and regbot are described as commands built around that client.

The documented data flow is registry-oriented. A caller identifies registry content through a repository and tag or digest, queries manifests or metadata, and can copy selected content between registry locations. Image copying is described as digest preserving and efficient, with layers pulled only when required. Multi-platform images can be handled as complete images or reduced to selected platforms through regctl and regsync. The registry warning header support is another protocol-level feature: clients can receive warnings from the server and surface them rather than treating every registry response as an unqualified success.

The project also treats OCI Image Layout as a local equivalent of a repository. Import and export can place content into an OCI Layout or a Docker-formatted tar file. This is useful for air-gapped workflows, but it also means users need to understand content addressing and manifest relationships rather than only a local image tag. API-specific behavior should be checked against the linked Go reference.

regctl, regsync, and regbot Define Different Adoption Paths

regctl is the most direct entry point for a user who wants to manipulate images or artifacts from a terminal. Beyond the shared library features, it can build multi-platform manifests from separately built images, repackage an image with selected platforms, push and pull arbitrary OCI artifacts, list related content, extract files from layers, compare manifests and configs, and format output with Go templates. This makes it suitable for interactive inspection and for scripts that do not need a full Go integration.

regsync has a narrower purpose with more policy. It uses YAML configuration and can run on a schedule, perform a one-time synchronization, or report stale images. Sources may be repositories, single images, or entire registries, although the README does not recommend mirroring an entire registry. It can filter repositories and tags, mirror several images concurrently, copy one platform from a multi-platform image, back up an existing image before overwriting a tag, and postpone a mirror step when Docker Hub rate-limit capacity falls below a configured threshold.

regbot is the automation tool for decision logic. It uses YAML configuration and executes Lua scripts directly in Go. The built-in functions cover repository and tag lists, manifest head or get operations, image config, rate-limit queries and waiting, image copying, manifest deletion, and tag deletion. A dry-run mode is available. The difference is therefore architectural: regsync is configuration-driven mirroring, while regbot is script-driven control over registry operations.

Installation and First Use Start with regclient Documentation

The README directs users to the project's installation instructions and usage documentation. The README does not give a complete installation command. The relevant starting points are https://regclient.org/install/ for obtaining or building the CLI binaries and https://regclient.org/usage/ for general operation.

For a first real use, choose the command that matches the job rather than installing every tool by assumption. Use regctl when inspecting or copying registry content interactively, regsync when a repeatable mirror policy is required, and regbot when conditional actions need to be expressed as a Lua script. The project documentation links to usage instructions and a CLI reference for each command, including regctl, regsync, and regbot.

A useful first verification is to use a familiar registry and repository, query the available tags, inspect the selected manifest, and then choose a non-destructive operation such as copying or repackaging according to your permissions. The README confirms that tag, repository, manifest, image, and rate-limit queries exist. That syntax should come from the linked CLI reference rather than from assumptions about Docker commands.

Limitations and Operational Boundaries of regclient

The most important limitation is version semantics. The project says it uses v0 numbers because of Go backwards compatibility requirements for a v1 release. It also says that the library and commands are stable for external use, but minor version updates may contain breaking changes, despite attempts to deprecate older APIs and commands with warnings. This is not a promise that upgrades are costless.

Registry permissions are another boundary. Deleting tags, manifests, and blobs is documented, as are mutation operations that can change annotations, labels, layers, timestamps, media types, ports, volumes, and digest algorithms. Those operations require suitable registry authorization and can change content identities or overwrite existing references. The README does not claim that all registries support every mutation or artifact operation, so server capabilities and policy still matter.

regsync also warns that using an entire registry as a source is not recommended. Mirroring also introduces normal operational concerns around rate limits, concurrency, backups, and source selection. The documentation states that automatic retries and fallback to chunked blob pushes can handle network issues, but it does not guarantee that every failed transfer will be transparent. OCI Layout use is attractive for disconnected environments, yet the resulting local content still has to be kept consistent with manifests, layers, and tags.

Maintenance, Compatibility, and Upgrade Cost

The repository is not archived, and the last push was on 2026-10-04. The recent release history includes v0.11.6 on 2026-09-02, following v0.11.6-rc2 and v0.11.6-rc1. Those facts indicate recent project activity, but the README's own compatibility statement remains the relevant guidance for adoption: the public library and commands are considered stable for external use even though minor releases can contain breaking changes.

The project is licensed under Apache-2.0, as shown in the README and LICENSE entry. For organizations using the Go package, the main upgrade cost is API compatibility, especially if an application depends on less common features such as referrers, digest tags, OCI Artifacts, image mutation, or registry deletion. Deprecation warnings are intended to reduce migration friction, but the README does not publish a fixed migration schedule.

The repository also contains workflow references for Go builds, Docker builds, dependency checks, and vulnerability scans. Those files indicate project-level automation, not proof that every deployment environment will pass its checks. Users embedding the library should pin the Go module version they test, review minor release notes for breaking changes, and validate the behavior of the specific registry and media types they use.

regsync Versus Container Registry Automation Scripts

A real alternative is a registry-oriented automation script written against a different client library or a general-purpose HTTP API. Such an approach can offer more direct control over protocol requests, authentication, or application-specific policy, but it also requires the script author to understand registry endpoints and content semantics. regclient/regclient packages much of that model in a Go client and adds purpose-built commands for copying, mirroring, and scripting.

The practical difference is the division of labor. A hand-written script can be minimal if it only calls one endpoint, while regclient provides established abstractions for manifests, blobs, referrers, multi-platform images, OCI Layouts, and Docker credentials. Conversely, regsync and regbot impose their own configuration and execution models: regsync is centered on YAML mirroring rules, and regbot centers on Lua scripts over the regclient API. If a workflow needs custom protocol behavior that neither command exposes, the underlying Go library or another API client may be the better starting point.

regclient does not replace a container runtime for workloads that actually need to build or run containers. Its documented scope is registry access, content movement, inspection, artifacts, mirroring, and scripting. That narrower boundary is a feature for registry automation, but it means it is the wrong tool for a task whose primary requirement is local image building or container execution.

Editorial conclusion

Adopt regclient/regclient when Go-based registry operations, artifact handling, mirroring, or Lua scripting fit your workflow. Do not assume its v0 version means unstable APIs, because the project states that the library and commands are stable for external use, while minor releases may still include breaking changes. Verify the exact command documentation, registry permissions, image configuration, and Go version requirements before integrating it into production automation.

Frequently asked questions

What is regclient/regclient used for?

regclient/regclient is used to inspect, copy, modify, and delete content in OCI conformant registries and OCI Image Layouts. It includes a Go library and commands for registry automation, mirroring, and Lua scripting.

Does regclient/regclient require Docker or privileged host access?

No. The README states that regclient runs without a container runtime and without privileged access to the local host. It can automatically import logins from the Docker CLI and certificates from the Docker engine when those sources are available.

When should I use regsync instead of regbot?

Use regsync for configuration-driven image mirroring, including schedules, filters, concurrent copies, backups, and rate-limit-aware behavior. Use regbot when you need conditional registry actions expressed in Lua using the regclient API.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. regclient/regclient on GitHub
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/regclient-regclient.svg)](https://hysenlabs.com/projects/regclient-regclient)

Was this useful?