A repository is the basic unit of storage in Galleon. Every repository has a name, a format, and a type.
Formats
The format defines which artifacts a repository stores and which protocol clients use to work with it.
| Format | Contents | Typical client |
|---|---|---|
| Docker (OCI) | Container images, OCI artifacts (such as Helm charts) | docker, crane, skopeo, helm |
| Maven | Java libraries and other build artifacts | mvn, gradle |
| Go | Go modules | go |
| npm | npm packages | npm, yarn, pnpm |
| PyPI | Python packages | pip, uv, twine |
| RubyGems | Ruby gems | gem, bundle |
| Cargo | Rust crates | cargo |
| raw | Arbitrary files | curl, a browser |
Repository types
Two repository types are supported: hosted and proxy.
Hosted
A hosted repository stores the artifacts you publish: build results, internal libraries, release archives. The repository write policy defines what is allowed: overwriting published versions, first publication of each version only (what is published cannot be overwritten), or a complete write ban (the repository is read-only).
Proxy
A proxy repository is a caching mirror of an external registry, such as Maven Central or Docker Hub. On the first request an artifact is downloaded from the external registry and stored; subsequent requests are served from the cache. A proxy repository is read-only; use a hosted repository for publishing. See Proxying and caching for details.
Group repositories (several repositories under a single address) are not supported yet.
Repository address
Galleon works with the standard clients of each format. The client is configured with a repository address of the form:
https://<GALLEON_HOST>/repository/<REPOSITORY>/...The exception is Docker (OCI) repositories:
container clients access them without the /repository/ prefix,
and an image address looks like <GALLEON_HOST>/<REPOSITORY>/<IMAGE>:<TAG>.
How to configure the client for each format is described in the User guide.
Components and assets
Repository content consists of components and assets:
- Component — the unit of versioning: a package version, a tagged image, a Go module of a specific version.
- Asset — an individual file belonging to a component: a package archive, a POM file, an image layer.
In raw repositories every individual file is a component of its own — its name is the full file path.
A container image follows the same model:
the component is the tagged image, and its assets are the manifest and the layers.
Layers are shared between images: a base layer of several images is stored once. Besides tagged images, a repository may hold
manifests referenced only by their checksum —
the content tree marks them as digest.
Identical content is stored only once: a file is identified by its checksum, and the same archive published to two repositories occupies space once. Space is freed once no reference to the content is left.
The web interface shows repository content as a tree of components and assets. Deleting artifacts is available there as well, subject to permissions, and for the Maven, npm, RubyGems, PyPI, and raw formats — uploading.
Starter set of repositories
On the first start with an empty database, Galleon creates a starter set of repositories: proxy mirrors of public registries (Maven Central, proxy.golang.org, the Go checksum database, Docker Hub) and hosted repositories for Maven (separate ones for releases without overwriting and for snapshot versions), Go, and container images.
The set is created only when the repository list is empty: a repository deleted from it does not reappear on restart. The proxy mirrors of public registries have anonymous read rights; they take effect once anonymous access is enabled (see Access control).
The exact contents of the set and the settings of each repository are described in Repositories of the Administration guide.