cinchcli-core 0.1.2

Shared client-side primitives for Cinch (cinchcli.com): generated wire DTOs, REST/WebSocket clients, AES-256-GCM + X25519 crypto, credential storage, local SQLite store, and sync helpers.
Documentation

cinchcli-core

Shared client-side primitives for Cinch — the encrypted clipboard sync service. Used by the cinch CLI and the desktop app; published from this repo so external clients can talk to a Cinch relay without re-implementing the wire format, auth flow, or crypto.

What's inside

  • client_core::proto::cinch::v1::* — generated message types from proto/cinch/v1/*.proto (the same .proto schema the Go relay serves). Wire-compatible JSON; omitempty semantics preserved.
  • client_core::rest, client_core::http — REST DTOs and a typed HTTP client (rustls + reqwest, 3-attempt exponential backoff).
  • client_core::ws — WebSocket subscriber for the relay's /v1/stream endpoint, with reconnect.
  • client_core::crypto, client_core::key_exchange — AES-256-GCM, X25519 ECDH, HKDF-SHA256. Used for end-to-end encrypted clip payloads and cross-device key transfer.
  • client_core::credstore, client_core::auth, client_core::auth_session — Keychain-first credential storage with plaintext fallback, plus the device-code login flow.
  • client_core::config — multi-relay-aware ~/.cinch/config.json reader/writer.
  • client_core::store — local SQLite store (rusqlite + bundled sqlite), shared between CLI and desktop processes via filesystem locks.
  • client_core::syncLocalPusher for encrypt + push + write-through.

Usage

[dependencies]
client-core = { package = "cinchcli-core", version = "0.1" }

The crate name on crates.io is cinchcli-core (the unqualified client-core was already taken). The package = alias keeps imports spelled client_core::* so call sites are independent of the distribution name.

use client_core::config::ConfigStore;
use client_core::http::RestClient;

let config = ConfigStore::load()?;
let client = RestClient::new(&config.active_relay()?, /* token */ None)?;

Features

  • specta — derive specta::Type on the wire Device DTO for use with tauri-specta. CLI builds leave this off.

Wire format

proto/cinch/v1/*.proto is the single source of truth for every cross-language DTO. The Go relay (in a separate repo) serves the same schema. A round-trip test against testdata/wire-vectors.json runs in both languages so the wire format stays byte-equivalent.

cargo test -p cinchcli-core --test wire_vectors

License

MIT — see LICENSE.