Skip to content

[Epic] Rust client wrapper – Preview #6519

Closed
17 of 17 issues completed
Closed

Description

@yipin-chen

Description

A native, first-class Rust client for Valkey OSS built directly on glide-core. Since glide-core is itself Rust, this wrapper links to it directly — no FFI, no socket bridge — making it the thinnest/fastest GLIDE binding.

This is the epic issue to track Rust preview release. The new Rust client will be added to the valkey-glide repository instead of a separated repository.

Here is the high level effort estimations. For detailed task descriptions, please see below comments.

VAN team:

  • (1 wk) Pre-publish readiness
  • (1 wk) CI/CD
  • (1 wk) Publish and verify preview version
  • (1 wk) Add/update performance framework
  • (0.5 wk) Test framework (FMT and System)

Reference

Rust Wrapper GA #6915

Activity

  1. added
    Task 🔧Implementation work (not a bug)
    Rust ⚙️Pull requests that update rust code
    on Jul 13, 2026
  2. added this to the 2.6 milestone on Jul 13, 2026
  3. omerrubi-amzn commented on Jul 29, 2026

    @omerrubi-amzn
    Collaborator

    Deliverables for the Rust preview release. The client itself is preview-ready (async+sync, full command coverage, IAM/PubSub/OpenTelemetry, 3-layer test suite green in CI over Valkey 8.1/8.0/7.2 + Redis 7.2 × x64/arm64); remaining work is release/packaging.

    TLV team

    • Client feature-complete for preview (async+sync, unified command surface + extension traits, custom_command, batches/transactions, dynamic auth incl. AWS IAM, runtime Pub/Sub, OpenTelemetry)
    • Test suite: unit/mock + live integration (RESP2/RESP3, cluster/TLS/auth) + doctests + redis-rs parity guard — green in CI
    • Finalize crate naming. e.g.: glide-rs / glide-rust / glide-core / glide-telemetry / glide-logger / glide-core-aux (forked redis-rs)
    • Publish the internal crate chain to crates.io from the glide-core workspace, in dependency order:
      • ../logger_core → glide-logger
      • ./telemetry (telemetrylib) → glide-telemetry
      • ./redis-rs/redis (forked redis-rs) → glide-core-aux (new name)
      • glide-core → glide-core
      • wrapper repo: switch git deps → versioned dep (glide-core = "x.y")
    • Docs: README / DESIGN / DEVELOPER / CHANGELOG — pending review from team + PM; docs.rs pending publish

    VAN team

    • CI/CD: release/publish workflow — publishes the crate chain in dependency order + version tagging (cargo publish --workspace on Cargo 1.90+)
    • Package management: crates.io publishing of the chain (source in glide-core repo)
    • Performance framework: integrate into cross-language benchmark harness

    Decisions

    Open: the wrapper crate is on its own repo under valkey-io. Our recommendation is that the redis-rs fork, logger_core, and telemetrylib stay embedded in the glide-core repo (no separate repos) and are published to crates.io from that workspace. Additional crates - glide-core, redis-rs fork, logger_core, telemetry.

    Open — preview delivery: recommendation is to ship the preview from crates.io (publish chain on the preview critical path), rather than a git-installable preview.

  4. jeremyprime commented on Jul 31, 2026

    @jeremyprime
    Collaborator

    A few thoughts:

    1. The vendored redis-rs crate should use a more descriptive name, glide-core-aux does not say what it is. Preferably glide-redis, or something protocol-related like glide-resp or glide-protocol. So the full set of names would be glide-logger, glide-telemetry, glide-redis (or whatever we choose), glide-core, and glide (main wrapper/client).
    2. The internal crates should all use 0.x versions to signal they are not meant for direct consumption (README in crates.io would also specify that). The wrapper would follow the same versioning as other clients (e.g. 2.6.0).
    3. We can use dual path and version dependencies to ensure they work locally, in CI, and via crates.io (e.g. logger_core = { path = "../logger_core", version = "0.1" }).
    4. As part of the preview release we should audit the core and ensure that no internals (classes, env vars, etc) are leaked to avoid having to make breaking changes later. Internal crate methods/types like CoreClient should not be exposed. And env vars (GLIDE_NAME, GLIDE_VERSION) should have defaults so users don't have to set these themselves.

    Regarding the open decisions:

    • The wrapper should live in this repo (new rust/ dir), not a separate repo. The wrapper is tightly coupled to the other Rust crates, and most changes to the core and other crates will also require a change to the wrapper at the same time (not the case for other clients that use an FFI layer/API). Also, the Rust crates must all be published so it would be much easier to publish together in the same repo/CI.
    • Agree we should do a preview/RC release, the internal clients could just use 0.x versions and the wrapper could use a *-rc version to start, published in dependency order (glide-logger, glide-telemetry, glide-redis, glide-core, glide).
  5. jeremyprime commented on Aug 7, 2026

    @jeremyprime
    Collaborator

    VAN team (updated)

    Assumes the wrapper is in this repo (rust/ dir), crates are renamed with glide- prefix, and internal crates use 0.x versions with dual path and version dependencies (per discussion above).

    1. Pre-publish readiness

    • Fix GLIDE_VERSION/GLIDE_NAME env vars to have defaults (no .cargo/config.toml needed for users)
    • Perform an API surface audit; hide core() accessor, add #[non_exhaustive] to error type, update crate metadata/descriptions

    2. CI/CD

    • Add rust-client.yml workflow (lint, build, test matrix, cargo-deny); rename existing rust.yml → rust-core.yml
    • Create rust-client-cd.yml publish workflow (5 crates in dependency order) and crates.io team ownership/tokens

    3. Publish and verify

    • Publish the crate chain: glide-logger → glide-telemetry → glide-redis → glide-core → glide (RC version)
    • Verify that docs.rs renders, cargo add glide works in fresh project without extra config

    4. Performance framework

    • Add Rust client to benchmark framework and establish baselines

    Decisions

    • Should we add Rust client support to resp-bench or update the existing benchmark tool under benchmarks/?
  6. self-assigned this
    on Aug 24, 2026
  7. 21 remaining items

  8. pinned this issue on Sep 10, 2026
  9. yipin-chen commented on Oct 9, 2026

    @yipin-chen
    CollaboratorAuthor

    Preview release is released on Oct 6.

  10. unpinned this issue on Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Rust ⚙️Pull requests that update rust codeTask 🔧Implementation work (not a bug)

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions