From UDB Skills
Help a developer USE a running UDB broker — connect a language SDK, authenticate with scopes/credentials, CRUD proto-defined entities over the gRPC DataBroker API, and use the native services (storage uploads, notifications, WebRTC rooms, events/CDC). Use when the user is building an app against UDB, asks about the UDB SDK (TypeScript/Python/Go/Java/C#/PHP), UDB metadata/tenant/scopes/auth, Select/Upsert/Delete, file upload/presigned URLs, UDB events/topics, defining UDB entity protos (table/column annotations), debugging UDB gRPC errors, or the `udb` CLI (serve, sdk generate, proto export, auth bootstrap, doctor).
How this skill is triggered — by the user, by Claude, or both
Slash command
/udb:using-udbThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
UDB is a **proto-driven multi-database broker**. Developers declare their data
UDB is a proto-driven multi-database broker. Developers declare their data
model as annotated Protocol Buffers; UDB generates the DB schema and serves a
uniform gRPC DataBroker API (Select/Upsert/Delete) plus a native
control plane (auth/authz/api-keys/storage/asset/notification/webrtc). Every
request carries metadata (tenant, project, scopes, identity) enforced
fail-closed server-side.
Full reference (read on demand): references/using-udb.md — per-language SDK install+connect snippets, the metadata header table, CRUD semantics (idempotency/retry/pagination/proto3-presence), auth + bootstrap, the native-services tour (storage upload flow, notifications, WebRTC, events/CDC), proto annotation authoring with tenant columns, the CLI, and the error-decode table.
message; its fully-qualified
name (e.g. shop.v1.Customer) is the message_type for every data RPC.:50051) serves ONLY
health/reflection/DataBroker. ALL native services live on the control-plane
target (default port+10) — every SDK has target AND authTarget.
UNIMPLEMENTED ≈ you dialed the wrong one.conflict_fields idempotency on Upsert.udb.<svc>.<entity>.<verb>.v1);
CDC subscription streams are tenant-scoped with since_event_id replay.SDK packages: TS @udb_plus/sdk · Python udb-client · Go
github.com/fahara02/udb/sdk/go · Java dev.udb:udb-java-client · C#
Udb.Client · PHP fahara02/udb-laravel.
CRUD (by message_type = proto FQN): Select {filter, limit ≤ ~500/page} ·
Upsert {record, conflict_fields, return_record} · Delete {filter} · typed
cache/document/graph/timeseries RPCs per GetCapabilities.
Storage upload: RegisterUpload → presigned PUT → FinalizeUpload
(is_public is optional — omit to preserve) → presigned GET. Authz:
can(resource, action); server cache_ttl_seconds=0 = never cache.
Bootstrap a fresh broker:
UDB_PG_DSN=… UDB_PASSWORD_HASH_SECRET=… \
udb auth bootstrap user --username admin --email [email protected] \
--password '<strong>' --tenant acme --project default
CLI: udb proto export --out proto · udb serve proto "" 0.0.0.0:50051 ·
udb sdk generate --lang <l> · udb sdk manifest · udb doctor ·
udb native list/docs · udb compat-matrix (authoritative annotations).
UNIMPLEMENTED→wrong target (set authTarget) · PERMISSION_DENIED→scope or
tenant mismatch · FAILED_PRECONDITION→service disabled / wrong state /
missing config · RESOURCE_EXHAUSTED→rate limit or backpressure (back off) ·
INVALID_ARGUMENT→unknown message_type (use the FQN; udb sdk manifest) ·
ABORTED→version/CAS conflict (re-read, retry) · NOT_FOUND can mean
"exists, but not your tenant" — by design.
message_type FQNs, never
table names.tenant_id,
_tenant_id, or is_tenant_column: true); custom proto packages need
UDB_PROTO_NAMESPACE or annotations are silently ignored.udb sdk manifest,
udb native list/docs, udb compat-matrix, and the reference file above.npx claudepluginhub fahara02/udb --plugin udbProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.