PGlite suite
Compare OPFS VFS with PGlite's OPFS AHP, IndexedDB, and memory-only backends using the same SQL workload.
Benchmarks
Measured execution times for OPFS VFS, PGlite OPFS AHP, IndexedDB, and in-memory storage. Results include the workload, configuration, and test environment.
Desktop and phone benchmarks
Results from a MacBook Pro with M5 Pro, a Mac Studio with M1 Max, and an iPhone 17 Pro. Values are medians; tables also show the observed minimum and maximum. Macs use five measured runs after an excluded warm-up. The iPhone uses three runs, with no excluded full-workload warm-up recorded and no exact source commit available.
Lower is faster. Both OPFS VFS buffer modes persist to disk. The optional memory-only reference does not. These compare complete systems; OS and browser versions differ.
Select a device to show results.
1st2nd3rd Lowest visible medians within each row.
Badges describe order, not statistical significance. Ranges are observed minimum–maximum, not confidence intervals. On the Studio Firefox SQL suite, VFS disk and IndexedDB are nearly tied and their ranges overlap.
Scroll the table to compare all backends.
| Browser / device | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | Memory-only reference |
|---|---|---|---|---|---|
| ChromeM5 Pro · 5 runs | 2,026.98 2nd1st2,010.32 – 2,058.47 | 2,421 2,387.56 – 2,441.2 | 2,101.34 3rd2nd2,086.14 – 2,132.23 | 2,315.21 3rd2,276.84 – 2,321.01 | 1,884.35 1st1,871.5 – 1,888.29 |
| ChromeM1 Max · 5 runs | 3,468.13 2nd1st3,450.24 – 3,495.49 | 4,094.75 4,028.1 – 4,110.55 | 3,744.55 3rd2nd3,707.83 – 3,780.59 | 3,780.04 3rd3,663.11 – 3,798.74 | 3,113.69 1st3,104.83 – 3,150.21 |
| SafariM5 Pro · 5 runs | 1,711.56 2nd1st1,694.04 – 1,733.56 | 1,840.02 3rd2nd1,819.96 – 1,848.56 | File-handle issue | 2,923.02 3rd2,862.16 – 2,925.44 | 1,525.2 1st1,508.18 – 1,536.12 |
| SafariM1 Max · 5 runs | 3,329.1 2nd1st3,309.22 – 3,371.82 | 3,549.28 3rd2nd3,539.86 – 3,587.48 | File-handle issue | 4,867.76 3rd4,775.94 – 4,905.32 | 2,817.66 1st2,785.5 – 2,844.48 |
| SafariiPhone · 3 runs | 2,101.38 3rd2nd2,027.12 – 2,263.52 | 2,327.72 3rd2,327.28 – 2,432.44 | 2,075.8 2nd1st2,044.88 – 2,102.34 | 4,063.26 3,932.76 – 4,165.98 | 1,960.38 1st1,943.4 – 2,650.9 |
| FirefoxM5 Pro · 5 runs | 2,786.28 2nd1st2,769.72 – 2,805.42 | 3,306.38 3rd3,297.64 – 3,375.26 | 4,386.72 4,363.3 – 4,435.86 | 2,915.62 3rd2nd2,899.62 – 2,941.2 | 1,933.92 1st1,932.84 – 1,980.54 |
| FirefoxM1 Max · 5 runs | 5,154.52 2nd1st5,114.84 – 5,349.88 | 6,189.52 3rd6,090.5 – 6,262.02 | 7,477.88 7,366.48 – 7,568.24 | 5,181.7 3rd2nd5,106.06 – 5,187.42 | 3,654.86 1st3,638.54 – 3,677.38 |
Mac Safari AHP timings are unavailable. Missing results are excluded from rankings.
1st2nd3rd Lowest visible medians within each row.
Badges describe order, not statistical significance. Ranges are observed minimum–maximum, not confidence intervals. On the Studio Firefox SQL suite, VFS disk and IndexedDB are nearly tied and their ranges overlap.
Scroll the table to compare all backends.
| Browser / device | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | Memory-only reference |
|---|---|---|---|---|---|
| ChromeM5 Pro · 5 runs | 21.52 2nd1st21.5 – 22.31 | 34.26 3rd33.44 – 37.94 | 23.49 3rd2nd23.08 – 24.14 | 51.63 51.44 – 54.46 | 18.89 1st17.81 – 19.98 |
| ChromeM1 Max · 5 runs | 33.84 2nd1st33.69 – 34.06 | 58.34 3rd57.66 – 58.66 | 36.36 3rd2nd34.32 – 36.54 | 80.16 79.92 – 81.6 | 28.11 1st26 – 28.53 |
| SafariM5 Pro · 5 runs | 16.78 2nd1st16.4 – 17.02 | 22.52 3rd2nd22.06 – 23.04 | File-handle issue | 129.64 3rd126.16 – 141.44 | 14.72 1st14.7 – 15.56 |
| SafariM1 Max · 5 runs | 27.38 2nd1st26.74 – 27.98 | 36.2 3rd2nd35.26 – 38.9 | File-handle issue | 184.2 3rd177.24 – 192.46 | 23.9 1st23.4 – 24.74 |
| SafariiPhone · 3 runs | 19.34 2nd1st17.9 – 20.1 | 28.72 3rd25.1 – 68.58 | 21.84 3rd2nd19.96 – 22.32 | 155.64 151.04 – 164.12 | 16.08 1st15.36 – 23.24 |
| FirefoxM5 Pro · 5 runs | 23.94 2nd1st22.84 – 24.22 | 40.42 3rd39.92 – 44.5 | 30.26 3rd2nd29.72 – 59.72 | 68.94 68.48 – 69.84 | 16.14 1st15.9 – 17.18 |
| FirefoxM1 Max · 5 runs | 37.52 2nd1st36.94 – 39.32 | 70 3rd66.42 – 70.84 | 47.2 3rd2nd46.2 – 50.46 | 108.72 107.4 – 109.26 | 26.72 1st25.6 – 26.94 |
Mac Safari AHP timings are unavailable. Missing results are excluded from rankings.
Both Macs have 64 GB RAM and ran plugged in with extensions off. The MacBook used High Power mode. Versions differ, so these results do not isolate chip performance.
macOS 26.6.2 · 64 GB RAM
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 528.72525.61 – 535.49 | 481.16479.19 – 486.99 | <0.010.00 – <0.01 | 36.5436.00 – 38.55 |
| OPFS VFS · memory buffer | 532.71523.35 – 534.34 | 919.94914.89 – 955.52 | <0.01<0.01 – <0.01 | 50.8949.45 – 52.01 |
| PGlite OPFS AHP | 532.04526.19 – 537.01 | 661.25644.15 – 665.32 | <0.01<0.01 – <0.01 | 125.29121.00 – 129.37 |
| PGlite IndexedDB | 534.60525.22 – 538.83 | 485.63476.42 – 495.69 | 8.778.52 – 9.49 | 368.96366.97 – 371.65 |
| PGlite memory · nonpersistent | 532.39523.28 – 532.75 | 361.39355.55 – 370.01 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 525.68521.49 – 532.00 | 484.92480.82 – 521.79 | <0.01<0.01 – <0.01 | 44.4636.88 – 45.37 |
| OPFS VFS · memory buffer | 524.40518.25 – 561.11 | 920.88912.90 – 923.89 | <0.01<0.01 – 0.01 | 45.3842.96 – 45.96 |
| PGlite OPFS AHP | 525.78521.97 – 534.50 | 652.55621.95 – 661.24 | <0.01<0.01 – <0.01 | 109.50109.01 – 111.73 |
| PGlite IndexedDB | 531.87517.25 – 533.59 | 477.56466.72 – 486.69 | 9.899.26 – 14.01 | 117.48110.24 – 119.74 |
| PGlite memory · nonpersistent | 522.46516.65 – 529.18 | 361.69356.27 – 364.44 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 14.3213.04 – 14.41 | 19.5518.28 – 21.11 | 14.9413.95 – 15.33 | 34.4633.44 – 36.99 | 12.6811.43 – 13.13 |
| 2. 25,000 INSERTs in a transaction | 156.11155.06 – 160.14 | 175.92172.95 – 179.13 | 161.11155.44 – 164.75 | 179.84176.89 – 182.77 | 154.17150.43 – 156.02 |
| 3. 25,000 INSERTs into an indexed table | 192.25189.80 – 193.86 | 233.32231.45 – 235.12 | 197.32188.44 – 199.65 | 216.30212.19 – 217.69 | 181.95180.34 – 182.35 |
| 4. 100 SELECTs without an index | 116.09113.46 – 117.37 | 118.43114.28 – 119.36 | 114.11112.07 – 118.47 | 124.17121.29 – 129.70 | 117.64115.39 – 121.63 |
| 5. 100 SELECTs with string comparisons | 272.20268.82 – 274.91 | 275.86265.74 – 277.22 | 271.64267.15 – 273.35 | 281.32276.50 – 291.44 | 275.30273.77 – 281.02 |
| 6. Create indexes | 24.5222.66 – 27.13 | 106.19103.63 – 111.52 | 28.3827.01 – 30.88 | 65.6564.11 – 65.82 | 22.2421.12 – 24.68 |
| 7. 5,000 SELECTs with an index | 117.14116.45 – 118.29 | 106.04104.10 – 107.05 | 120.76119.85 – 123.36 | 114.59113.73 – 116.24 | 104.17103.46 – 105.97 |
| 8. 1,000 UPDATEs without an index | 60.4560.03 – 61.97 | 64.5562.29 – 66.00 | 62.6762.45 – 64.25 | 76.9475.50 – 77.24 | 59.8158.73 – 62.40 |
| 9. 25,000 UPDATEs with an index | 348.68346.11 – 381.55 | 381.92375.09 – 383.71 | 388.19378.81 – 391.19 | 339.34334.75 – 342.19 | 310.17308.49 – 311.14 |
| 10. 25,000 text UPDATEs with an index | 473.69471.49 – 481.44 | 565.15564.19 – 579.76 | 500.63498.45 – 510.61 | 472.00466.63 – 476.19 | 422.81417.97 – 426.00 |
| 11. INSERT from SELECT | 76.9676.16 – 78.11 | 114.06113.36 – 121.71 | 75.9174.34 – 76.00 | 98.9096.66 – 99.87 | 64.2863.93 – 65.01 |
| 12. DELETE without an index | 9.008.54 – 9.65 | 11.2710.76 – 12.01 | 8.448.26 – 8.69 | 35.5934.37 – 37.70 | 7.797.55 – 8.00 |
| 13. DELETE with an index | 11.6511.52 – 12.10 | 16.9916.83 – 17.31 | 11.6111.22 – 11.72 | 39.1838.78 – 41.42 | 10.5010.32 – 10.86 |
| 14. Large INSERT after DELETE | 72.3572.16 – 73.30 | 136.47134.19 – 147.69 | 74.9374.81 – 78.89 | 110.40108.25 – 114.38 | 64.7263.90 – 66.49 |
| 15. DELETE followed by 12,000 INSERTs | 72.8571.04 – 73.87 | 81.4080.86 – 82.02 | 72.0169.33 – 73.15 | 94.6090.44 – 96.88 | 69.6068.72 – 71.91 |
| 16. DROP tables | 3.473.22 – 3.86 | 6.215.05 – 6.34 | 5.425.04 – 5.85 | 23.5123.03 – 26.61 | 2.021.89 – 2.13 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 9.868.86 – 11.31 | 6.876.38 – 7.85 |
| Create | 2.632.58 – 2.85 | 11.4411.02 – 16.43 |
| Write | 10.4710.00 – 11.80 | 10.7210.56 – 10.81 |
| Read | 7.066.91 – 7.16 | 6.276.07 – 6.71 |
| Rename | 4.404.32 – 4.49 | 16.0615.40 – 16.19 |
| Delete | 0.990.97 – 1.30 | 4.974.69 – 5.13 |
| Flush | 3.633.35 – 4.36 | 10.099.56 – 10.30 |
| Reopen | 3.863.75 – 4.00 | 4.464.35 – 4.54 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 556.32548.94 – 576.56 | 442.22437.12 – 455.28 | 0.000.00 – 0.00 | 38.8636.98 – 39.36 |
| OPFS VFS · memory buffer | 574.22564.88 – 583.76 | 678.86662.84 – 687.70 | 0.020.00 – 0.02 | 45.5444.58 – 48.26 |
| PGlite OPFS AHP | File-handle issue | File-handle issue | File-handle issue | File-handle issue |
| PGlite IndexedDB | 564.54555.16 – 577.66 | 564.60549.82 – 571.18 | 56.8254.82 – 57.56 | 512.38501.28 – 519.62 |
| PGlite memory · nonpersistent | 560.70560.20 – 563.78 | 343.84342.92 – 350.00 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 554.24532.62 – 570.06 | 440.72436.34 – 452.88 | 0.020.02 – 0.02 | 38.8234.52 – 40.52 |
| OPFS VFS · memory buffer | 556.68552.12 – 565.80 | 681.48664.14 – 693.56 | 0.000.00 – 0.02 | 49.8448.34 – 52.42 |
| PGlite OPFS AHP | File-handle issue | File-handle issue | File-handle issue | File-handle issue |
| PGlite IndexedDB | 553.06544.84 – 562.20 | 565.50556.18 – 585.28 | 30.4229.90 – 40.46 | 186.62184.78 – 193.16 |
| PGlite memory · nonpersistent | 564.08555.16 – 570.00 | 341.60339.34 – 360.30 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 11.2410.56 – 11.46 | 14.5814.26 – 15.14 | File-handle issue | 88.3287.94 – 93.94 | 10.109.74 – 10.10 |
| 2. 25,000 INSERTs in a transaction | 127.86125.38 – 128.30 | 136.68135.50 – 138.36 | File-handle issue | 204.08200.58 – 208.48 | 123.12122.46 – 124.94 |
| 3. 25,000 INSERTs into an indexed table | 153.84150.62 – 155.50 | 175.08173.80 – 176.00 | File-handle issue | 224.32220.00 – 226.80 | 144.68141.22 – 146.26 |
| 4. 100 SELECTs without an index | 89.3688.38 – 92.36 | 90.8487.90 – 94.84 | File-handle issue | 122.44121.62 – 123.66 | 89.7887.68 – 92.28 |
| 5. 100 SELECTs with string comparisons | 222.18220.26 – 232.92 | 227.36217.82 – 233.98 | File-handle issue | 258.68254.54 – 269.68 | 228.80222.94 – 229.74 |
| 6. Create indexes | 18.8818.60 – 22.14 | 57.6256.98 – 57.98 | File-handle issue | 120.86117.82 – 126.38 | 17.9015.36 – 19.92 |
| 7. 5,000 SELECTs with an index | 97.8295.58 – 98.48 | 89.9289.36 – 91.94 | File-handle issue | 128.64126.74 – 133.22 | 87.0886.26 – 87.20 |
| 8. 1,000 UPDATEs without an index | 45.9845.40 – 47.36 | 50.3650.06 – 51.00 | File-handle issue | 126.68124.32 – 133.44 | 45.6645.08 – 46.50 |
| 9. 25,000 UPDATEs with an index | 313.60308.06 – 317.94 | 286.40281.98 – 290.00 | File-handle issue | 343.10340.38 – 354.88 | 249.60247.16 – 253.06 |
| 10. 25,000 text UPDATEs with an index | 433.60427.38 – 443.28 | 418.68414.82 – 426.52 | File-handle issue | 473.56458.16 – 481.12 | 349.58342.40 – 356.00 |
| 11. INSERT from SELECT | 58.8858.64 – 60.42 | 87.4886.66 – 87.90 | File-handle issue | 166.56163.04 – 167.80 | 53.3252.68 – 55.46 |
| 12. DELETE without an index | 6.926.82 – 7.20 | 8.348.16 – 8.52 | File-handle issue | 93.0691.46 – 95.92 | 6.966.80 – 7.06 |
| 13. DELETE with an index | 9.349.08 – 9.44 | 13.1613.04 – 13.24 | File-handle issue | 93.7893.38 – 96.90 | 8.988.94 – 9.32 |
| 14. Large INSERT after DELETE | 56.6656.34 – 57.14 | 110.54109.40 – 112.22 | File-handle issue | 197.20190.40 – 209.62 | 52.3447.68 – 54.30 |
| 15. DELETE followed by 12,000 INSERTs | 57.5656.88 – 58.94 | 65.9664.18 – 67.50 | File-handle issue | 163.36156.08 – 165.88 | 57.7455.74 – 59.50 |
| 16. DROP tables | 2.322.28 – 2.50 | 3.063.00 – 3.14 | File-handle issue | 99.8892.88 – 101.36 | 1.741.60 – 1.84 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 4.083.94 – 4.22 | 3.463.44 – 3.54 |
| Create | 2.562.34 – 2.92 | 7.767.60 – 7.88 |
| Write | 7.527.32 – 7.86 | 8.508.44 – 9.14 |
| Read | 7.306.80 – 7.52 | 5.645.46 – 5.74 |
| Rename | 4.744.72 – 4.94 | 10.9810.78 – 12.56 |
| Delete | 1.061.04 – 1.10 | 2.722.70 – 3.10 |
| Flush | 2.142.04 – 2.16 | 5.365.34 – 5.78 |
| Reopen | 3.723.64 – 3.78 | 3.743.72 – 3.96 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 445.18444.70 – 447.80 | 767.22761.62 – 792.14 | 0.000.00 – 0.02 | 59.1458.48 – 59.98 |
| OPFS VFS · memory buffer | 448.54446.68 – 449.64 | 1,652.461,643.80 – 1,656.82 | 0.000.00 – 0.02 | 73.3272.00 – 74.08 |
| PGlite OPFS AHP | 444.88442.70 – 450.82 | 1,543.081,539.34 – 1,580.38 | 0.000.00 – 0.02 | 358.94356.80 – 366.76 |
| PGlite IndexedDB | 447.98442.42 – 450.68 | 526.58526.52 – 528.68 | 4.144.12 – 4.22 | 648.98645.14 – 666.06 |
| PGlite memory · nonpersistent | 448.10445.96 – 454.04 | 366.94365.20 – 373.78 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 442.58440.72 – 458.00 | 773.68768.86 – 778.72 | 0.000.00 – 0.02 | 52.5651.66 – 54.02 |
| OPFS VFS · memory buffer | 443.20436.68 – 448.82 | 1,649.701,640.52 – 1,668.60 | 0.000.00 – 0.02 | 70.0469.18 – 72.86 |
| PGlite OPFS AHP | 438.08436.54 – 448.30 | 1,550.601,499.46 – 1,729.50 | 0.000.00 – 0.02 | 358.74344.58 – 415.74 |
| PGlite IndexedDB | 439.48434.00 – 440.68 | 522.50522.00 – 526.48 | 3.703.66 – 3.76 | 165.16162.22 – 166.94 |
| PGlite memory · nonpersistent | 438.74435.86 – 441.20 | 369.12365.38 – 374.38 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 10.7610.54 – 10.82 | 12.9212.80 – 13.08 | 13.6413.28 – 13.74 | 55.2254.78 – 56.06 | 10.1010.04 – 10.16 |
| 2. 25,000 INSERTs in a transaction | 187.78185.08 – 188.66 | 225.28221.70 – 226.36 | 193.82192.50 – 194.90 | 231.84231.66 – 232.46 | 176.14173.00 – 178.00 |
| 3. 25,000 INSERTs into an indexed table | 233.52230.46 – 237.46 | 307.14304.36 – 346.18 | 236.50235.88 – 260.80 | 276.38274.58 – 280.96 | 199.84195.92 – 204.90 |
| 4. 100 SELECTs without an index | 96.4296.18 – 96.94 | 95.9895.54 – 96.54 | 98.8498.58 – 99.20 | 101.88101.28 – 105.36 | 96.3694.88 – 96.72 |
| 5. 100 SELECTs with string comparisons | 265.84264.72 – 268.06 | 263.70261.20 – 268.06 | 267.64263.36 – 270.12 | 269.30264.62 – 276.28 | 265.46260.66 – 268.96 |
| 6. Create indexes | 81.2680.92 – 83.34 | 246.78236.44 – 247.82 | 90.2889.94 – 110.68 | 121.56120.22 – 123.66 | 21.4421.06 – 21.84 |
| 7. 5,000 SELECTs with an index | 129.18126.90 – 130.68 | 106.88103.76 – 109.20 | 295.46289.98 – 303.36 | 111.94111.04 – 113.52 | 103.78102.56 – 107.72 |
| 8. 1,000 UPDATEs without an index | 51.1049.82 – 53.74 | 52.5451.98 – 55.32 | 73.5271.56 – 79.70 | 94.1493.68 – 100.44 | 48.8848.52 – 49.98 |
| 9. 25,000 UPDATEs with an index | 555.92544.96 – 572.20 | 485.94483.24 – 492.28 | 1,270.921,269.68 – 1,292.76 | 412.82409.40 – 415.04 | 343.80339.46 – 348.52 |
| 10. 25,000 text UPDATEs with an index | 809.06805.94 – 820.38 | 785.20778.44 – 804.76 | 1,455.081,448.00 – 1,508.26 | 583.08576.84 – 584.88 | 462.12460.14 – 466.40 |
| 11. INSERT from SELECT | 113.80113.00 – 116.92 | 216.12214.12 – 229.54 | 113.06112.20 – 115.76 | 149.76148.72 – 150.36 | 62.7862.16 – 74.90 |
| 12. DELETE without an index | 7.687.60 – 8.12 | 11.9611.60 – 12.70 | 7.947.66 – 8.28 | 60.4059.30 – 61.68 | 7.507.42 – 7.86 |
| 13. DELETE with an index | 10.7810.46 – 10.80 | 23.9223.70 – 24.20 | 10.6210.42 – 10.78 | 63.6462.90 – 66.78 | 10.2210.02 – 10.54 |
| 14. Large INSERT after DELETE | 150.14149.18 – 150.64 | 361.28359.14 – 367.92 | 155.32154.78 – 157.38 | 204.84204.24 – 206.68 | 61.0259.54 – 65.06 |
| 15. DELETE followed by 12,000 INSERTs | 77.3475.60 – 80.68 | 104.42103.64 – 106.26 | 77.1275.76 – 79.02 | 126.70126.22 – 127.86 | 69.8869.56 – 71.44 |
| 16. DROP tables | 2.081.98 – 2.18 | 4.163.58 – 4.28 | 9.169.00 – 9.42 | 50.4450.02 – 52.08 | 1.041.04 – 1.16 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 8.948.78 – 9.06 | 6.986.86 – 7.44 |
| Create | 3.523.42 – 3.60 | 41.0640.76 – 41.68 |
| Write | 64.4862.78 – 65.28 | 45.9445.00 – 46.60 |
| Read | 15.1814.50 – 15.22 | 3.663.64 – 3.78 |
| Rename | 5.124.96 – 5.40 | 45.9245.10 – 46.50 |
| Delete | 0.980.94 – 1.02 | 19.4619.10 – 19.54 |
| Flush | 2.302.22 – 2.40 | 38.8438.58 – 38.96 |
| Reopen | 4.884.80 – 5.02 | 9.809.42 – 10.06 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
macOS 26.5.2 · 64 GB RAM
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 781.88768.16 – 793.13 | 772.16754.13 – 778.63 | <0.01<0.01 – 0.01 | 55.0452.30 – 55.45 |
| OPFS VFS · memory buffer | 777.78765.67 – 789.44 | 1,481.371,445.49 – 1,498.91 | <0.01<0.01 – <0.01 | 76.4975.62 – 81.83 |
| PGlite OPFS AHP | 782.26769.26 – 790.49 | 983.81973.56 – 1,072.13 | <0.01<0.01 – 0.01 | 170.83166.93 – 174.87 |
| PGlite IndexedDB | 774.72773.48 – 779.97 | 713.51702.69 – 719.63 | 14.8014.61 – 16.95 | 551.93550.49 – 556.37 |
| PGlite memory · nonpersistent | 778.11763.63 – 790.51 | 537.48530.56 – 538.40 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 765.79761.98 – 773.85 | 750.30738.63 – 779.63 | <0.01<0.01 – 0.02 | 51.8849.57 – 55.56 |
| OPFS VFS · memory buffer | 765.29756.40 – 778.34 | 1,478.631,458.82 – 1,481.01 | <0.01<0.01 – 0.01 | 65.7761.98 – 66.51 |
| PGlite OPFS AHP | 773.22765.33 – 783.05 | 988.15971.35 – 1,001.76 | <0.01<0.01 – 0.01 | 154.42152.88 – 165.20 |
| PGlite IndexedDB | 767.10758.63 – 790.12 | 732.89707.78 – 736.73 | 16.2415.85 – 17.10 | 180.24178.31 – 183.55 |
| PGlite memory · nonpersistent | 774.50768.33 – 792.80 | 553.47538.69 – 557.74 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 26.1825.20 – 28.12 | 31.1330.27 – 33.65 | 23.5923.36 – 23.80 | 53.3552.72 – 53.56 | 19.2718.64 – 22.71 |
| 2. 25,000 INSERTs in a transaction | 268.70264.24 – 276.64 | 302.87297.43 – 311.56 | 269.18267.11 – 288.11 | 295.95293.35 – 302.29 | 255.97251.03 – 258.06 |
| 3. 25,000 INSERTs into an indexed table | 328.24325.29 – 335.86 | 400.57391.88 – 407.01 | 333.70329.65 – 340.03 | 357.03347.93 – 366.64 | 305.72303.94 – 306.26 |
| 4. 100 SELECTs without an index | 185.67184.90 – 187.32 | 188.08185.99 – 190.14 | 186.74186.50 – 192.50 | 201.37200.48 – 203.11 | 184.75183.33 – 186.90 |
| 5. 100 SELECTs with string comparisons | 453.82451.49 – 455.28 | 453.57452.36 – 454.38 | 451.67450.71 – 455.77 | 468.82467.86 – 470.07 | 452.41449.48 – 453.07 |
| 6. Create indexes | 39.0638.04 – 39.84 | 168.96167.01 – 169.86 | 50.9050.60 – 53.14 | 89.5688.22 – 90.41 | 31.6131.06 – 31.72 |
| 7. 5,000 SELECTs with an index | 207.11204.19 – 208.12 | 189.86186.94 – 190.86 | 225.83225.20 – 227.35 | 192.72190.03 – 198.66 | 175.11172.89 – 181.16 |
| 8. 1,000 UPDATEs without an index | 95.8295.12 – 96.00 | 100.3197.99 – 101.82 | 98.7398.34 – 99.13 | 119.46118.63 – 119.87 | 91.5991.44 – 91.76 |
| 9. 25,000 UPDATEs with an index | 642.26632.57 – 656.59 | 686.69672.34 – 687.62 | 762.37750.88 – 763.85 | 606.03558.14 – 610.79 | 555.06547.74 – 568.64 |
| 10. 25,000 text UPDATEs with an index | 827.07822.27 – 836.36 | 966.85954.67 – 975.71 | 928.73922.85 – 940.57 | 784.12734.61 – 793.05 | 710.18705.59 – 729.07 |
| 11. INSERT from SELECT | 122.30116.95 – 125.35 | 186.06185.06 – 201.17 | 117.33115.49 – 134.44 | 145.93141.57 – 147.51 | 96.9194.90 – 97.79 |
| 12. DELETE without an index | 14.3514.02 – 14.80 | 18.9618.14 – 20.40 | 13.2013.07 – 13.54 | 53.2152.66 – 56.84 | 12.4112.02 – 12.51 |
| 13. DELETE with an index | 17.2917.02 – 17.39 | 25.1323.96 – 25.37 | 16.5116.02 – 17.00 | 56.8456.53 – 57.39 | 14.8814.66 – 15.08 |
| 14. Large INSERT after DELETE | 118.50116.10 – 119.55 | 219.85214.76 – 229.02 | 126.62124.20 – 127.63 | 161.39160.93 – 164.55 | 95.2292.97 – 95.77 |
| 15. DELETE followed by 12,000 INSERTs | 119.57117.25 – 120.50 | 138.64132.03 – 141.25 | 120.00118.81 – 121.22 | 150.91149.11 – 153.47 | 114.56112.93 – 115.21 |
| 16. DROP tables | 5.685.22 – 6.26 | 10.858.44 – 12.73 | 8.577.76 – 19.66 | 36.2735.54 – 37.21 | 3.142.87 – 3.40 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 12.8912.11 – 13.91 | 10.409.82 – 12.45 |
| Create | 4.174.01 – 4.28 | 22.6022.08 – 23.32 |
| Write | 21.3220.92 – 22.64 | 20.5119.59 – 21.90 |
| Read | 12.3812.16 – 12.54 | 10.9210.00 – 11.31 |
| Rename | 7.216.73 – 7.38 | 31.7731.25 – 34.16 |
| Delete | 1.491.43 – 1.67 | 10.3710.27 – 10.85 |
| Flush | 6.506.13 – 7.08 | 20.5119.31 – 20.83 |
| Reopen | 4.884.63 – 5.25 | 6.665.86 – 6.68 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 863.62858.00 – 878.14 | 757.80754.60 – 846.62 | 0.020.00 – 0.02 | 61.6458.60 – 63.00 |
| OPFS VFS · memory buffer | 888.38858.46 – 907.52 | 1,181.421,176.76 – 1,380.94 | 0.020.00 – 0.04 | 77.0074.14 – 83.02 |
| PGlite OPFS AHP | File-handle issue | File-handle issue | File-handle issue | File-handle issue |
| PGlite IndexedDB | 880.60865.54 – 896.38 | 908.56896.02 – 925.92 | 80.4678.52 – 85.60 | 770.16767.38 – 791.80 |
| PGlite memory · nonpersistent | 870.30856.96 – 879.56 | 546.28544.28 – 549.90 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 856.14849.58 – 868.84 | 756.32749.60 – 761.42 | 0.020.00 – 0.02 | 57.3254.50 – 65.50 |
| OPFS VFS · memory buffer | 858.72849.36 – 867.18 | 1,194.501,167.52 – 1,243.78 | 0.020.00 – 0.02 | 74.6866.40 – 78.86 |
| PGlite OPFS AHP | File-handle issue | File-handle issue | File-handle issue | File-handle issue |
| PGlite IndexedDB | 870.58845.22 – 902.08 | 906.00901.80 – 955.84 | 42.8641.58 – 44.08 | 262.62253.84 – 290.42 |
| PGlite memory · nonpersistent | 867.28851.72 – 872.28 | 550.54543.10 – 560.38 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 22.3420.52 – 23.56 | 24.8023.86 – 26.54 | File-handle issue | 132.10129.76 – 136.20 | 26.0025.80 – 26.92 |
| 2. 25,000 INSERTs in a transaction | 242.80236.50 – 245.88 | 261.10259.66 – 273.66 | File-handle issue | 335.44327.94 – 340.26 | 233.62227.82 – 237.98 |
| 3. 25,000 INSERTs into an indexed table | 302.16298.82 – 307.36 | 343.42340.06 – 374.50 | File-handle issue | 396.20392.52 – 405.52 | 285.34281.98 – 286.54 |
| 4. 100 SELECTs without an index | 150.98149.74 – 155.66 | 156.10150.44 – 161.66 | File-handle issue | 199.24196.96 – 201.32 | 150.18149.52 – 154.98 |
| 5. 100 SELECTs with string comparisons | 367.42363.84 – 377.58 | 365.92363.46 – 369.00 | File-handle issue | 416.30409.60 – 419.44 | 365.92362.32 – 370.92 |
| 6. Create indexes | 29.6028.92 – 29.96 | 102.8096.74 – 154.20 | File-handle issue | 188.50180.76 – 191.54 | 31.5431.06 – 32.04 |
| 7. 5,000 SELECTs with an index | 195.14191.20 – 196.52 | 178.24177.94 – 184.00 | File-handle issue | 228.58224.20 – 230.20 | 175.18170.62 – 176.96 |
| 8. 1,000 UPDATEs without an index | 83.4277.80 – 86.02 | 80.6477.46 – 81.20 | File-handle issue | 193.12187.54 – 196.90 | 80.4678.40 – 82.66 |
| 9. 25,000 UPDATEs with an index | 676.60665.62 – 691.64 | 636.68617.00 – 643.00 | File-handle issue | 648.74641.74 – 680.46 | 507.98494.52 – 518.86 |
| 10. 25,000 text UPDATEs with an index | 908.52907.96 – 921.98 | 883.60864.30 – 886.74 | File-handle issue | 878.98851.60 – 901.16 | 669.70651.16 – 686.00 |
| 11. INSERT from SELECT | 105.46104.78 – 108.14 | 155.04151.96 – 158.68 | File-handle issue | 252.18246.46 – 254.16 | 85.2084.02 – 89.76 |
| 12. DELETE without an index | 11.2011.02 – 11.22 | 13.2413.06 – 13.56 | File-handle issue | 143.68137.96 – 148.36 | 10.5410.38 – 10.62 |
| 13. DELETE with an index | 14.4614.32 – 14.62 | 20.7220.16 – 20.86 | File-handle issue | 144.44138.46 – 147.74 | 13.0812.96 – 13.98 |
| 14. Large INSERT after DELETE | 104.80100.04 – 113.14 | 193.74192.36 – 215.00 | File-handle issue | 299.36295.02 – 304.12 | 78.4877.24 – 80.32 |
| 15. DELETE followed by 12,000 INSERTs | 108.14107.38 – 110.88 | 120.90118.44 – 121.54 | File-handle issue | 253.32248.20 – 256.24 | 100.3499.00 – 101.84 |
| 16. DROP tables | 4.204.04 – 4.80 | 5.145.02 – 5.24 | File-handle issue | 145.42142.66 – 147.42 | 2.782.56 – 3.06 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 7.207.04 – 14.70 | 5.885.72 – 9.34 |
| Create | 4.003.96 – 4.40 | 16.2815.20 – 23.46 |
| Write | 14.3414.26 – 15.66 | 15.2414.46 – 16.06 |
| Read | 10.9410.50 – 11.18 | 8.187.92 – 9.22 |
| Rename | 7.747.48 – 8.82 | 21.8221.04 – 22.68 |
| Delete | 1.941.86 – 2.14 | 6.125.80 – 6.34 |
| Flush | 3.603.52 – 3.88 | 10.4810.32 – 11.20 |
| Reopen | 6.165.04 – 6.44 | 6.345.50 – 7.40 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 706.58696.92 – 709.02 | 1,209.861,184.18 – 1,290.98 | 0.020.00 – 0.02 | 69.5867.98 – 72.52 |
| OPFS VFS · memory buffer | 710.14699.70 – 748.64 | 2,748.802,736.84 – 2,887.22 | 0.020.00 – 0.02 | 107.08105.42 – 149.88 |
| PGlite OPFS AHP | 709.92707.04 – 729.02 | 2,460.422,456.38 – 2,487.46 | 0.020.02 – 0.04 | 597.60577.04 – 739.10 |
| PGlite IndexedDB | 706.52705.22 – 715.22 | 835.68812.74 – 873.34 | 8.007.58 – 8.70 | 1,011.561,007.36 – 1,019.04 |
| PGlite memory · nonpersistent | 702.58689.70 – 705.04 | 587.76569.56 – 590.52 | Not applicable | Not applicable |
Scroll horizontally to see all columns.
| Backend / phase | Preparation | Initialization | Later explicit sync | Reopen |
|---|---|---|---|---|
| OPFS VFS · disk buffer | 686.50675.00 – 693.86 | 1,209.641,201.04 – 1,218.42 | 0.020.00 – 0.02 | 80.8880.18 – 83.36 |
| OPFS VFS · memory buffer | 686.36677.42 – 693.30 | 2,746.782,639.98 – 2,754.04 | 0.020.00 – 0.02 | 99.8893.84 – 101.90 |
| PGlite OPFS AHP | 692.38672.08 – 693.70 | 2,471.042,466.32 – 2,550.86 | 0.020.02 – 0.02 | 575.10556.84 – 589.86 |
| PGlite IndexedDB | 689.68685.06 – 693.04 | 831.62822.24 – 840.74 | 7.146.92 – 7.28 | 258.78253.48 – 260.40 |
| PGlite memory · nonpersistent | 689.16681.06 – 695.42 | 582.64566.42 – 592.34 | Not applicable | Not applicable |
Preparation, close and final cleanup are outside workload timings. Preparation initializes PGlite before the measured instance. The SQL suite drops its tables and checks their absence after reopen; the transaction workload verifies retained rows. Positive values below 0.01 ms display as <0.01; zero means a recorded zero at the browser timer's resolution.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer | PGlite OPFS AHP | PGlite IndexedDB | PGlite memory · nonpersistent |
|---|---|---|---|---|---|
| 1. 1,000 INSERTs | 19.8219.38 – 20.46 | 24.4023.88 – 24.96 | 23.9823.76 – 24.50 | 89.6888.18 – 90.24 | 18.6617.22 – 18.84 |
| 2. 25,000 INSERTs in a transaction | 354.58344.96 – 358.40 | 439.54433.76 – 447.26 | 360.30356.76 – 365.72 | 416.92407.74 – 431.12 | 332.34324.78 – 335.44 |
| 3. 25,000 INSERTs into an indexed table | 455.14451.30 – 462.74 | 620.58597.04 – 646.36 | 459.12451.34 – 466.88 | 503.86495.24 – 506.76 | 391.82382.50 – 399.14 |
| 4. 100 SELECTs without an index | 164.94164.44 – 165.88 | 166.64165.66 – 170.30 | 167.48166.76 – 168.80 | 174.50171.16 – 175.18 | 164.68164.34 – 165.06 |
| 5. 100 SELECTs with string comparisons | 425.32423.62 – 456.54 | 445.28436.28 – 447.76 | 428.26424.70 – 431.48 | 433.46425.40 – 435.74 | 425.66424.00 – 426.14 |
| 6. Create indexes | 119.32119.10 – 121.24 | 388.92380.34 – 393.80 | 135.44132.00 – 143.56 | 194.66192.90 – 201.82 | 30.3230.12 – 30.68 |
| 7. 5,000 SELECTs with an index | 253.04252.78 – 254.02 | 210.14208.14 – 215.24 | 500.66494.20 – 513.68 | 207.12205.30 – 210.20 | 203.46202.76 – 206.92 |
| 8. 1,000 UPDATEs without an index | 89.1088.82 – 91.60 | 93.2491.52 – 96.82 | 124.62122.98 – 126.62 | 156.64155.00 – 159.08 | 85.0884.24 – 87.64 |
| 9. 25,000 UPDATEs with an index | 1,176.921,146.22 – 1,246.74 | 1,023.881,018.00 – 1,081.90 | 2,198.482,152.66 – 2,212.46 | 825.84802.68 – 832.66 | 728.50718.02 – 738.00 |
| 10. 25,000 text UPDATEs with an index | 1,503.661,489.50 – 1,569.40 | 1,514.621,499.74 – 1,518.66 | 2,482.362,361.96 – 2,503.16 | 1,114.561,093.82 – 1,154.54 | 902.38890.86 – 905.84 |
| 11. INSERT from SELECT | 181.04178.78 – 181.88 | 370.02366.10 – 373.52 | 184.64175.84 – 200.88 | 238.20231.16 – 241.84 | 101.86101.68 – 102.50 |
| 12. DELETE without an index | 12.8012.50 – 12.98 | 19.4819.26 – 19.98 | 12.4611.80 – 12.62 | 94.8894.50 – 96.44 | 11.8011.52 – 11.92 |
| 13. DELETE with an index | 16.7216.46 – 16.88 | 39.7639.38 – 40.50 | 16.9016.28 – 17.04 | 100.4299.26 – 103.56 | 15.4815.00 – 15.54 |
| 14. Large INSERT after DELETE | 234.94229.70 – 235.12 | 605.82599.20 – 635.80 | 241.84236.90 – 258.76 | 304.78300.86 – 312.88 | 96.1095.78 – 99.30 |
| 15. DELETE followed by 12,000 INSERTs | 155.10151.34 – 157.40 | 203.98201.56 – 204.42 | 154.52151.62 – 155.64 | 228.46226.38 – 247.84 | 149.20137.06 – 153.72 |
| 16. DROP tables | 5.024.90 – 5.30 | 6.666.10 – 7.22 | 15.2614.72 – 15.40 | 78.0877.56 – 78.32 | 2.542.36 – 3.04 |
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 13.5813.16 – 14.42 | 12.0611.16 – 13.48 |
| Create | 5.405.28 – 5.80 | 57.5857.24 – 60.30 |
| Write | 90.6490.14 – 119.64 | 66.6466.20 – 68.44 |
| Read | 18.9218.28 – 19.62 | 6.686.66 – 6.98 |
| Rename | 8.668.24 – 8.92 | 67.6465.50 – 67.90 |
| Delete | 1.821.56 – 1.84 | 27.8627.22 – 28.28 |
| Flush | 4.243.62 – 4.34 | 51.8650.52 – 53.56 |
| Reopen | 7.447.08 – 8.18 | 13.2212.80 – 13.34 |
Read includes byte verification. Delete removes half the files; reopen times mounting before verification of the 500 survivors. This suite compares the two VFS buffer modes only.
iPhone benchmark · standalone run
SQL and filesystem benchmarks on iOS 26.6.1 and Safari 26.6.1. Each timing is the median of three successful runs, with observed minimum and maximum values.
This standalone run uses a different collection protocol from the Mac results. No excluded full-workload warm-up sample is recorded, and the exact source commit is unavailable. Device and OS details were carried over from the owner's previous run at their request.
AHP completed the SQL suite and transaction runs successfully on this device. A separate user-reported Mac Safari attempt stalled with UnknownError: Invalid platform file handle; this was not part of the measured Mac collection. See the browser compatibility and handle usage notes. The Mac Safari AHP entries were omitted by protocol, not recorded failures. All four backends completed three successful runs. IndexedDB cleanup succeeded in this replacement collection.
The memory-buffer SQL export supplies the VFS memory-buffer result. Its repeated AHP, IndexedDB and memory-only samples remain in the raw export; their displayed SQL values come from the original disk-buffer collection. The memory-buffer transaction export supplies the VFS memory-buffer transaction result using the same selection rule.
Scroll horizontally to see all columns.
| Backend / phase | OPFS VFS · disk buffer | OPFS VFS · memory buffer |
|---|---|---|
| Mount | 8.585.16 – 10.90 | 6.244.48 – 17.32 |
| create | 0.520.20 – 2.52 | 1.841.30 – 4.66 |
| write | 1.961.40 – 4.98 | 2.401.72 – 3.96 |
| read | 2.100.84 – 3.40 | 1.380.58 – 1.72 |
| rename | 0.540.40 – 2.58 | 2.481.90 – 5.20 |
| delete | 0.160.12 – 0.80 | 0.480.36 – 1.10 |
| flush | 0.820.62 – 2.02 | 1.721.40 – 3.26 |
| reopen | 1.761.38 – 3.70 | 1.501.22 – 3.46 |
This filesystem workload uses 100 files, compared with 1,000 in the Mac collections. Each run verified 50 surviving files after deleting half. These timings are not a like-for-like device comparison.
PGlite 0.5.4 with an unreleased OPFS VFS build. The export does not identify the exact source commit. Disk and memory buffering, balanced VFS durability and relaxedDurability: false. The SQL suite verified that dropped tables were absent after reopening; transactions verified 10,000 retained rows. These checks do not establish crash durability. Power mode and other collection conditions were not recorded.
SQL disk JSON · SQL memory-buffer JSON · Transactions disk JSON · Transactions memory-buffer JSON · Filesystem disk JSON · Filesystem memory JSON · Collection notes and checksum
Macs: five measured rounds per job, with one warm-up excluded. iPhone: three measured runs per backend, with no excluded full-workload warm-up recorded. All persistent VFS runs use balanced durability and PGlite uses relaxedDurability: false. Later explicit sync is not the total persistence cost. Clean reopening does not establish crash or power-loss durability.
Original JSON exports include every sample and collection notes. They let you verify the tables and reuse the measurements.
iPhone: SQL disk JSON · SQL memory-buffer JSON · Transactions disk JSON · Transactions memory-buffer JSON · Collection notes and checksum. The exact source commit is unavailable.
Mac measured source: 34ba9b39 plus the collector patch. PGlite 0.5.4. OPFS VFS was an unreleased build identified by the source commit and collector patch.
340 measured Mac samples across six collections, plus 36 summarized iPhone samples from 54 raw samples. Eighteen repeated SQL and transaction reference-backend samples are retained in the exports but not pooled with the original runs. These device-specific collections are not a population-wide performance estimate.
How the backends store data and how buffering and durability settings affect persistence.
Compare OPFS VFS with PGlite's OPFS AHP, IndexedDB, and memory-only backends using the same SQL workload.
Create, read, write, rename, delete, flush, and reopen operations test filesystem behavior directly.
Run filesystem benchmarks →