FlowT is a flow-first automation testing CLI built on top of Playwright.
It is designed to help teams record real user journeys, reuse authentication safely, and run deterministic test sets in CI/CD — without introducing hidden state, magic configs, or brittle abstractions.
Record once. Run anywhere. Deploy with confidence.
Most automation frameworks focus on test cases. FlowT focuses on flows — real user journeys that matter in production.
FlowT gives you:
- ✅ Flow-based testing (one journey = one file)
- ✅ Domain-first organization (multi-env friendly)
- ✅ Secure auth reuse (CI-safe)
- ✅ Deterministic CI runs
- ✅ Interactive dev experience
- ✅ Zero vendor lock-in (pure Playwright)
A flow is a complete user journey:
- login
- checkout
- payout
- admin action
Each flow:
- lives in a single
.flow.spec.tsfile - is recorded using Playwright Codegen
- is easy to review, debug, and maintain
Flows and auth are grouped by domain, not by feature.
tests/
example.com/
login.flow.spec.ts
checkout.flow.spec.ts
This makes it trivial to:
- test multiple environments
- clone flows between domains
- reason about environment-specific behavior
Authentication is:
- recorded manually
- stored as Playwright
storageState - never auto-encrypted
- never auto-committed
You control:
- when to encrypt
- when to decrypt
- where auth is used
This makes FlowT safe for CI/CD by design.
npm install -g flowtOr via repository:
npm install
npm linkflowt init
flowt auth record admin-login https://example.com/login
flowt record checkout https://example.com --auth admin-login
flowt run-flow checkout --headedflowt initCreates:
.
├── playwright.config.ts
├── tests/
├── auth/ # gitignored
├── .env # FLOWT_KEY generated
├── .gitignore
auth/is runtime-only.envcontainsFLOWT_KEYused for encryption/decryption- Playwright is installed automatically if missing
flowt auth record admin-login https://example.com/loginCreates:
auth/
example.com/
admin-login/
auth.js
state.json
meta.json
flowt auth --list
# or
flowt list authflowt auth enc- Interactive selection
- Encrypted output stored in
auth_enc/auth_enc.json - Safe to commit
Optional:
flowt auth enc admin-login --removeFLOWT_KEY=your_key flowt auth decRestores decrypted auth into auth/ for execution.
flowt auth refresh example.com/admin-loginRe-runs the original login flow and updates the state.
flowt record checkout https://example.com --auth admin-loginCreates:
tests/example.com/
checkout.flow.spec.ts
checkout.flow.meta.json
Flow files:
- recorded using Playwright Codegen
- auto-prefixed with
FLOW: - ready to clean and stabilize
flowt flows --list
# or
flowt list flowsFilters:
flowt flows --critical
flowt flows --tags smoke,checkoutflowt run-flow checkoutOptions:
flowt run-flow checkout --headed
flowt run-flow checkout --project chromium
flowt run-flow checkout --auth admin-loginFlowT automatically finds the flow across all domains.
FlowT separates interactive development from deterministic deployment.
flowt run dev testWhat happens:
- Interactive flow selection (tree UI)
- Selected flows are executed
- Metadata saved to
runs/test.json
Used for:
- local testing
- defining CI test sets
flowt run deploy testWhat happens:
- Reads
runs/test.json - Executes the exact same flows
- No interaction
- No mutation
Used for:
- CI pipelines
- release gates
- production validation
runs/
test.json
Example:
{
"runName": "test",
"flows": [{ "domain": "example.com", "file": "checkout.flow.spec.ts" }]
}flowt clone staging.example.com prod.example.comWhat it does:
- copies flows
- copies auth (if present)
- rewrites all URLs
- preserves structure
Perfect for:
- staging → prod
- qa → uat
Generate dashboard:
flowt dashboardServe locally:
flowt dashboard --serveFeatures:
- all test runs
- pass/fail stats
- duration
- clickable Playwright reports
- live reload
flowt list auth
flowt list flows
flowt list runsNo logic — only visibility.
FlowT is CI-first by design.
- no recording in CI
- no interaction
- no plaintext auth committed
- deterministic execution
FLOWT_KEY=<same key used during auth enc>
name: FlowT CI
on:
push:
branches: [main, develop]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: "18"
- run: npm install
- run: npx playwright install --with-deps
- run: npm run build
- run: npm link
- name: Decrypt auth
env:
FLOWT_KEY: ${{ secrets.FLOWT_KEY }}
run: flowt auth dec
- name: Run tests
run: flowt run deploy test
- name: Upload reports
uses: actions/upload-artifact@v4
with:
name: flowt-test-reports
path: flowt_test/reports✅ Commit:
tests/**runs/*.jsonauth_enc/**playwright.config.ts
❌ Never commit:
auth/**- decrypted state
- credentials
flowt_test/
├── tests/
├── auth/ # gitignored
├── auth_enc/
├── runs/
├── reports/
├── playwright.config.ts
├── .env
- deterministic CI runs
- explicit auth lifecycle
- no hidden state
- no magic
- pure Playwright underneath
“Record flows like users behave. Run locally with freedom. Deploy with certainty.”
- GitHub: https://github.com/paneruvipin/flowt
- Playwright: https://playwright.dev