This document describes the supported browser/wallet combinations for CarbonLedger, the automated test coverage for each combination, and any known incompatibilities.
| Browser | Wallet Extension | Status | Notes |
|---|---|---|---|
| Chrome | Freighter | ✅ Supported | Primary validation target for wallet connect and transaction flows. |
| Chrome | Xbull | ✅ Supported | Injected API shim mirrors the Xbull public surface. |
| Firefox | Freighter | ✅ Supported | Verified in CI via the Playwright browser matrix. |
| Firefox | Xbull | ✅ Supported | Verified in CI via the Playwright browser matrix. |
| Brave | Freighter | ✅ Supported | Run as Chromium with Brave's default privacy/fingerprinting flags enabled in tests. |
| Brave | Xbull | ✅ Supported | Same as Brave + Freighter — Chromium engine with Brave-specific launch flags. |
| Browser / Wallet | Reason |
|---|---|
| Safari | No browser extension support for Stellar wallets. Tracked in issue #650 if Safari support lands. |
| Mobile browsers | Extension injection is not supported on mobile. Mobile app support is a separate roadmap item. |
| Ledger hardware wallet | Hardware signing flow requires a dedicated e2e suite. Tracked in issue #651. |
Each supported browser/wallet combination is validated against three critical user flows:
| Flow | Description |
|---|---|
| Wallet connect | Page detects the injected extension, reads the public key, shows connected UI. |
| Credit purchase | Navigates marketplace → buy page, fills amount, confirms transaction. |
| Credit retirement | Navigates retire page, fills beneficiary and reason, confirms retirement. |
When a test fails, the CI report includes:
- Browser name (from
testInfo.project.name, e.g.firefox-xbull) - Browser engine version (from Playwright's device descriptor or channel)
- Extension name (
FreighterorXbull) - Extension version (hardcoded in the shim config — update when bumping the shim)
- Failure detail (attached as a JSON artifact under
compat-<browser>-<wallet>)
Example artifact content:
{
"browser": "firefox-xbull",
"browserVersion": "default",
"walletExtension": "Xbull",
"walletVersion": "0.9.0",
"publicKey": "GCBVQ4T7K6QTTJZ2ZQH...",
"outcome": "fail",
"failureDetail": "expect(heading).toBeVisible timeout",
"timestamp": "2026-07-27T10:00:00.000Z"
}The Playwright test suite runs in parallel across all six browser/wallet projects using
the matrix defined in frontend/playwright.config.ts.
browser-compatibility job
└── matrix: [chrome-freighter, chrome-xbull, firefox-freighter,
firefox-xbull, brave-freighter, brave-xbull]
Each shard runs: npx playwright test --project=<project-name>
The job uploads:
playwright-report/— HTML report artifact with screenshots and tracestest-results/junit.xml— JUnit XML parsed by GitHub Actions for inline annotationscompat-*.json— per-combination metadata attachments
| Combination | Issue | Workaround / Tracking |
|---|---|---|
| Brave × any wallet | Brave's --disable-blink-features=AutomationControlled flag may suppress some DOM events in very fast test runs. |
Use waitForLoadState('networkidle') before interacting with wallet UI. |
| Firefox × Freighter | Freighter's signTransaction occasionally resolves after 3–5 s in Firefox due to the extension's message-passing delay. |
CI retries are set to 2; Playwright's timeout per action is 15 s. |
If you encounter a new incompatibility, open an issue with the label browser-compat
and include the artifact JSON from the failing CI run.
The wallet API shim is defined in frontend/tests/e2e/wallet-compatibility.spec.ts
under WALLET_VARIANTS. When Freighter or Xbull ships a breaking API change:
- Update the
versionfield for the affected wallet. - Update the shim function body to match the new API surface.
- Run
npx playwright test --project=chrome-freighterlocally to verify. - Open a PR referencing this document.
cd frontend
# Install Playwright browsers (first time only)
npx playwright install --with-deps
# Run all browser/wallet combinations
npx playwright test tests/e2e/wallet-compatibility.spec.ts
# Run a specific combination (e.g. firefox × Xbull)
npx playwright test tests/e2e/wallet-compatibility.spec.ts --project=firefox-xbull
# Open the HTML report
npx playwright show-report