Cargo (Rust) Package Registry Beta Program: Feedback & Graduation Criteria
<details>
<summary>
Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards.
</summary>
- [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=TBD)
</details>
## Overview
We are promoting the Cargo (Rust) Package Registry from **Experiment** to **Beta** in an upcoming GitLab milestone. This issue serves as the central hub for the Beta program: collecting customer feedback, tracking known limitations, and defining the signal we need before graduating to **GA**.
For the full history and context, see [#33060 - Cargo (Rust) Package Manager MVC](https://gitlab.com/gitlab-org/gitlab/-/issues/33060).
## What is the Cargo Package Registry?
The GitLab Cargo Package Registry allows you to publish and manage Rust crates directly within your GitLab projects. Key capabilities include:
- **Publish crates** via `cargo publish` using personal access tokens, deploy tokens, or CI/CD job tokens
- **Download crates** via `cargo install` or as dependencies in `Cargo.toml`
- **CI/CD integration** with native `CI_JOB_TOKEN` support for automated publishing
- **Sparse index support** for efficient dependency resolution (RFC 2789)
- **Metadata extraction** for published crates (version, dependencies, features, etc.)
- **Crate size limit** of up to 3 GB
## How to sign up for the Beta
No formal sign-up is required. To start using the Cargo Package Registry Beta:
1. **Ensure the feature is enabled**: The Cargo registry is behind the `cargo_packages` feature flag. On GitLab.com, this will be enabled for Beta participants. For Self-Managed instances, an administrator must enable the flag.
2. **Authenticate** using one of the supported methods:
- Personal access token (scope: `api`)
- Deploy token (scope: `read_package_registry` and/or `write_package_registry`)
- CI/CD job token
3. **Configure your credentials** in `~/.cargo/config.toml`:
```toml
[registries.gitlab]
index = "sparse+https://gitlab.example.com/api/v4/projects/<project_id>/packages/cargo/metadata/"
token = "Bearer <token>"
```
4. **Publish a crate**:
```shell
cargo publish --registry gitlab
```
5. **Add a dependency** from the registry in `Cargo.toml`:
```toml
[dependencies]
my_crate = { version = "0.1.0", registry = "gitlab" }
```
## How to provide feedback
We want to hear from you! Please comment directly on this issue with:
1. **Your use case**: What are you using the Cargo registry for? (internal crates, CI/CD publishing, shared libraries, mirroring, etc.)
2. **Environment details**: GitLab.com or Self-Managed? Approximate number of crates and total size?
3. **What's working well**: Features or workflows that meet your expectations
4. **Issues or bugs**: Anything broken or behaving unexpectedly (please also file a separate issue with the `~"Category:Package Registry"` label)
5. **Performance observations**: Upload/download speeds, latency, any timeouts or failures at scale
6. **Missing functionality**: Features you need before you can adopt this in production
7. **Scale testing results**: If you've tested with a large number of crates or large crate sizes, share your findings
For bugs or feature requests, please create a dedicated issue and link it here.
## Known limitations (Beta)
The following are known limitations during the Beta period:
- [ ] **Feature flag gated**: The feature is behind the `cargo_packages` feature flag and must be explicitly enabled
- [ ] **Sparse index only**: The registry uses the sparse index protocol (RFC 2789); the legacy git-based index is not supported
- [ ] **No `cargo yank` support**: Yanking crate versions is not yet supported
- [ ] **No dependency resolution validation**: The registry does not validate that declared dependencies exist or are resolvable
- [ ] **Duplicate crate names/versions**: Pushing a crate with the same name and version as an existing one may create a duplicate rather than rejecting or replacing it
## Graduation criteria: Beta to GA
We will consider the Cargo Package Registry ready for GA when the following criteria are met:
### Functionality
- [ ] All blocking issues related to the Cargo MVC are resolved
- [ ] `cargo publish` and `cargo install` / dependency resolution are fully supported
- [ ] Feature flag is removed and the feature is enabled by default
- [ ] Documentation is complete and reflects the production-ready state
- [ ] `cargo yank` support is implemented or a clear workaround is documented
### Performance & Scale
- [ ] Verified performance at scale: publishing and downloading crates performs within acceptable latency thresholds under load
- [ ] No known P1/P2 performance-related bugs
- [ ] Tested with repositories containing 100+ crates of varying sizes
### Quality & Reliability
- [ ] No open S1/S2 bugs related to the Cargo registry
- [ ] Error rates on GitLab.com are within acceptable thresholds (aligned with Package Registry SLOs)
- [ ] No data integrity issues (metadata, crate files, dependencies)
### Customer Signal
- [ ] At least **5 distinct customers/users** have provided positive feedback on this issue confirming production-readiness
- [ ] No unresolved blocking feedback from Beta participants
- [ ] Usage metrics show sustained adoption (month-over-month growth in unique users publishing/downloading crates)
## Related resources
- [#33060 - Cargo (Rust) Package Manager MVC](https://gitlab.com/gitlab-org/gitlab/-/issues/33060)
- [Cargo Registry Documentation](https://doc.rust-lang.org/stable/cargo/reference/registries.html#running-a-registry)
- [Cargo Sparse Index RFC 2789](https://rust-lang.github.io/rfcs/2789-sparse-index.html)
- [RubyGems Package Registry Beta Program](https://gitlab.com/gitlab-org/gitlab/-/issues/601973) (reference for this issue's structure)
- [Product Direction: Package Registry](https://about.gitlab.com/direction/package/)
## Timeline
| Milestone | Target |
|-----------|--------|
| Beta launch | **TBD** |
| Feedback collection period | 2-3 milestones post-Beta |
| GA decision | Based on graduation criteria above |
issue