>_EXECUTIVE SUMMARY
stryke-azure is an opt-in connector package in the stryke ecosystem — the Azure counterpart to stryke-aws. It exposes Blob Storage, Storage Queues, Cosmos DB, Key Vault Secrets and Keys, and Entra identity as the typed data plane, plus an Azure Resource Manager management plane (Virtual Machines, Storage-account management, Service Bus, Monitor, Container Instances / AKS, Resource Groups, Subscriptions) — all under the Azure package. The data plane is built on the official Azure SDK for Rust (GA 1.0.0; Cosmos on the 0.35.0 preview).
The SDK pulls in tokio, hyper, rustls, reqwest, and the typespec client-core plus per-service generated models — a dependency tree that ships once, on demand, as an opt-in package. stryke core is never linked against it. The management plane has no GA typed Rust SDK crate, so those ops reach ARM over REST — reusing the same shared Entra credential and the same azure_core HTTP client the typed data-plane clients use.
~ARCHITECTURE
A single in-process cdylib. The stryke side is a thin .stk library; the heavy SDK code lives in libstryke_azure and is dlopened on first use Azure. No sidecar process, no fork per call.
| Layer | Implementation |
|---|---|
stryke library (lib/*.stk) | Thin wrappers exposing typed functions; serialize args to JSON, decode responses, die on an {error} payload |
cdylib (libstryke_azure) | Rust async (tokio); each azure__* export takes a JSON string and returns a JSON string |
| Persistent state | One shared tokio runtime + one DeveloperToolsCredential as Arc<dyn TokenCredential>, reused across every service client |
| FFI safety | Handler errors and panics are caught and surfaced as {"error": ...}; a panic never crosses the C ABI into the host shell |
| Build | Cargo crate-type = ["cdylib"], publish = false; ships via s pkg install -g . |
| Tests | Rust unit tests under src/ (endpoint construction + FFI-safety pins, offline) plus surface tests under t/ |
| CI | GitHub Actions .github/workflows/ci.yml — check, fmt, clippy -D warnings, test (ubuntu + macos), doc, release-build on three targets |
~SERVICE MAPPING
The surface tracks stryke-aws, remapped onto Azure's GA Rust SDK for the data plane and onto Azure Resource Manager REST for the management plane. The typed crate versions below are the ones pinned in Cargo.lock.
| AWS | Azure | Backing crate / transport |
|---|---|---|
| S3 | Blob Storage | azure_storage_blob 1.0.0 |
| SQS | Storage Queues | azure_storage_queue 1.0.0 |
| DynamoDB | Cosmos DB (NoSQL) | azure_data_cosmos 0.35.0 (preview; Cargo.lock pins the exact build) |
| Secrets Manager / SSM | Key Vault Secrets | azure_security_keyvault_secrets 1.0.0 |
| KMS | Key Vault Keys | azure_security_keyvault_keys 1.0.0 |
| STS | Entra identity token | azure_identity 1.0.0 |
| EC2 | Virtual Machines | ARM REST (via azure_core 1.0.0) |
| ECS / EKS | Container Instances / AKS | ARM REST |
| SNS / SQS (enterprise) | Service Bus | ARM + data-plane REST |
| CloudWatch | Azure Monitor metrics | ARM REST |
| (account mgmt) | Storage account management | ARM REST |
| (resource mgmt) | Resource Groups / Subscriptions | ARM REST |
The data-plane services come from the GA typed crates. The management plane has no GA typed Rust SDK crate; rather than shipping an untyped second SDK or a separate process, those ops issue ARM REST calls through the azure_core HTTP pipeline already linked for the typed clients — one auth path, one runtime, one HTTP stack.
~SURFACE
89 FFI exports, surfaced through the flat Azure namespace plus twelve typed sub-packages. The Azure namespace also carries the pure helpers and the version / ping convenience wrappers.
| Package | Plane | Surface |
|---|---|---|
Azure::Blob | data | ls, get, put, head, rm, containers, create_container, delete_container, set_metadata |
Azure::Queue | data | ls, send, receive, delete, clear, count, create, drop, pump |
Azure::Cosmos | data | databases, containers, put, get, delete, query, replace, create_database, create_container, delete_database, delete_container |
Azure::Secrets | data | get, set, ls, rm, versions, backup + param_get / param_put / param_delete aliases |
Azure::Keys | data | encrypt, decrypt, ls, get |
Azure::Compute | mgmt | ls, get, start, stop, deallocate, restart, status, skus |
Azure::Containers | mgmt | groups, group, clusters, cluster, node_pools |
Azure::Storage | mgmt | ls, get, keys |
Azure::ResourceGroups | mgmt | ls, get, create, rm, resources |
Azure::ServiceBus | mgmt + data | queues, topics, namespaces, send, receive |
Azure::Subscriptions | mgmt | ls, locations |
Azure::Monitor | mgmt | metrics |
Azure helpers | pure | parse_resource_id, resource_id_parent, build_resource_id, parse_connection_string, build_connection_string, redact_connection_string, parse_blob_uri, build_blob_uri, storage_endpoint, parse_storage_endpoint, and the valid_* / normalize_guid / format_guid validators |
$WHY OPT-IN (NOT BUILTIN)
The Azure SDK for Rust crates pull in tokio, hyper, rustls, and reqwest, plus a chain of typespec / generated-model support code. The core stryke binary stays slim precisely because each connector ships separately. Daily-driver work — one-liners, awk replacement, data scripting — doesn't need an Azure SDK, a Cosmos driver, or a Key Vault client linked in.
&FFI PROTOCOL
JSON in, JSON out, over a C ABI. Each request is a JSON object of op-specific args. Each response is a JSON object; errors carry an error field with a verbatim message. The C string returned by every export is freed through the shared stryke_free_cstring symbol.
# every export resolves the shared credential, builds a per-call
# service client, and runs on the shared tokio runtime
azure__blob_get('{"container":"data","name":"hello.txt","account":"acme"}')
-> {"container":"data","name":"hello.txt","body":"hi","content_length":2}
# handler errors are surfaced, never thrown across the ABI
azure__blob_get('{}') -> {"error":"missing container"}
/SCOPE
See the README's service map and usage sections for the authoritative scope. The package is intentionally narrower than the underlying SDK — the goal is "useful from a shell pipeline", not "complete API coverage". Cosmos queries are single-partition (an SDK constraint); live, credential-backed round-trips are exercised manually against a real subscription.
#PROJECT METADATA
| Item | Value |
|---|---|
| License | MIT |
| Author | MenkeTechnologies |
| Repository | github.com/MenkeTechnologies/stryke-azure |
| Parent language | strykelang |
| Meta umbrella | MenkeTechnologiesMeta |
| Issues | github.com/MenkeTechnologies/stryke-azure/issues |