>_EXECUTIVE SUMMARY
stryke-aws is one of the opt-in connector packages in the stryke ecosystem. AWS client for stryke across 17 services — S3, DynamoDB, SQS, Lambda, STS, SNS, SSM Parameter Store, Secrets Manager, SES, CloudWatch, CloudWatch Logs, EC2, KMS, IAM, Kinesis, ECR, and Step Functions. Opt-in package, kept out of the stryke core binary so the daily-driver install stays slim. The 17 SDKs combined are too much to bake into stryke core, so they ship as a Rust cdylib that stryke dlopens in-process on first use AWS.
The official aws-sdk-rust crates pull in tokio, hyper, rustls, and a fat chain of smithy / signing / endpoint-resolution support code. Ships once as an opt-in package. Credentials and region come from the standard AWS chain (env vars, ~/.aws/config|credentials, IMDS) — same as the aws CLI.
~ARCHITECTURE
In-process cdylib design: the stryke side is a thin .stk wrapper that calls FFI symbols on the dlopen'd library. No subprocess, no pipe — calls return on the same thread that made them. The v1 helper-binary fork-per-call model was replaced in v0.2.0.
| Layer | Implementation |
|---|---|
stryke wrappers (lib/*.stk) | 17 service modules (AWS::S3, AWS::Dynamo, AWS::SQS, AWS::Lambda, AWS::STS, AWS::SNS, AWS::SSM, AWS::Secrets, AWS::SES, AWS::CloudWatch, AWS::Logs, AWS::EC2, AWS::KMS, AWS::IAM, AWS::Kinesis, AWS::ECR, AWS::StepFunctions) plus base AWS; each serializes args to JSON and parses the response |
cdylib (libstryke_aws.{dylib,so}) | Single Rust cdylib crate; every public surface fn is an extern "C" fn aws__<verb>(*const c_char) -> *mut c_char |
| Process model | Library is dlopen'd once per stryke session on first use AWS; a shared tokio runtime + per-region aws_config::SdkConfig cache held in OnceCell; lives until the runtime exits |
| Build | Cargo with [lib] crate-type = ["cdylib"]; publish = false; the package itself ships via s pkg install -g . |
| Install path | ~/.stryke/store/aws@<version>/ after make install; use AWS from any stryke script resolves it |
| Tests | zunit-style under t/ (test_aws.stk end-to-end, test_stryke_aws_surface.stk wrapper-completeness pin) with live-service variants gated on creds + opt-in env vars |
| CI | GitHub Actions .github/workflows/ci.yml — cargo check + fmt + clippy + test + doc, cross-target release build, plus the docs / structure / polish / newline gate jobs |
@SERVICE COVERAGE
Each row is a stryke module (use AWS::<Service>) and the operations it currently wraps. The full surface lives in the Docs API reference.
| Module | Operations |
|---|---|
AWS::S3 | ls, get, put, head, rm, buckets, versions, location, tags, mb (CreateBucket), rb (DeleteBucket) |
AWS::Dynamo | get, put, delete, query, scan, describe, tables, transact, ttl, create, drop |
AWS::SQS | send, receive, delete, list, purge, attrs, set_attrs, change_visibility, pump |
AWS::Lambda | invoke, call, list, get |
AWS::STS | caller_identity, assume_role |
AWS::SNS | topics, create, publish, subscribe, unsubscribe, subscriptions, delete |
AWS::SSM | get, put, by_path, delete, get_many (Parameter Store) |
AWS::Secrets | get, create, put, list (Secrets Manager) |
AWS::SES | send (email, v2) |
AWS::CloudWatch | put, list (metrics) |
AWS::Logs | groups, create, filter, events, put (CloudWatch Logs) |
AWS::EC2 | instances, start, stop, security_groups, vpcs, reboot |
AWS::KMS | keys, describe, encrypt, decrypt, data_key |
AWS::IAM | users, roles, user, role_policies, role |
AWS::Kinesis | list, describe, put |
AWS::ECR | repositories, images |
AWS::StepFunctions | list, start, describe |
Flat extras on base use AWS: s3_copy_object, s3_delete_objects (≤1000), ddb_update_item, ddb_batch_get_item (≤100), ddb_batch_write_item (puts ≤25). Pure no-credential helpers (ARN / S3-URI / endpoint parsing + validation) are also on base AWS — see the Docs pure-helpers table.
!DEFERRED OPERATIONS
These wrappers exist but die with a message naming the cdylib export that needs adding. Intentionally not yet wired so the cdylib surface stays auditable against stryke.toml's [ffi] exports table.
| Op | Status |
|---|---|
AWS::S3::presign | deferred — needs aws__s3_presign |
AWS::Dynamo::batch_write | deferred in the cdylib |
AWS::Dynamo::scan_stream | deferred in the cdylib |
AWS::Lambda invocation_type => "event" | fire-and-forget deferred in the cdylib |
SQS delay_seconds / dedup_id / group_id | send-option fields deferred |
SQS wait / visibility on receive | deferred |
AWS::SQS::list prefix filter | deferred — grep client-side instead |
$WHY OPT-IN (NOT BUILTIN)
The official aws-sdk-rust crates pull in tokio, hyper, rustls, and a fat chain of smithy / signing / endpoint-resolution support code. The 17 SDKs combined are way too much to bake into stryke core. This package ships them once, opt-in.
The trade-off is intentional. The core stryke binary stays slim precisely because each connector ships separately. Daily-driver work (one-liners, awk replacement, data scripting) doesn't need AWS SDKs, MongoDB drivers, or Spark Connect bindings linked in. Core stryke is never linked against this package's deps.
&FFI ENVELOPE
JSON in / JSON out across the FFI boundary. Each AWS::* wrapper serializes its args to a JSON dict and calls the matching aws__* symbol resolved out of libstryke_aws.{dylib,so} (declared in stryke.toml's [ffi] exports); the cdylib returns a JSON CString the wrapper parses. The returned CString is freed via the cdylib-exported stryke_free_cstring, wired automatically by rust_ffi::load_cdylib.
# request shape (built by the .stk wrapper)
{"verb": "<op>", "...": ...}
# response shape
{"result": ...} # success — per-fn shape
{"error": "<msg>"} # failure — wrapper die()s with the message
Persistent state: a shared tokio runtime + an aws_config::SdkConfig cache per region held in OnceCell — no fork-per-call, no full IMDS/SSO/env creds chain on each call.
/SCOPE
See the README's "Why this is a package" + "API reference" sections for the authoritative scope. The package is intentionally narrower than its underlying SDKs — the goal is "useful from a shell pipeline", not "complete API coverage". DynamoDB items are plain JSON in / out (no AttributeValue wrappers); S3 put is buffered. Roadmap-later items: deferred ops above, typed-set passthrough, optimistic-locking helpers, and streaming multipart upload.
#PROJECT METADATA
| Item | Value |
|---|---|
| Version | v0.19.0 |
| License | MIT |
| Author | MenkeTechnologies |
| Repository | github.com/MenkeTechnologies/stryke-aws |
| Parent language | strykelang |
| Meta umbrella | MenkeTechnologiesMeta |
| Issues | github.com/MenkeTechnologies/stryke-aws/issues |