Architecture

How Straden fits together.

A Laravel application packaged as one Docker image, deployed with Docker Compose as four Straden services plus PostgreSQL, Redis and InfluxDB. k6 generates the load; AI agents help you write scripts and explain the results.

ClientStraden serviceData storeExternal
Click a component to inspect it
STRADEN · DOCKER COMPOSEghcr.io/kwasii1/stradenCLIENTSEXTERNALvolume: storage (scripts · logs · repos)◐BrowserLivewire web UI⌘MCP clientIDE / AI assistantappFrankenPHP · CaddyreverbWebSocket serverrunnerHorizon · k6 v2.0.0schedulerschedule:workredisQueues and cachepostgresApplication databaseinfluxdbk6 time-series metrics✦AI providersLLM APIsGit providersGitHub, GitLab…◎ObservabilityMetrics and DBs◇Target systemYour API or site

Single image

Every Straden process ships in one image. The entrypoint reads STRADEN_ROLE and becomes the web server, websocket server, runner or scheduler.

k6 does the heavy lifting

Runs are real k6 processes on the runner. Straden writes the script to disk, passes TARGET_URL, captures the log and exports the summary.

Same-origin realtime

Caddy forwards /app/* to Reverb, so browsers connect to wss:// on the page’s own domain. No extra ports, no build-time websocket config.

Agents with real context

AI agents are given tools, not guesses: InfluxDB metrics, k6 logs, script files, cloned repositories and your Prometheus / database metrics.

Compose services

Self-hosting guide →
appstradenWeb UI + MCP server on FrankenPHP/Caddy. Terminates TLS, proxies WebSockets to Reverb, runs migrations on start.
reverbstradenWebSocket server for live run progress, streamed agent replies and notifications.
runnerstradenHorizon queue worker that executes k6 (v2.0.0), AI agent jobs and repository syncs.
schedulerstradenLaravel scheduler — checks running tests every 30 seconds and finalises them.
postgrespostgres:17-alpineApplication database.
redisredis:7-alpineQueues, cache and sessions.
influxdbinfluxdb:1.8Time-series store for every k6 metric sample.