>_STRYKE-DEMO
Fourteen packages, one pull. Live runnable demos for every stryke-* connector in the family — arrow, aws, docker, duckdb, gcp, grpc, k8s, kafka, mongo, mysql, parquet, postgres, redis, spark. One s install pulls them all from GitHub; each demo is a standalone .stk script you can run directly. docker-compose.yml spins up every live service used by the demos.
The 14 demos
| # | Package | Demo file | Service needed |
|---|---|---|---|
| 1 | stryke-arrow | demos/01_arrow.stk | none (in-process) |
| 2 | stryke-mysql | demos/02_mysql.stk | MySQL 5.7+ / MariaDB |
| 3 | stryke-postgres | demos/03_postgres.stk | Postgres 12+ |
| 4 | stryke-spark | demos/04_spark.stk | none (embedded) |
| 5 | stryke-aws | demos/05_aws.stk | LocalStack or real AWS |
| 6 | stryke-gcp | demos/06_gcp.stk | real GCP (ADC) |
| 7 | stryke-kafka | demos/07_kafka.stk | Kafka broker |
| 8 | stryke-grpc | demos/08_grpc.stk | reflection-enabled gRPC server |
| 9 | stryke-parquet | demos/09_parquet.stk | none (in-process) |
| 10 | stryke-duckdb | demos/10_duckdb.stk | none (embedded) |
| 11 | stryke-redis | demos/11_redis.stk | Redis 6+ |
| 12 | stryke-mongo | demos/12_mongo.stk | MongoDB 5+ |
| 13 | stryke-k8s | demos/13_k8s.stk | Kubernetes 1.24+ (kind / k3s / cloud) |
| 14 | stryke-docker | demos/14_docker.stk | Docker daemon (Desktop / dockerd / DOCKER_HOST) |
Color legend: green = no service required · cyan = local docker-compose can host it · yellow = real cloud creds required.
Install
# clone + bootstrap with stryke's package manager git clone https://github.com/MenkeTechnologies/stryke-demo cd stryke-demo s install # pulls all 14 stryke-* packages from GitHub make install # same thing, via the Makefile
s install resolves the 14 git deps declared in stryke.toml, builds each package's Rust cdylib into the global stryke store, and locks the resolved graph into stryke.lock. There is no per-demo install step — each demo script loads its package with a single use directive (e.g. use Arrow) and the connector is already in the store. The stryke binary is invoked as s throughout this repo (the Makefile, stryke.toml scripts, and every demo's #!/usr/bin/env stryke shebang).
Spin up all live services
# bring up MySQL, Postgres, Kafka, Redis, MongoDB, LocalStack, k3s make up # wraps `docker compose up -d` # verify everything is healthy docker compose ps # tear down + clear volumes make down # wraps `docker compose down -v`
docker-compose.yml ships exactly seven service containers — mysql, postgres, redis, mongo, kafka (KRaft, single-node), localstack (S3 + DynamoDB + SQS + Lambda + STS), and k3s (single-node Kubernetes for the stryke-k8s demo). The Arrow, Parquet, DuckDB, and Spark demos run embedded — no docker required. The gRPC demo expects an externally-running reflection-enabled gRPC server (not part of docker-compose.yml), and the GCP demo needs real Google Cloud credentials (no local emulator).
Run a single demo
Every demo has a one-word make target that sets the connection env vars for you, or you can invoke the .stk file directly with s:
# in-process / embedded — no service needed make arrow # s demos/01_arrow.stk make duckdb # s demos/10_duckdb.stk make spark # s demos/04_spark.stk make parquet # s demos/09_parquet.stk # service-backed — `make up` (or your own service) must be reachable make mysql # MYSQL_URI=mysql://root:root@127.0.0.1:3306/test make postgres # POSTGRES_URI=postgres://postgres:postgres@127.0.0.1:5432/postgres make redis # REDIS_URL=redis://localhost:6379 make mongo # MONGODB_URI=mongodb://localhost:27017 make kafka # KAFKA_BROKERS=localhost:9092 make aws # AWS_ENDPOINT_URL=http://localhost:4566 (LocalStack) make k8s # uses $KUBECONFIG / k3s kubeconfig make docker # uses $DOCKER_HOST or /var/run/docker.sock # need explicit positional args (no make target wires them): s demos/06_gcp.stk gs://my-bucket projects/p/subscriptions/sub projects/p/topics/t s demos/08_grpc.stk localhost:50051
Each demo prints what it's doing as it goes — nothing magic, nothing hidden. Read the .stk file to see exactly which package functions are being exercised; the demos are written to call every public verb of their connector, with the function name printed alongside each line of output (e.g. Arrow::read_columnar limit=3 cols: ...).
Run everything available
# probe each service, skip demos whose dependency is unreachable make all # or the raw stryke entrypoint that does the probing s demos/run_all.stk
run_all.stk calls each connector's ::ping() (and AWS::sts_caller_identity() for AWS) and runs only the demos whose backing service answers. The four in-process demos (arrow, parquet, duckdb, spark) always run. Demos whose service is unreachable print ── NN name: SKIP (service not reachable) and the runner moves on. The GCP and gRPC demos require explicit positional arguments, so run_all.stk prints a one-line reminder for each rather than invoking them.
Environment variables
Connection details are read from the environment. The make targets set sensible localhost defaults (matching docker-compose.yml); override them to point at your own services.
| Demo | Variable(s) | Default (set by make target) |
|---|---|---|
| mysql | MYSQL_URI | mysql://root:root@127.0.0.1:3306/test |
| postgres | POSTGRES_URI | postgres://postgres:postgres@127.0.0.1:5432/postgres |
| redis | REDIS_URL | redis://localhost:6379 |
| mongo | MONGODB_URI | mongodb://localhost:27017 |
| kafka | KAFKA_BROKERS | localhost:9092 |
| aws | AWS_ENDPOINT_URL, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY | LocalStack at :4566, us-east-1, test / test |
| k8s | KUBECONFIG | k3s kubeconfig (./k3s-data/kubeconfig.yaml) |
| docker | DOCKER_HOST | local /var/run/docker.sock |
| gcp | ADC (GOOGLE_APPLICATION_CREDENTIALS) + positional args | none — real GCP required |
| grpc | positional host:port arg | localhost:50051 |
Three demos also read optional opt-in flags that enable extra (slower or destructive) operations: STRYKE_DEMO_LAMBDA (aws — exercise lambda_invoke), STRYKE_DEMO_DOCKER_BUILD / STRYKE_DEMO_DOCKER_PUSH (docker — build/push an image), and STRYKE_DEMO_SPARK_SCRIPT (spark — submit a script via Spark::submit). Left unset, those branches are skipped.
Connector API reference
Each demo is written to call every public verb of its connector. The lists below are the exact functions exercised by each .stk file — read the demo source to see argument shapes and option keys (named args like limit =>, bind =>, columns =>, compression =>).
| Connector | Public verbs exercised by the demo |
|---|---|
| Arrow | version, read, write, read_stream, write_iter, read_columnar, schema, stats, row_count, convert — each also via the per-format namespaces Arrow::CSV, Arrow::Parquet, Arrow::Feather, Arrow::JSON (NDJSON), Arrow::IPC, plus Arrow::DataFrame::load / dump. |
| MySQL | version, ping, databases, tables, schema, query, query_one, query_col, query_scalar, query_stream, execute, insert_many, exec_file, dump. |
| Postgres | version, ping, databases, tables, schema, query, query_one, query_col, query_scalar, query_stream, execute, insert_many, exec_file, dump. |
| Spark | version, ping, databases, tables, schema, query, query_one, query_col, query_scalar, query_stream, execute, dump, submit. |
| AWS | version, ping, sts_caller_identity, s3_list_buckets, s3_put_object, s3_get_object, s3_list_objects, s3_delete_object, ddb_list_tables, ddb_put_item, ddb_get_item, lambda_list_functions, lambda_invoke. |
| GCP | version, ping, identity, gcs_list_buckets, gcs_put_object, gcs_get_object, gcs_list_objects, gcs_delete_object, pubsub_publish, pubsub_pull. |
| Kafka | version, ping, cluster, topics, create_topic, delete_topic, describe, produce, produce_many, consume, consume_stream, groups, lag. |
| Grpc | version, ping, list, describe, call (server reflection driven). |
| Parquet | version, inspect, schema, stats, count, head, tail, rowgroups, stream, to_csv, to_json, compress. |
| DuckDB | version, ping, inspect, query, query_one, query_col, query_scalar, query_stream, execute, exec_file, import, export, tables, schema, dump. |
| Redis | version, ping, info, dbsize, raw; strings (get/set/mget/mset/incr/decr/del/exists/expire/ttl/type/keys/scan); lists (lpush/rpush/lpop/rpop/lrange/llen); hashes (hset/hget/hmset/hmget/hgetall/hkeys/hvals/hdel); sets (sadd/srem/smembers/sismember/scard); sorted sets (zadd/zrem/zrange/zscore/zcard); publish. |
| Mongo | version, ping, list_databases, list_collections, count, insert_one, insert_many, find, find_one, find_stream, update_one, update_many, replace_one, delete_one, delete_many, aggregate, create_index, indexes, drop_index. |
| K8s | version, ping, contexts, current_context, namespaces, api_resources, get, get_one, create, apply, replace, scale, delete_resource, watch, logs_follow. |
| Docker | version, ping, info, images, pull, tag, push, build, create, run, start, stop, restart, kill, rm, rmi, ps, inspect, logs, logs_follow, exec, stats, events; networks (networks/network_create/network_rm); volumes (volumes/volume_create/volume_rm). |
Cross-connector integration tests
Beyond the single-connector demos, the t/ directory holds standalone integration tests that wire connectors together — e.g. write with Arrow, query the same file with DuckDB, and reconcile the row counts against the Parquet footer. They cover Arrow compute pipelines, Parquet footer diagnostics and compression codecs, Arrow↔DuckDB type round-trips, DuckDB CTAS/COPY TO and read_parquet/read_csv/read_json direct reads, summarize/describe vs Arrow stats, and Polars CSV round-trips and group-by vs DuckDB. Run one directly:
s t/integration_arrow_duckdb.stk s t/integration_duckdb_summarize_describe_vs_arrow_stats.stk
Layout
stryke-demo/ ├── demos/ │ ├── 01_arrow.stk # arrow / csv / parquet / feather / json / ipc I/O │ ├── 02_mysql.stk # CREATE / INSERT / SELECT + bind + insert_many │ ├── 03_postgres.stk # same shape as mysql │ ├── 04_spark.stk # SparkSQL via embedded DataFusion session │ ├── 05_aws.stk # S3 + DynamoDB + STS (+ optional Lambda) via LocalStack │ ├── 06_gcp.stk # GCS put/get/list + Pub/Sub publish/pull │ ├── 07_kafka.stk # create-topic + produce + consume + admin + delete │ ├── 08_grpc.stk # reflection-driven list + describe + call │ ├── 09_parquet.stk # inspect + schema + stats + head/tail + recompress │ ├── 10_duckdb.stk # in-mem + bind + import/export + file db │ ├── 11_redis.stk # strings + lists + hashes + sets + sorted sets │ ├── 12_mongo.stk # CRUD + aggregate + index admin │ ├── 13_k8s.stk # discovery + create/apply + scale + logs + cleanup │ ├── 14_docker.stk # pull + run + inspect + exec + logs + networks/volumes │ └── run_all.stk # ping each service + run reachable demos ├── t/ # cross-connector integration tests ├── docker-compose.yml # mysql / postgres / redis / mongo / kafka / localstack / k3s ├── Makefile # `make <name>`, `up`, `down`, `all`, `install`, `clean` ├── stryke.toml # package manifest (declares the 14 deps) └── docs/ # this site (GitHub Pages)
Updating dep pins
stryke.toml pins each stryke-* package to branch = "main". When the packages start cutting vX.Y.Z tags, swap branch = "main" to tag = "vX.Y.Z" for reproducible installs, then re-run s install to refresh stryke.lock:
s install # re-resolve deps and rewrite stryke.lock make clean # drop target/, tmp/, stryke.lock for a clean re-resolve
Sibling packages
Part of the stryke package family. Browse the others via the MenkeTechnologiesMeta umbrella repo:
- stryke-arrow — Apache Arrow / Parquet / Feather
- stryke-aws — S3, DynamoDB, SQS, Lambda, STS
- stryke-azure — Blob, Queues, Cosmos DB, Key Vault, Entra
- stryke-clickhouse — ClickHouse
- stryke-docker — Docker daemon API
- stryke-duckdb — embedded DuckDB SQL engine
- stryke-email — email + campaign client
- stryke-fleet — parallel expect/PTY automation
- stryke-gcp — Cloud Storage, Pub/Sub, Secret Manager, BigQuery, Firestore
- stryke-grpc — reflection-based gRPC client
- stryke-gui — mouse / keyboard / screen / clipboard automation
- stryke-k8s — Kubernetes
- stryke-kafka — Apache Kafka
- stryke-mcpd — MCP servers without a runtime
- stryke-mongo — MongoDB
- stryke-mssql — Microsoft SQL Server
- stryke-mysql — MySQL / MariaDB
- stryke-neo4j — Neo4j graph (Bolt)
- stryke-office — Office docs / PDF / images
- stryke-parquet — Parquet file inspector
- stryke-polars — Polars + ndarray + linalg + FFT
- stryke-postgres — PostgreSQL
- stryke-redis — Redis / Valkey
- stryke-scrape — web scraping / crawling
- stryke-scylla — ScyllaDB / Cassandra
- stryke-search — Elasticsearch / OpenSearch
- stryke-selenium — browser automation (WebDriver)
- stryke-spark — Spark Connect (no JVM)
- stryke-utils — pure-stryke utility belt
- stryke-zmq — ZeroMQ messaging