{"_id":"@ahmedrowaihi/k6","_rev":"6-07885d29cf1d4e0d98e71603c9efd6e6","name":"@ahmedrowaihi/k6","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"@ahmedrowaihi/k6","version":"0.1.0","keywords":["k6","load-testing","performance","framework","dsl"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/k6@0.1.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"acc192d88cd3830518ca2068f52e1ece1ea3fa62","tarball":"https://registry.npmjs.org/@ahmedrowaihi/k6/-/k6-0.1.0.tgz","fileCount":35,"integrity":"sha512-kxHNFh2AHuwzYR/4AwEbO4YRwjdHEicyoQz/QZWhVG+2/Rio39U+403t2lZfZ23SPyyUzbGEq+tD7h6nPSlg7Q==","signatures":[{"sig":"MEUCIBzZAxXTXV6AwSkb4cN+k7irFb3dw6kyg6hGcMQqDUL2AiEAmxlulR8wu9JnECqrvu0BpRJ5TDcmqEGTaCGcIEwcLZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fk6@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45112},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-k6-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/295462a1d6f6edb740b8239e22d3fee3/ahmedrowaihi-k6-0.1.0.tgz","_integrity":"sha512-kxHNFh2AHuwzYR/4AwEbO4YRwjdHEicyoQz/QZWhVG+2/Rio39U+403t2lZfZ23SPyyUzbGEq+tD7h6nPSlg7Q==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"_npmVersion":"10.8.2","description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/k6":"^1.7.0","@types/node":"^22","@ahmedrowaihi/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/k6_0.1.0_1778769284621_0.44484059725097413","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/k6. See https://github.com/ir-kit/ir-kit for migration."},"0.2.0":{"name":"@ahmedrowaihi/k6","version":"0.2.0","keywords":["k6","load-testing","performance","framework","dsl"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/k6@0.2.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"b5ec7bb9f35ea111bf8e3d47c25b6eb050b8c3ca","tarball":"https://registry.npmjs.org/@ahmedrowaihi/k6/-/k6-0.2.0.tgz","fileCount":39,"integrity":"sha512-p2p62w9pfe2N060kpWiwbliUvxaYfg4pM/d4cdOfbY/N6Ai6lKE5c0ZkVBOIZskkmXZQsaB6wTrh2rRK9b69jQ==","signatures":[{"sig":"MEUCIQDcwOrJZ36kKvP3hWAGK544r3lkEvL6WkbjZ0/mrDohHgIgSyFMwBWygu1MI+eEIbyN8n2XPKhVO9c+bHp498VsESE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fk6@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52150},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-k6-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/7992c812b8f6ccb4cd77c246024ed0ad/ahmedrowaihi-k6-0.2.0.tgz","_integrity":"sha512-p2p62w9pfe2N060kpWiwbliUvxaYfg4pM/d4cdOfbY/N6Ai6lKE5c0ZkVBOIZskkmXZQsaB6wTrh2rRK9b69jQ==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"_npmVersion":"10.8.2","description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/k6":"^1.7.0","@types/node":"^22","@ahmedrowaihi/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/k6_0.2.0_1778890927766_0.09159306399647926","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/k6. See https://github.com/ir-kit/ir-kit for migration."},"1.0.0":{"name":"@ahmedrowaihi/k6","version":"1.0.0","keywords":["k6","load-testing","performance","framework","dsl"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/k6@1.0.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"792824199f3522d140fda145ecc585d75621a52b","tarball":"https://registry.npmjs.org/@ahmedrowaihi/k6/-/k6-1.0.0.tgz","fileCount":39,"integrity":"sha512-6E5WgaJD9srfRXwNbzCs4vu6YVvbTGrF5nOemynCyxh2vTb2CnDN6Su4G2vN8zqv1jhyG8cOv75Fg9kVvZpC6g==","signatures":[{"sig":"MEQCIHna6cMywDjebXR9beSRQM/SSxEDc742R5QrcHUBys4HAiB5OlJrTi2+GRyjkZDtL+VkDxujEWONc2yl4vpt8SAHOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fk6@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94159},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-k6-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/5b7b8244a57f1998b91c57a3d9af42c6/ahmedrowaihi-k6-1.0.0.tgz","_integrity":"sha512-6E5WgaJD9srfRXwNbzCs4vu6YVvbTGrF5nOemynCyxh2vTb2CnDN6Su4G2vN8zqv1jhyG8cOv75Fg9kVvZpC6g==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"_npmVersion":"10.8.2","description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@types/k6":"^1.7.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/node":"^22","@ahmedrowaihi/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/k6_1.0.0_1779008211494_0.1896596774338155","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/k6. See https://github.com/ir-kit/ir-kit for migration."},"1.0.1":{"name":"@ahmedrowaihi/k6","version":"1.0.1","keywords":["k6","load-testing","performance","framework","dsl"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/k6@1.0.1","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"ede30158a6983b4167c63a9b570ef4bf0e0785ca","tarball":"https://registry.npmjs.org/@ahmedrowaihi/k6/-/k6-1.0.1.tgz","fileCount":39,"integrity":"sha512-uLye06/3DyRZqtgEXvmLA6fMAVXTYJt7sF7NyjZdk9u4yacaoHIVV5uf/VmDokHUNqQfWOSpzUL8ECfDZiQuHQ==","signatures":[{"sig":"MEUCIG5N0zIOQ2FpP4HdjUBcr5jO6gJGv2u4OLR6FXgiXOwNAiEAidZkc424ESdONawIaTrRkMQKgdDmlPnY6fr0fK0+XtY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fk6@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94273},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-k6-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/6c226059c3e42d5c5b87c9ac3bd5815a/ahmedrowaihi-k6-1.0.1.tgz","_integrity":"sha512-uLye06/3DyRZqtgEXvmLA6fMAVXTYJt7sF7NyjZdk9u4yacaoHIVV5uf/VmDokHUNqQfWOSpzUL8ECfDZiQuHQ==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"_npmVersion":"10.8.2","description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/k6":"^1.7.0","@types/node":"^22","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@types/k6":">=1.7.0"},"peerDependenciesMeta":{"@types/k6":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/k6_1.0.1_1779014080100_0.40339918414377895","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/k6. See https://github.com/ir-kit/ir-kit for migration."},"1.1.0":{"name":"@ahmedrowaihi/k6","version":"1.1.0","keywords":["k6","load-testing","performance","framework","dsl"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/k6@1.1.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"24fe146952179277f8f958120d5497e623f9d97f","tarball":"https://registry.npmjs.org/@ahmedrowaihi/k6/-/k6-1.1.0.tgz","fileCount":39,"integrity":"sha512-iYcIVN701R4oMtSgwjYHqJ3B0W9mkQsPuPFcT+/lpNTsN24gpjqYbdYgPSj8bxf0w6hXKpXO2L+V4pLGXgWDrg==","signatures":[{"sig":"MEQCIAqrE2xmO+b3JmHzUhYp1+gjbrTDb6S8CayEOoOVHQpEAiBxvf2ZlPBotbredvVF/XfpjecRQKR1eV6WA2GIC0FraA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fk6@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100473},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-k6-1.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/6df19a779581c4b7f23b4346512d507d/ahmedrowaihi-k6-1.1.0.tgz","_integrity":"sha512-iYcIVN701R4oMtSgwjYHqJ3B0W9mkQsPuPFcT+/lpNTsN24gpjqYbdYgPSj8bxf0w6hXKpXO2L+V4pLGXgWDrg==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"_npmVersion":"10.8.2","description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/k6":"^1.7.0","@types/node":"^22","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@types/k6":">=1.7.0"},"peerDependenciesMeta":{"@types/k6":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/k6_1.1.0_1779017951380_0.9516528586588473","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/k6. See https://github.com/ir-kit/ir-kit for migration."}},"time":{"created":"2026-05-14T14:34:44.518Z","modified":"2026-05-21T09:19:28.565Z","0.1.0":"2026-05-14T14:34:44.866Z","0.2.0":"2026-05-16T00:22:07.935Z","1.0.0":"2026-05-17T08:56:51.638Z","1.0.1":"2026-05-17T10:34:40.240Z","1.1.0":"2026-05-17T11:39:11.519Z"},"bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/k6/framework","keywords":["k6","load-testing","performance","framework","dsl"],"repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/k6/framework"},"description":"Framework for authoring k6 load tests in TypeScript: defineLoadTest, flow().step() chaining, pace presets, budgets, auth middleware. Compiles to standard k6.","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"readme":"# @ahmedrowaihi/k6\n\nFramework for authoring [k6](https://k6.io) load tests in TypeScript. The single package you import from your `loadtest.ts` — compiles down to standard k6 (`export const options` + `export default function`).\n\n## Why\n\nRaw k6 forces you to write threshold strings, magic globals (`__VU`, `__ITER`, `__ENV`), and unstructured `default()` bodies. This framework gives you typed scenarios, step chaining, flat budgets, and reusable auth middleware. The runtime is small — it compiles to vanilla k6, so there's nothing to learn beyond k6's mental model.\n\n## API\n\n```ts\nimport {\n  defineLoadTest,\n  flow,\n  smoke, load, stress, spike, repro, soak,\n  useAuth,\n} from \"@ahmedrowaihi/k6\";\n```\n\n### `defineLoadTest(config)`\n\n```ts\nconst lt = defineLoadTest({\n  use?:        Middleware[],                       // auth helpers, etc.\n  budgets?:    { p95, p99, errors, ops },          // compiled to k6 thresholds\n  pace?:       Scenario,                            // shorthand single-scenario\n  test?:       () => void,                          //   …with this body\n  flow?:       FlowBuilder<any>,                    //   …or this chain\n  scenarios?:  Record<string, ScenarioConfig>,     // named, each gets own exec\n  setup?:      () => unknown,\n  teardown?:   (data) => void,\n});\n\nexport const options = lt.options;\nexport default lt.default;\nexport const { browse, write } = lt.scenarios; // when scenarios named\n```\n\n### `flow().step(...)`\n\n```ts\nflow()\n  .step(\"create\",  ()    => api.addPet(data.Pet()))   // Pet\n  .step(\"read\",    (pet) => api.getPetById(pet.id!))  // pet typed as Pet\n  .expect((pet) => pet.status === \"available\")\n  .step(\"delete\",  (pet) => api.deletePet(pet.id!))\n```\n\nEach step's return value flows into the next step's input with type inference. `expect()` records a failed check and aborts the chain when the predicate returns false.\n\n### Pace presets\n\n- `smoke({ vus, duration })` — CI sanity\n- `load({ target, rampUp, hold, rampDown })` — steady-state\n- `stress({ ceiling, step, perStep })` — climb to find the cliff\n- `spike({ baseline, peak, spikeDuration, recoverDuration })` — elasticity\n- `repro({ vus, duration })` — bug isolation under concurrency\n- `soak({ vus, duration })` — long flat run\n\n### `useAuth`\n\n```ts\nuseAuth.bearer({ env: \"API_TOKEN\" })\nuseAuth.basic({ user, pass })\nuseAuth.apiKey({ name: \"X-API-Key\", env: \"API_KEY\" })\nuseAuth.custom({ headers: () => ({ \"X-Trace\": traceId() }) })\n```\n\nMiddlewares are applied at request time by the generated client. Pass via `defineLoadTest({ use: [...] })`.\n\n### Budgets\n\n```ts\nbudgets: {\n  p95: \"500ms\",                   // → http_req_duration: ['p(95)<500']\n  p99: \"1.5s\",                    // → http_req_duration: ['p(99)<1500']\n  errors: \"1%\",                   // → http_req_failed:   ['rate<0.01']\n  ops: {\n    getPetById: { p95: \"100ms\" }, // → http_req_duration{operation:getPetById}: ['p(95)<100']\n    addPet:     { errors: \"0%\" },\n  },\n}\n```\n\nPer-op budgets resolve because the generated client tags every request with `{ operation: <opId> }`.\n\n## See also\n\n- [@ahmedrowaihi/k6-gen](../gen) — typed client generator\n- [@ahmedrowaihi/k6-tools](../tools) — CLI\n- [examples/k6-petstore](../../../examples/k6-petstore/) — end-to-end demo\n","readmeFilename":"README.md"}