Skip to content

Using the Registry

This guide covers day-to-day registry usage from the CLI and web interface.

Registries are defined in your project’s .duumbi/config.toml:

[registries]
duumbi = "https://registry.duumbi.dev"
company = "https://registry.acme.com"
[workspace]
default-registry = "duumbi"

The default-registry is used when a dependency has no explicit registry field. Scoped packages (@scope/name) automatically route to the registry named scope.

You can also manage registries from the CLI:

Terminal window
duumbi registry add company https://registry.acme.com
duumbi registry list
Terminal window
duumbi search graph-traverse

This searches all configured registries and prints matching modules with their latest version and description.

Visit your registry in a browser (e.g., registry.duumbi.dev) and use the search bar. You can also press / to focus the search field.

Add a dependency to your project:

Terminal window
duumbi deps add @duumbi/stdlib-math

Or specify a version range:

Terminal window
duumbi deps add @duumbi/stdlib-math@^1.2

To install all dependencies defined in config.toml:

Terminal window
duumbi deps install

This resolves versions according to SemVer, downloads .tar.gz archives to .duumbi/cache/, and writes a deps.lock lockfile.

Using a dependency from a specific registry

Section titled “Using a dependency from a specific registry”

When you have multiple registries, specify which one a dependency comes from:

[dependencies]
"@duumbi/stdlib-math" = "^1.0"
"@company/auth" = { version = "^3.0", registry = "company" }

Your module directory must contain a manifest.toml with at least name, version, and description:

[module]
name = "@yourscope/my-module"
version = "1.0.0"
description = "A short description of what this module does."

If you haven’t already, log in to the registry:

Terminal window
duumbi registry login duumbi

See Authentication for details on login flows.

Terminal window
duumbi publish

This validates the graph, packages it as a .tar.gz archive with a SHA-256 integrity hash, and uploads it to the configured registry.

After publishing, you can verify your module is available:

Terminal window
duumbi search my-module

Or visit the module page on the web UI.

If you published a broken version, you can yank it. Yanked versions are still downloadable (existing lockfiles continue to work) but won’t be selected for new installs:

Terminal window
duumbi yank @yourscope/my-module@1.0.0

When resolving a module, DUUMBI looks in this order:

  1. Workspace.duumbi/graph/ (local project files)
  2. Vendor.duumbi/vendor/ (pinned, audited copies)
  3. Cache.duumbi/cache/ (downloaded from registry)
  4. Not found — error E011

Copy dependencies into your project for reproducible, offline builds:

Terminal window
duumbi deps vendor

This copies all cached modules to .duumbi/vendor/. You can commit these to version control.

To vendor selectively:

[vendor]
strategy = "selective"
include = ["@company/*"]