Browser support & performance
A dated record of the browsers and workloads tested with the React integration and Tungsten design.
Tested browsers
Verification date: . React 19.2.5.
| Browser / environment | Tested version | Result |
|---|---|---|
| Chromium | 156.0.8078.4 | 55/55 Passed |
| Google Chrome | 154.0.8037.59 | 55/55 Passed |
| Microsoft Edge | 155.0.4283.45 | 55/55 Passed |
| Firefox | 157.0 | 55/55 Passed |
| Playwright WebKit | 27.2 | 55/55 Passed |
| Mobile Chromium · Pixel 7 emulation | 156.0.8078.4 | 55/55 Passed |
| Mobile WebKit · iPhone 13 emulation | 27.2 | 55/55 Passed |
The browser suite runs the packaged React UI, worker and WASM core together. It covers each field family, validation and draft restore, all group layouts, nested repeaters, datasource retry, file uploads and diagnostics.
Mobile rows use device emulation. Playwright WebKit is an engine check, not a test of the Safari application or a physical iPhone. Only the listed versions have recorded results; minimum browser versions and other design packages are not established by this matrix.
Measured performance
Apple M4 Max · 48 GiB · macOS 27.0.1 · Chromium 156.0.8078.4
| Fields / visible controls | Ready, median (ms) | Committed edit, p95 (ms) |
|---|---|---|
| 10 | 133.4 | 1.4 |
| 25 | 136.5 | 1.2 |
| 50 | 136.5 | 1.6 |
| 100 | 138.9 | 1 |
| 250 | 148 | 1.2 |
These fixtures use 10–250 fully rendered fields with mixed input types, validation and a two-field dependency. Ready time is the median of five fresh form and worker starts after one warmup, excluding page download. Edit p95 uses 20 samples after five warmups and ends at the complete state callback after React commits; it does not wait for paint.
Routine operations
| Workload | Time (ms) | Measurement |
|---|---|---|
| Validation · 100 fields | 1.4 | p95 · 5 samples |
| Reset · 100 fields | 4.7 | p95 · 5 samples |
| Submission · 100 fields · local HTTP | 5.4 | p95 · 5 samples |
| Line items · 25 rows · adjacent reorder | 4.7 | p95 · 5 samples |
| Nested repeater · 10 parents · add child | 5.9 | p95 · 5 samples |
| API select · 250 options menu | 0.9 | p95 · 5 samples |
Routine operations use five samples after one warmup. Repeater timings use the actual UI controls, including host locking and completed state updates. Submission and lookup use local HTTP; production network latency and file transfer are excluded. These are representative fixtures, not statistics about production usage.
Stress tests and limits
Stress fixtures deliberately exceed routine form sizes. The 10,000-field forms, 1,000-parent nested reorder and 10,000-option lookup measure limits; they do not describe typical interactions. These checks still run in CI, and their complete results remain available below and in the raw report.
| Fields / visible controls | Ready (ms) | Committed edit, p95 (ms) |
|---|---|---|
| 1,000 | 164.9 | 2.4 |
| 10,000 | 870.8 | 22.1 |
Stress edits also change two fields and render no unrelated controls. Complete snapshots and browser layout still grow with total or visible content. Stress startup and structural/menu timings are individual observations; edit percentiles use 20 samples.
| Workload | Time (ms) | Measurement |
|---|---|---|
| Full validation · 10,000 values | 31.3 | p95 · 5 samples |
| Reset · 10,000 values | 125.2 | p95 · 5 samples |
| Submission · local HTTP | 43.4 | p95 · 5 samples |
| Nested repeater · parent reorder | 553.7 | One observation |
| API select · 10,000 options menu | 1.7 | One observation |
| Language switch · 10,000 visible fields | 65.4 | p95 · 5 samples |
The nested stress form has 1,000 parents, two children per parent and 10,000 visible fields; the reorder moves the last parent to the beginning. The large select keeps all 10,000 options in data and renders a bounded window. Whole-form validation/reset/submission use 10,000 values and 100 visible controls.
| Rule graph | Affected fields | Committed edit, p95 (ms) |
|---|---|---|
| Fan-out | 11 | 2.4 |
| Fan-out | 101 | 3.3 |
| Fan-out | 1,001 | 8.2 |
| Chain | 11 | 2.4 |
| Chain | 51 | 2.7 |
Dependency workloads contain 10,000 fields with 100 controls mounted and an explicitly increased processing budget. Growing affected graphs are measured separately from isolated edits.
Ten mount/unmount cycles left zero active workers. The raw report includes retained main-thread JavaScript heap after garbage collection; it does not measure total browser, worker or WASM memory or establish leak-free operation.
These numbers describe the recorded hardware, artifact and workload, not guaranteed response times. Production network latency and physical mobile performance require separate measurements.
Download the measurement snapshot (JSON)