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