Browser extensions
Adding local destinations to a web clipper
Local Web Clipper started as a fork of Obsidian Web Clipper. I wanted to preserve its extraction and template behavior while letting people save the generated Markdown without requiring Obsidian.
The browser constraint
A browser extension cannot silently write to any path on someone’s computer. Direct folder access requires an explicit picker and permission, and the API is not available everywhere.
The boundary I added
I kept the change after Markdown generation and put destination-specific behavior behind one save interface:
extract page data
→ apply template
→ generate Markdown
→ ClipDestination.save()The local-directory destination stores the chosen handle in IndexedDB and requests permission again when needed. The Downloads destination uses relative browser download paths. Clipboard remains the simplest manual fallback.
What I check
The destinations need separate checks because each one depends on different browser behavior. I build and load the Chromium extension locally, run the existing tests, and confirm folder permission, filename conflicts, Downloads fallback, and Clipboard output independently.