Skip to main content
Harness Artifact Registry provides support for Rust Cargo crates, allowing you to host private Rust libraries.

Overview

Cargo registry features:
  • Standard Cargo registry protocol
  • Automatic metadata extraction from Cargo.toml
  • .crate file format support
  • Version management following SemVer
  • Integration with cargo CLI

Pushing Cargo crates

Use the hc artifact push cargo command:
hc artifact push cargo <registry-name> <crate-file-path> \
  --pkg-url <pkg-url>

How it works

The CLI automatically:
  1. Validates the .crate file format
  2. Extracts metadata from the crate’s Cargo.toml
  3. Reads the crate name and version
  4. Uploads the crate to the registry

Building Cargo crates

1

Prepare your crate

Ensure your Cargo.toml has proper metadata:
Cargo.toml
[package]
name = "my-crate"
version = "0.1.0"
edition = "2021"
authors = ["Your Name <[email protected]>"]
description = "A useful crate"
license = "MIT"
2

Package the crate

Create the .crate file:
cargo package
This creates target/package/my-crate-0.1.0.crate
3

Upload to registry

Push the crate:
hc artifact push cargo my-registry ./target/package/my-crate-0.1.0.crate \
  --pkg-url https://app.harness.io/registry/pkg

Using Cargo crates

Configure Cargo to use your Harness registry:

In .cargo/config.toml

Create or edit .cargo/config.toml:
.cargo/config.toml
[registries.harness]
index = "https://<registry-url>/index"

[registry]
default = "harness"

Authentication

Configure credentials:
# Using cargo credentials
cargo login --registry harness <your-harness-token>
Or manually in ~/.cargo/credentials.toml:
[registries.harness]
token = "<your-harness-token>"

Installing crates

# Add dependency to Cargo.toml
[dependencies]
my-crate = { version = "0.1.0", registry = "harness" }

# Build your project
cargo build

Examples

# Package and push
cargo package
hc artifact push cargo my-registry ./target/package/my-crate-0.1.0.crate \
  --pkg-url https://app.harness.io/registry/pkg

Cargo.toml requirements

The Cargo.toml must contain name and version in the [package] section
Minimal configuration:
[package]
name = "my-crate"
version = "0.1.0"
edition = "2021"
Recommended fields:
[package]
name = "my-crate"
version = "0.1.0"
edition = "2021"
authors = ["Your Name <[email protected]>"]
description = "A useful Rust library"
license = "MIT OR Apache-2.0"
repository = "https://github.com/yourusername/my-crate"
keywords = ["rust", "library"]
categories = ["development-tools"]

CI/CD integration

- name: Build and publish
  run: |
    cargo package
    hc artifact push cargo my-registry ./target/package/*.crate \
      --pkg-url https://app.harness.io/registry/pkg
  env:
    HARNESS_API_KEY: ${{ secrets.HARNESS_API_KEY }}

Version requirements

Cargo uses Semantic Versioning (SemVer):
  • Major.Minor.Patch: 1.0.0
  • Pre-release: 1.0.0-alpha, 1.0.0-beta.1
  • Build metadata: 1.0.0+build.123

Troubleshooting

Ensure your .crate file is valid:
# Verify package
cargo package --list

# Check Cargo.toml
cargo metadata --no-deps
The .crate filename must match the name and version in Cargo.toml:
# ✅ Correct
my-crate-0.1.0.crate  # matches Cargo.toml name="my-crate" version="0.1.0"
Check your Cargo credentials:
# Re-login
cargo login --registry harness <your-token>

# Or check ~/.cargo/credentials.toml
cat ~/.cargo/credentials.toml

See also

Build docs developers (and LLMs) love