Firefox Add-ons
Chrome Web Store
Releases
Privacy policy · Manual install
A WebExtension for Firefox and Chrome that adds a context menu for saving images, video, audio, links, selected text, and pages into user-defined folders inside the default download location.
- Save into dynamically named directories.
- Rename and route downloads with flexible routing rules.
- Exclude matching saves or close their source tab after a routed save starts.
- Create shortcut files as Windows internet shortcuts (
.url), macOS internet locations (.webloc), Linux desktop shortcuts (.desktop), or HTML redirects (.html). - Browse sortable, filterable download history, manage active or completed downloads, replay a row in the Route debugger, copy saved paths or source URLs, and export all stored fields as JSON or formula-safe CSV/TSV.
- Select and batch-save filtered Page Sources, or draft a guarded automatic rule directly from a discovered source.
- Keep quick access to recent destinations, make individual destinations open Save As, and optionally save a source-link shortcut beside downloaded media.
- Build paths from dates, page and source parts,
:counter:,:uuid:,:mime:,:mimeext:, and other variables. Open Reference in Options for the maintained variable and matcher list. Use:pagerootdomain:or:sourcerootdomain:when the folder should omit subdomains such aswwwor numbered CDN hosts (#221). - Match normalized MIME types (
mime:/contenttype:), referrer URLs and hostnames, page or source root domains, and the browser-resolvedfinalfilename:in routing rules. Use:menupath:in a destination to include the folder chosen from the Save In menu. - Route interactive link saves with the clicked link's explicit
:linktitle:or:linkdownload:metadata without changing existing:linktext:rules. - Inspect MV3 background health, lifecycle events, configuration issue counts, and recent session failures from the collapsed Diagnostics panel in Advanced.
See Destination and source workflows for destination-specific Save As behavior, recent locations, Page Sources batches, History actions, and source-link sidecars.
Page Sources can automatically save newly discovered matching media. Automatic
saves are off by default and use guarded routing rules with an
explicit context: ^auto$, a page condition, and a source condition. Rules can
be created from a Page Sources row or in Visual mode under Routing rules
and remain subject to
private-window and per-page safety limits. See
Automatic source saves.
Optionally include matching ordinary browser downloads in local history. Chrome can apply routing rules before saving; Firefox offers a separately labelled experimental cancel-and-redownload mode for matching HTTP(S) downloads.
A versioned external API plus configuration tools support scripts and compatible in-browser AI agents through WebMCP. See the source-controlled integration contract.
Version 4 is a Manifest V3 extension on Firefox 140+ and Chrome 123+.
The WebExtension API only allows saving into directories relative to the default download directory. Firefox can follow a symlink placed there to another existing directory. Current Chrome versions reject symlinked download destinations, so this workaround is Firefox-only.
Linux/macOS:
ln -s /path/to/actual /default_download_dir/symlink
Windows:
mklink /d \default_download_dir\symlink \path\to\actual
Make sure the target directory exists. Firefox reports a failed download when the target is missing or inaccessible.
<all_urls>is used for page features and extension-context HEAD/fetch requests.- The optional Referer filter supports anti-hotlink downloads. Both browsers use
a temporary, exact declarativeNetRequest rule around requested metadata or
content fetches, so protected downloads can use MIME, final-URL, and SHA-256
variables. Firefox keeps its native
downloads.download({ headers })final transfer unless content was already fetched for hashing; Chrome saves the protected content blob. Save In does not requestwebRequestorwebRequestBlocking. - Extension-side Fetch/HEAD requests include applicable credentials by default, including at redirect destinations. They can be made anonymous in Advanced downloading and require no cookie-reading permission. Private-window extension requests are always anonymous because the shared background cannot select a private cookie store, so authenticated resources that require Fetch mode may fail there. Firefox direct downloads use the private session.
Install from Firefox Add-ons or the Chrome Web Store if you can. Only the stores can ship an extension the browsers will install permanently, keep updated, and trust by default. Each release also attaches the exact package it sent to the stores, for testing a build before it is reviewed or running one the stores never carried.
save-in-X.Y.Z.zip and save-in-X.Y.Z.xpi are the same bytes under two names,
and save-in-X.Y.Z-chromium.crx is that ZIP behind a signature header.
SHA256SUMS covers all three.
Chromium-based browsers (Chromium, ungoogled-chromium, Brave, Vivaldi) —
open chrome://extensions, turn on Developer mode, and drag
save-in-X.Y.Z-chromium.crx onto the page.
Google Chrome installs extensions only from the Web Store, and no file
changes that. Use the Web Store link above, or unzip save-in-X.Y.Z.zip and
choose Load unpacked on the folder with Developer mode on. Keep the
folder where it is: an unpacked extension's ID is derived from its path, so
moving it makes Chrome treat it as a new extension and its settings disappear.
Firefox — open about:debugging#/runtime/this-firefox, choose Load
Temporary Add-on, and pick save-in-X.Y.Z.xpi. It is removed when Firefox
closes. Installing it permanently needs a signed package, so it works only on
Developer Edition, Nightly, or ESR with xpinstall.signatures.required set to
false in about:config; release and beta Firefox refuse the file.
An extension's ID comes from whoever signed it, and only the stores can sign as the store. So a sideloaded Save In is a separate extension from the store one: install both and you get two, each with its own settings, history, and rules. Nothing transfers between them, and uninstalling one leaves the other.
This matters if another extension talks to Save In. Integration recipes address the store build, so on a sideloaded build point them at the ID shown at the top of Save In's own Options page instead of the published one.
| Install | Extension ID |
|---|---|
| Firefox, any of the above | {72d92df5-2aa0-4b06-b807-aa21767545cd} — declared in the manifest, so it never varies |
| Chrome Web Store | jpblofcpgfjikaapfedldfeilmpgkedf |
-chromium.crx |
Fixed, and the same for everyone. Shown in Options. |
| Load unpacked | Derived from the folder path, so it differs on every machine |
Save In exposes a versioned external API to other extensions. PING,
GET_SCHEMA, GET_KEYWORDS, GET_GRAMMARS, and VALIDATE are open for
discovery and validation; DOWNLOAD additionally requires an explicitly
approved extension ID. GET_CONFIG and APPLY_CONFIG are same-extension only.
Experimental WebMCP tools serve compatible in-browser agents. See the
source-controlled integration contract for the protocol,
availability, and trust model.
The source code for this extension is available at https://github.com/gyng/save-in.
All shipped extension code is first-party except
src/vendor/content-disposition.ts, a
readable (non-minified) Content-Disposition header parser by @Rob--W, taken
from https://github.com/Rob--W/open-in-browser (license header in the file).
There are no minified files or remote code. Rolldown transpiles and
scope-hoists the TypeScript modules into one readable, non-minified JavaScript
file per execution target; the shipped bundle remains suitable for review.
Pull requests, bug reports, and issues are welcome. See the contributor guide for development setup and validation, and the release workflow for packaging and store submissions. docs/ indexes the rest, including the UI, integration, and security review contracts.