# Tripley RPC
Tripley RPC is an IDL-first RPC toolkit for local-first applications. It provides:
- YAML IDL parsing, formatting, semantic validation, and compatibility checks.
- Rust runtime crates for request/response RPC, activation, notifications, IPC, and WebSocket transports.
- Rust and TypeScript client/server SDK generation.
- A user-facing `tripley-rpc` CLI, installable from Cargo or the `@tripley/rpc` npm wrapper.
C++ support exists in the repository as discontinued experimental work and is not part of the current product surface.
## Current Product Surface
The supported v1 track is Rust + TypeScript + CLI:
- Rust runtime and Rust generator crates are versioned together through the Cargo workspace.
- TypeScript generation targets the external `@tripley-kit/xrpc-runtime` package.
- The npm package `@tripley/rpc` wraps native `tripley-rpc` binaries; it does not include the TypeScript runtime.
## Quick Start
Validate an IDL file:
```sh
cargo run -p tripley-rpc-cli -- validate \
--in idl/examples/kiosk_demo/card_reader.rpc.yaml \
--import-root idl/examples/kiosk_demo
```
Use `--format json` with CLI commands when automation needs machine-readable output.
The stable JSON envelope is documented in `docs/cli-json-output-schema.md`.
Generate Rust SDK code:
```sh
cargo run -p tripley-rpc-cli -- generate rust \
--in idl/examples/kiosk_demo/card_reader.rpc.yaml \
--import-root idl/examples/kiosk_demo \
--out target/generated/kiosk
```
Generate TypeScript client SDK code:
```sh
cargo run -p tripley-rpc-cli -- generate typescript \
--in idl/examples/kiosk_demo/card_reader.rpc.yaml \
--import-root idl/examples/kiosk_demo \
--out target/generated/kiosk-ts \
--runtime-package @tripley-kit/xrpc-runtime
```
Run the local product preflight:
```sh
scripts/release-preflight.sh
```
## Documentation
- CLI and npm packaging: `docs/user-facing-cli-and-npm-packaging.md`
- Integration guide: `docs/project-integration-guide-for-codex.md`
- IDL draft: `docs/rust-rpc-idl-spec-v1-draft.md`
- Runtime transport draft: `docs/rust-rpc-runtime-transport-spec-v1-draft.md`
## Security Model
The default runtime posture is same-machine use. Servers should remain local-only unless a caller explicitly enables remote connections and configures token authentication. The current WebSocket transport supports `ws://`; it does not provide TLS encryption.
See `SECURITY.md` for reporting and supported-version policy.