consulx

Crates.ioconsulx
lib.rsconsulx
version0.1.1
created_at2025-12-12 11:28:41.994322+00
updated_at2025-12-13 04:48:28.85335+00
descriptionA pure-HTTP Consul KV CLI + REPL built from scratch
homepagehttps://github.com/srotas-space/consulx
repositoryhttps://github.com/srotas-space/consulx
max_upload_size
id1981390
size81,873
Srotas Space (xsmmaurya)

documentation

https://docs.rs/consulx

README

consulx โ€” Consul KV CLI + Rust Client Library

Crates.io Documentation License Downloads Recent Downloads

SnmFDBCLI

consulx is a modern Rust toolkit for working with Consul KV, providing:

  • ๐Ÿ”ง Interactive REPL (like redis-cli, but for Consul)
  • ๐Ÿ—‚๏ธ Tree view, watch, prefix watch, edit, get-json, put-json
  • โš™๏ธ Lightweight HTTP-only Consul client (no SDKs)
  • ๐ŸŒ Integrations for Actix and Axum
  • ๐Ÿ” First-class support for dynamic config & feature flags
  • ๐Ÿงฉ Typed JSON prefix loading (kv_list_json)

Everything is implemented from scratch using reqwest.


โœจ Features

๐Ÿงต REPL Interface

  • Auto-completion (reedline)
  • Commands: get, put, del, list, tree, get-json, put-json, edit, watch, watch-prefix

๐Ÿ—„๏ธ JSON-aware KV APIs

  • kv_get_json โ€” load typed JSON config
  • kv_put_json โ€” write typed JSON
  • kv_list_json โ€” load multiple JSON configs under a prefix

๐Ÿ” Watches

  • Watch individual keys
  • Watch entire prefixes
  • Efficient blocking queries (index + wait)

๐ŸŒ Actix & Axum Integrations

Drop ConsulXClient into your application state.

โšก Pure HTTP client

No consulrs. No SDK. No hidden magic.


๐Ÿš€ Installation

[dependencies]
consulx = "0.1.0"
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", features = ["rustls-tls", "json"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"

๐Ÿ”ง CLI Usage

cargo install consulx
consulx

Specify endpoint:

CONSUL_HTTP_ADDR=http://127.0.0.1:8500 consulx

๐Ÿ–ฅ๏ธ REPL Commands

Command Usage Description
get get <key> Fetch raw value stored at a key
put put <key> <value> Store a raw string value
del del <key> Delete a key
list list <prefix> List all keys under a prefix
tree tree <prefix> Show keys as an ASCII tree
get-json get-json <key> Fetch and pretty-print JSON value
put-json put-json <key> <json> Validate & store JSON value
edit edit <key> Edit value in $EDITOR
watch watch <key> Watch a single key for changes
watch-prefix watch-prefix <prefix> Watch all keys under a prefix
help help Show available commands
exit exit / quit Exit the REPL

๐Ÿงฉ JSON Prefix Loading (kv_list_json)

#[derive(Deserialize)]
struct FeatureFlag {
    enabled: bool,
}

let flags = consul.kv_list_json::<FeatureFlag>("app/features/").await?;

for (key, flag) in flags {
    println!("{key} => {:?}", flag);
}

๐Ÿ“ฆ Library API Summary

// Client creation
ConsulXClient::new(url)          // Create client with explicit Consul URL
ConsulXClient::from_env()        // Uses CONSUL_HTTP_ADDR (default: http://127.0.0.1:8500)

// Raw KV operations
kv_get_raw(key)                  // -> Option<String>
kv_put(key, value)               // Store raw value
kv_delete(key)                   // Delete a key
kv_list(prefix)                  // List keys under a prefix

// JSON helpers (typed)
kv_get_json<T>(key)              // -> Option<T>
kv_put_json<T>(key, &T)          // Serialize & store JSON
kv_list_json<T>(prefix)          // Load JSON objects under prefix

// Watches (blocking queries)
kv_watch(key)                    // Watch a single key
kv_watch_prefix(prefix)          // Watch all keys under prefix

Made with โค๏ธ by the [Srotas Space] (https://srotas.space/open-source)


๐Ÿ‘ฅ Contributors

GitHub stars


๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Commit count: 0

cargo fmt