# selfstore vs browser-fs-access Source: https://selfstore.dev/compare/browser-fs-access browser-fs-access smooths over the File System Access API; selfstore uses that API as one destination among several, and decides everything around it. ## What browser-fs-access is A small, well-made library from GoogleChromeLabs: `fileOpen()` and `fileSave()` that use the File System Access API where it exists (Chromium, where you get a real handle and can write back to the same file) and fall back to `` and a download elsewhere. It does that one job cleanly and it is a sensible dependency for any app that touches files. What it does not do - correctly, since it is not its job - is decide what those bytes are. ## What selfstore is The decision about the bytes, and everything after it. A disk file is one of selfstore's destinations, and connecting one is `store.connectFile()`; what gets written is the app's whole state as a [portable encrypted ZIP](https://selfstore.dev/docs/format), what happens next is a debounced auto-save on every mutation, and what happens when a second device connects the same file is a deterministic merge rather than an overwrite. It also handles the parts that only show up in production: the file mode is Chromium-only, so a browser without it gets a `'manual'` outcome and an honest download path instead of a broken promise; a desktop shell (Tauri and the like) can hand its own file calls over once and get a real path that survives the session; and a handle that needs re-granting surfaces as a typed status with a `reconnect` action rather than an exception. | | browser-fs-access | selfstore | | --- | --- | --- | | Scope | Open and save dialogs | The storage loop | | Cross-browser fallback | Yes | Yes, as a reported outcome | | What is written | Yours to define | A spec'd ZIP of the app state | | Encryption | No | AES-256-GCM + Argon2id | | Re-open the same file later | The handle, yours to keep | Remembered and restored | | Second device | Not in scope | Merged, not overwritten | ## Use browser-fs-access when - Your app imports or exports a file and that is the whole requirement - an image editor saving a PNG, a tool reading a CSV. ## Use selfstore when - The file is meant to BE the app's storage, which brings the questions the picker does not answer: format, encryption, auto-save, re-opening, and what happens when the user's other laptop opens the same file. Map of this site for a model: https://selfstore.dev/llms.txt Every page in one file: https://selfstore.dev/llms-full.txt