Getting Started
- a GitHub monorepo — tests and code live in the same repository. Flakiness.io keys results by commit, so test results and the code that produced them must share the same git history.
- a GitHub Actions workflow that runs your tests.
- your first report visible on the Flakiness.io dashboard, with a GitHub check posted on new pull requests.
-
Sign in to Flakiness.io via GitHub.
Sign in -
Create an Organization.
Create Organization -
Install the Flakiness.io GitHub App. The App is the bridge between your repository and Flakiness.io: it grants read-only access to commit history and permission to post PR checks.
Install the GitHub App -
Create a Project inside the organization, linked to your GitHub repository.
-
Copy your
flakinessProjectidentifier. Open your project page on Flakiness.io; the URL looks likehttps://flakiness.io/<orgSlug>/<projectSlug>. Your identifier is that<orgSlug>/<projectSlug>pair — you’ll paste it into the reporter config in the next step. -
Upload test results from CI. Pick your runner — each tile shows the install, config, and CI integration you need.
Install the reporter:
Terminal window npm install -D @flakiness/playwrightAdd it to your config:
playwright.config.ts import { defineConfig } from '@playwright/test';export default defineConfig({reporter: [['@flakiness/playwright', {flakinessProject: 'my-org/my-app'}]],});Configure your CI:
Grant the
id-token: writepermission: Playwright Test supports GitHub OIDC and usesflakinessProjectfor secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: actions/setup-node@v4with:node-version: '20'- run: npm ci- run: npx playwright install --with-deps- run: npx playwright testFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Expose an access token via
FLAKINESS_ACCESS_TOKEN(from your project’s settings) and run your tests:Terminal window FLAKINESS_ACCESS_TOKEN=<token> npx playwright testSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
Install the reporter:
Terminal window uv add --dev pytest-flakiness# or: pip install pytest-flakinessThe reporter auto-activates once installed.
Configure your CI:
Grant the
id-token: writepermission and specify aFLAKINESS_PROJECTto upload the report to: Pytest supports Github OIDC for secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCenv:FLAKINESS_PROJECT: my-org/my-appsteps:- uses: actions/checkout@v4- uses: actions/setup-python@v5with:python-version: '3.12'- run: pip install -e '.[test]'- run: pytestFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Set
FLAKINESS_ACCESS_TOKEN(from your project’s settings) and run your tests:Terminal window FLAKINESS_ACCESS_TOKEN=<token> pytestSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
Install the reporter:
Terminal window npm install -D @flakiness/vitestAdd it to your config:
vitest.config.ts import { defineConfig } from 'vitest/config';import flakinessReporter from '@flakiness/vitest';export default defineConfig({test: {reporters: ['default', flakinessReporter({flakinessProject: 'my-org/my-app'})],},});Configure your CI:
Grant the
id-token: writepermission: Vitest supports GitHub OIDC and usesflakinessProjectfor secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: actions/setup-node@v4with:node-version: '20'- run: npm ci- run: npx vitest runFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Set
FLAKINESS_ACCESS_TOKEN(from your project’s settings) and run your tests:Terminal window FLAKINESS_ACCESS_TOKEN=<token> npx vitest runSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
Install the reporter:
Terminal window npm install -D @flakiness/jestAdd it to your config:
jest.config.ts import type { Config } from 'jest';const config: Config = {testLocationInResults: true,reporters: ['default',['@flakiness/jest', { flakinessProject: 'my-org/my-app' }],],};export default config;Configure your CI:
Grant the
id-token: writepermission: Jest supports GitHub OIDC and usesflakinessProjectfor secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: actions/setup-node@v4with:node-version: '20'- run: npm ci- run: npx jestFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Set
FLAKINESS_ACCESS_TOKEN(from your project’s settings) and run your tests:Terminal window FLAKINESS_ACCESS_TOKEN=<token> npx jestSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
Install the reporter:
Terminal window npm install -D @flakiness/cucumberjsAdd it to your config:
cucumber.mjs export default {default: {format: ['@flakiness/cucumberjs'],formatOptions: {flakinessProject: 'my-org/my-app',},},};Configure your CI:
Grant the
id-token: writepermission: CucumberJS supports GitHub OIDC and usesflakinessProjectfor secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: actions/setup-node@v4with:node-version: '20'- run: npm ci- run: npx cucumber-jsFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Set
FLAKINESS_ACCESS_TOKEN(from your project’s settings) and run your tests:Terminal window FLAKINESS_ACCESS_TOKEN=<token> npx cucumber-jsSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
bun testhas built-in JUnit XML output. Run it with--reporter=junit, then use the Flakiness CLI to convert and upload the report. See Ingesting JUnit XML for the full ingest flow.Configure your CI:
Grant the
id-token: writepermission: theflakiness uploadstep uses GitHub OIDC for secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: oven-sh/setup-bun@v2- run: bun install- run: bun test --reporter=junit --reporter-outfile=./junit.xml- name: Convert and upload to Flakiness.ioif: always()run: |curl -LsSf https://cli.flakiness.io/install.sh | shflakiness convert-junit ./junit.xml --category bun --project my-org/my-appflakiness upload ./flakiness-report/report.jsonFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Install the CLI, set
FLAKINESS_ACCESS_TOKEN(from your project’s settings), run your tests with the JUnit reporter, then convert and upload:Terminal window curl -LsSf https://cli.flakiness.io/install.sh | shbun test --reporter=junit --reporter-outfile=./junit.xmlflakiness convert-junit ./junit.xml --category bun --project my-org/my-appFLAKINESS_ACCESS_TOKEN=<token> flakiness upload ./flakiness-report/report.jsonSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
Rust doesn’t have a native Flakiness reporter. The simplest path is
cargo-nextest, a drop-incargo testreplacement that emits JUnit XML.Adopt
cargo-nextest. If your project doesn’t already use it, install it locally and switch your test command fromcargo testtocargo nextest run. See the nextest installation guide for the recommended install for your OS.Configure the
ciprofile to emit JUnit XML:.config/nextest.toml [profile.ci.junit]path = "junit.xml"Configure your CI:
Grant the
id-token: writepermission: theflakiness uploadstep uses GitHub OIDC for secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4- uses: dtolnay/rust-toolchain@stable- run: cargo nextest run --profile ci- name: Convert and upload to Flakiness.ioif: always()run: |curl -LsSf https://cli.flakiness.io/install.sh | shflakiness convert-junit ./target/nextest/ci/junit.xml --category rust --project my-org/my-appflakiness upload ./flakiness-report/report.jsonFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Install the CLI, set
FLAKINESS_ACCESS_TOKEN(from your project’s settings), run tests withcargo-nextest, then convert and upload:Terminal window curl -LsSf https://cli.flakiness.io/install.sh | shcargo nextest run --profile ciflakiness convert-junit ./target/nextest/ci/junit.xml --category rust --project my-org/my-appFLAKINESS_ACCESS_TOKEN=<token> flakiness upload ./flakiness-report/report.jsonSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
For runners without a native reporter, produce JUnit XML, then use the Flakiness CLI to convert and upload it. See Ingesting JUnit XML for the full ingest flow.
Configure your CI:
Grant the
id-token: writepermission: theflakiness uploadstep uses GitHub OIDC for secretless authentication..github/workflows/tests.yml jobs:test:runs-on: ubuntu-latestpermissions:contents: read # for actions/checkoutid-token: write # for Flakiness.io OIDCsteps:- uses: actions/checkout@v4# ... your existing test steps, producing JUnit XML in ./test-results ...- name: Convert and upload to Flakiness.ioif: always()run: |curl -LsSf https://cli.flakiness.io/install.sh | shflakiness convert-junit ./test-results --project my-org/my-appflakiness upload ./flakiness-report/report.jsonFor fork PRs or more advanced cases, see GitHub Actions Setup and GitHub Actions for Open Source Projects.
Install the CLI, set
FLAKINESS_ACCESS_TOKEN(from your project’s settings), run your tests, then convert and upload:Terminal window curl -LsSf https://cli.flakiness.io/install.sh | sh<your test command producing JUnit XML in ./test-results>flakiness convert-junit ./test-results --project my-org/my-appFLAKINESS_ACCESS_TOKEN=<token> flakiness upload ./flakiness-report/report.jsonSee CI Configuration (non-GitHub) for per-provider details (GitLab CI, CircleCI, Jenkins, etc.).
No official reporter for your runner? You have three options — see Custom Integration.
-
Push a commit and open the dashboard. Your first report should appear within seconds of the test job finishing.
Next steps
Section titled “Next steps”- Pull Requests & Regressions — interpret the PR check and decide mergeability.
- Slack Notifications — daily alerts on failures and regressions.
- Sharded Tests — configure CI matrix sharding.
- AI Agents — let Claude Code / Codex / Cursor investigate flaky tests.