{"id":35523233,"url":"https://github.com/stroppy-io/stroppy","last_synced_at":"2026-06-27T03:02:40.059Z","repository":{"id":308756571,"uuid":"1032754092","full_name":"stroppy-io/stroppy","owner":"stroppy-io","description":"Database Stress Testing Tool","archived":false,"fork":false,"pushed_at":"2026-06-23T19:02:27.000Z","size":81003,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-23T19:08:09.329Z","etag":null,"topics":["databases","golang","k6","k6-extension","stress-testing","tooling","ts","workloads"],"latest_commit_sha":null,"homepage":"https://stroppy.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stroppy-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-05T19:18:57.000Z","updated_at":"2026-06-23T18:51:27.000Z","dependencies_parsed_at":"2025-08-07T18:58:13.301Z","dependency_job_id":"ff4cea1f-a552-4e92-98ba-5a394edbaca0","html_url":"https://github.com/stroppy-io/stroppy","commit_stats":null,"previous_names":["stroppy-io/stoppy","stroppy-io/stroppy"],"tags_count":78,"template":false,"template_full_name":null,"purl":"pkg:github/stroppy-io/stroppy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stroppy-io%2Fstroppy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stroppy-io%2Fstroppy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stroppy-io%2Fstroppy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stroppy-io%2Fstroppy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stroppy-io","download_url":"https://codeload.github.com/stroppy-io/stroppy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stroppy-io%2Fstroppy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34839888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["databases","golang","k6","k6-extension","stress-testing","tooling","ts","workloads"],"created_at":"2026-01-04T00:19:05.533Z","updated_at":"2026-06-27T03:02:40.053Z","avatar_url":"https://github.com/stroppy-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Stroppy\n\n[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/2mSSrkBkHm)\n[![Docs](https://img.shields.io/badge/docs-stroppy--io.github.io-blue)](https://stroppy-io.github.io)\n\nDatabase stress testing CLI tool powered by the k6 workload engine.\n\n## Features\n\n- Built-in TPC-B, TPC-C, TPC-H, and TPC-DS workload tests\n- Custom workload support in TypeScript\n- Deterministic relational data generation with `Rel.table` and `driver.insertSpec`\n- PostgreSQL, MySQL, YDB, Picodata, CSV, and noop drivers\n- Transaction support with configurable isolation levels\n- k6-based load generation, metrics, thresholds, and output integrations\n\n## Installation\n\n### Pre-built Binaries\n\nDownload the latest release from [GitHub Releases](https://github.com/stroppy-io/stroppy/releases).\n\n### Docker\n\n```bash\ndocker pull ghcr.io/stroppy-io/stroppy:latest\n```\n\n```bash\ndocker build -t stroppy .\n```\n\n### Build from Source\n\nBuild requirements: Go 1.24.3+\n\n```bash\nmake install-xk6  # installs k6, used internally by stroppy\nmake build\n```\n\nThe binary will be available at `./build/stroppy`.\n\n## Quick Start\n\nConfigure the target database via driver flags:\n\n```bash\nstroppy run tpcc/tx -d pg -D url=postgres://user:password@host:5432/dbname\n```\n\n### Run Tests\n\nYou can run a test from the local directory.\n\n```bash\n./stroppy run workloads/simple/simple.ts\n```\n\nMany tests are embedded in stroppy. The first argument is a `.ts` workload, the optional second is a `.sql` schema file. Extensions may be omitted.\n\nTPC-B and TPC-C each ship two scripts:\n- `procs` — uses stored procedures; supports **PostgreSQL and MySQL**\n- `tx` — uses raw transactions; works with **all SQL drivers** (PostgreSQL, MySQL, Picodata, YDB)\n\nTPC-H ships `tpch/tx`, a relational-framework workload that loads all eight\ntables and runs the 22 query suite. TPC-DS ships `tpcds/tpcds`, which generates\nand loads all 24 tables (faithful `dsdgen` port) and runs the 99 query suite on\nPostgreSQL and MySQL; scale via `SCALE_FACTOR`.\n\n```bash\nstroppy run tpcc/procs        # TPC-C, stored procedures (pg/mysql)\nstroppy run tpcc/procs.ts     # same, explicit extension\nstroppy run tpcc/tx           # TPC-C, raw transactions (any DB)\nstroppy run tpcb/procs        # TPC-B, stored procedures (pg/mysql)\nstroppy run tpcb/tx           # TPC-B, raw transactions (any DB)\nstroppy run tpch/tx           # TPC-H, relational load + query suite\nstroppy run tpcds/tpcds -e SCALE_FACTOR=1  # TPC-DS, load 24 tables + 99 queries\n```\n\nAnd you can mix builtin tests with your own scripts or SQL files:\n\n```bash\nstroppy run tpcb/procs ./my-experimental.sql\nstroppy run ./my-tpcb.ts tpcb/pg.sql\n```\n\nUse `-d` to select a driver preset and `-D` to override driver options:\n\n```bash\nstroppy run tpcc/procs -d pg\nstroppy run tpcc/procs -d mysql -D url=mysql://root:pass@localhost:3306/bench\nstroppy run tpcc/tx -d pico                   # picodata: use tx variant\nstroppy run tpcc/procs -d pg -d1 mysql        # two drivers\nstroppy run simple -d noop                    # framework/runner overhead only\n```\n\nPass environment variables to the script with `-e` (keys are auto-uppercased):\n\n```bash\nstroppy run tpcc/tx -e pool_size=200\nstroppy run tpcc/tx -d pg -e scale_factor=2\nstroppy run tpcc/tx -d pg -e load_workers=8   # parallelize load_data InsertSpecs\n```\n\nCollect repeated settings in `stroppy-config.json` or an explicit `-f` file:\n\n```bash\nstroppy run -f prod.json\nstroppy probe -f prod.json --envs --drivers\n```\n\nPrecedence is: real environment \u003e `-e` \u003e config `env` \u003e `-d/-D` \u003e\nconfig `drivers` \u003e script defaults.\n\nUse `stroppy help` to explore available topics:\n\n```bash\nstroppy help drivers\nstroppy help resolution\nstroppy help datagen\n```\n\n### Probe Tests\n\nProbe inspects a workload and prints its configuration and SQL schema without running it.\n\n```bash\nstroppy probe tpcc/procs\nstroppy probe tpcc/tx.ts\n\nstroppy help probe\n```\n\n### Presets Tree\n```\n├─ execute_sql\n│  └─ execute_sql.ts\n├─ simple\n│  └─ simple.ts\n├─ tests\n│  └─ csv_smoke.ts multi_drivers_test.ts runtime_generators_api_test.ts\n│     sqlapi_test.ts transaction_test.ts\n├─ tpcb\n│  ├─ procs.ts            (stored procedures — pg/mysql)\n│  ├─ tx.ts               (raw transactions  — any DB)\n│  ├─ tpcb_common.ts\n│  └─ pg.sql mysql.sql pico.sql ydb.sql\n├─ tpcc\n│  ├─ procs.ts            (stored procedures — pg/mysql)\n│  ├─ tx.ts               (raw transactions  — any DB)\n│  ├─ tpcc_common.ts tpcc_helpers.ts\n│  └─ pg.sql mysql.sql pico.sql ydb.sql ydb_no_indexes.sql\n├─ tpch\n│  ├─ tx.ts               (relational load + 22 queries)\n│  ├─ tpch_helpers.ts tpch_validate.ts\n│  └─ pg.sql mysql.sql pico.sql ydb.sql distributions.json answers_sf1.json\n└─ tpcds\n   ├─ tpcds.ts            (load 24 tables + 99 queries — pg/mysql)\n   ├─ tpcds_validate.ts\n   └─ schema.pg.sql schema.mysql.sql pg.sql mysql.sql answers_sf1.json\n```\n\n### Generate Test Workspace\n\nGenerate workspace with preset:\n\n```bash\nstroppy gen --workdir mytest --preset=simple\n```\n\nCheck available presets:\n\n```bash\nstroppy help gen\n```\n\nThis creates a new directory with:\n- Stroppy binary\n- Test configuration files\n- TypeScript test templates\n\nInstall dependencies:\n\n```bash\ncd mytest \u0026\u0026 npm install\n```\n\n## Developing Test Scripts\n\nAfter generating a workspace:\n\n1. Edit TypeScript test files in your workdir\n2. Import stroppy helpers and, for generated loads, `datagen.ts`.\n3. Use k6 APIs for test scenarios\n4. Run with `./stroppy run \u003ctest-file\u003e.ts`\n\nLook at `simple.ts`, `tpcb/tx.ts`, and `docs/datagen-framework.md` first as\nreferences.\n\n## Docker Usage\n\n### Using Built-in Workloads\n\nRun directly (--network host to reach localhost databases):\n\n```bash\ndocker run --network host ghcr.io/stroppy-io/stroppy run simple\n```\n\n\u003e Add the tag to image:\n\u003e ```bash\n\u003e docker tag ghcr.io/stroppy-io/stroppy stroppy\n\u003e ```\n\n```bash\ndocker run --network host stroppy run tpcb/procs \\\n  -d pg -D url=postgres://user:password@host:5432/dbname\n```\n\nAvailable workloads: `simple`, `tpcb`, `tpcc`, `tpch`, `tpcds`, `execute_sql`\n\n### Create Persistent Workdir\n\n```bash\n# Generate workspace\ndocker run -v $(pwd):/workspace stroppy gen --workdir mytest --preset=simple\ncd mytest\n\n# Run test\ndocker run -v $(pwd):/workspace stroppy run simple.ts\n```\n\n## Advanced Usage\n\n### Using as k6 Extension\n\nStroppy is built as a k6 extension. If you're familiar with k6, you can use the k6 binary directly to access all [k6 features](https://grafana.com/docs/k6/latest/using-k6/k6-options/reference/):\n\n```bash\n# Build both k6 and stroppy binaries\nmake build\n\n# Use k6 binary directly with all k6 options\n./build/k6 run --vus 10 --duration 30s test.ts\n\n# Use k6 output options (JSON, InfluxDB, etc.)\n./build/k6 run --out json=results.json test.ts\n\n# All the stroppy commands accessible as extension\n./build/k6 x stroppy run workloads/simple/simple.ts\n```\n\nThe stroppy extensions are available via `k6/x/stroppy` module in your test scripts, giving you full access to both k6 and stroppy capabilities.\n\n## Contribution\n\n### Full Build With Generated Files\n\nBuild requirements: Go 1.24.3+, Node.js and npm, git, curl, unzip\n\n```bash\nmake install-bin-deps\nmake proto            # build protobuf and ts framework bundle\nmake build\n```\n\n## License\n\nSee LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstroppy-io%2Fstroppy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstroppy-io%2Fstroppy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstroppy-io%2Fstroppy/lists"}