Gosast (Persian گسست, "a clean breaking apart") is a small, calm browser toy. Click the button, and the page you are looking at turns into a sheet of paper on a desk. Tear it into strips, scatter confetti, sweep the pieces into a pile, glue some back, or feed the whole sheet to the shredder. Press Esc and the real page is exactly as you left it. 🌸
It is made for a quiet minute, not for stress: soft paper sounds (off by default), a gentle mode that fades instead of falling, and an undo for everything.
Real frames from the end-to-end run in Chrome (npm run e2e): open, strips, broom, shred all, rewind, Esc.
- Download
gosast-0.1.1-chrome.zip(or-firefox.zip) from the latest release and unzip it into a new folder. - Chrome / Edge: open
chrome://extensions, turn on Developer mode, click Load unpacked and pick the unzipped folder. Firefox: see Install from source. - Open any web page and click the 🌸 button (or press
Alt+Shift+K). Press1–4to pick a tool,Sto shred, Esc to put the page back.
| Key | Tool | What it does |
|---|---|---|
1 |
✂️ Strips | Drag across the page to tear out paper strips that fall and pile up |
2 |
🎉 Confetti | Click or drag to punch out tiny squares |
3 |
🧹 Broom | Sweep the loose pieces sideways |
4 |
🧴 Glue | Pieces under the glue fly back to where they came from |
S |
🗑️ Shred all | A blade sweeps down and shreds everything |
R |
⏪ Rewind | Every piece returns, top first |
G |
🍃 Gentle | Pieces drift and fade (on automatically if your system asks for reduced motion) |
M |
🔈 Sound | Synthesized paper sounds, off by default |
L |
🌐 Language | Switch the toolbar between English and فارسی |
Esc |
🌷 Put it back | Closes Gosast. The page is untouched |
Everything works with the keyboard too: arrow keys move a virtual pointer (hold Shift for bigger steps), Enter or Space presses and releases. The interface comes in English and فارسی (right-to-left aware) and follows your browser language.
- No network. Gosast makes no requests at all. There are no servers, no analytics, no accounts.
- No data collection. Nothing about a page is stored, logged or sent. The picture of the page lives in memory until you close Gosast.
- Tiny permissions. Only
activeTabandscripting, and no host permissions. Gosast can only run on a tab after you click its button (or press its shortcut), and only on that tab. - Reversible. Gosast never edits your page. See below.
- You click the toolbar button (or press
Alt+Shift+K). The browser grantsactiveTabfor that one tab. - The background script takes a picture of the visible part of the page, then injects four small scripts.
- The scripts draw that picture onto a
<canvas>inside a closed shadow-DOM overlay covering the viewport. All the tearing happens on the picture: it is cut into 14 px cells, strips are runs of cells, and a small physics step makes the pieces fall, stack in a pile height-field and fly home on springs. - Your real page is never modified. The only change in its DOM is one overlay element, added at the start and removed on exit. Forms keep their values, focus and scroll position; keystrokes are swallowed while the overlay is open so typing cannot reach a field.
Because it is a picture, Gosast works the same on any page, whatever its CSP, frameworks or shadow DOM.
You need Node 18+ only to build the zip files; the extension itself has no dependencies.
git clone https://github.com/mrzroot/gosast.git
cd gosast
npm test # 34 unit tests
npm run build # creates dist/chrome, dist/firefox and the two zip filesChrome / Edge / Brave
- Open
chrome://extensions(Edge:edge://extensions) and turn on Developer mode. - Click Load unpacked and choose the
dist/chromefolder. - Pin the 🌸 button, open any web page, and click it. Or press
Alt+Shift+K.
Firefox 142+
- Open
about:debugging#/runtime/this-firefoxand click Load Temporary Add-on…. - Choose
dist/firefox/manifest.json. - Temporary add-ons disappear when Firefox closes. For a permanent install you need the signed release from the add-on store (not published yet).
Release zips (gosast-0.1.1-chrome.zip, gosast-0.1.1-firefox.zip) are attached to each GitHub release.
npm testruns readable unit tests for the geometry and physics (tests/core.test.js), the English/Persian strings (tests/strings.test.js) and the package itself (tests/package.test.js: permissions, Firefox manifest, zip, no network calls). Each test has a one-line docstring explaining what it protects.npm run e2eloads the built extension into real Chrome under a virtual display and drives it on a static page, a forms page, a right-to-left Persian page, a reduced-motion page and a live Wikipedia article. It checks that the page's HTML, form values, focus, scroll position and pixels are identical afterwards, that the page saw exactly two DOM changes (host added, host removed), and that there were no console errors and no network requests while the overlay was open. Screenshots go toe2e/out/.
- It tears a picture of the visible part of the page, not the whole scrolling document. The page cannot scroll while Gosast is open.
- Resizing the window closes Gosast (the picture would no longer fit).
- It does not run on browser pages (
chrome://, the add-on stores,about:), and PDFs in the built-in viewer are not supported. - Videos and animations are frozen at the moment of the picture.
- Very large screens with thousands of pieces can slow down on old computers; the piece count is capped at 5000.
- The Firefox build is checked with
web-ext lintand the same code runs in Chrome; it has not been tested in a real Firefox yet.
- Store listings for Chrome Web Store, Edge Add-ons and Firefox Add-ons
- Scroll the page first, then tear a different part
- A "tear the whole page" mode that stitches several screenshots
- More tools: scissors lines, tape, a gust of wind
- Save a picture of the torn page as a PNG
- More languages (translations are welcome, see
src/strings.js)
Bug reports, Firefox test reports and translations are welcome. See CONTRIBUTING.md for setup and the ground rules (no new permissions, no network, never touch the page), and use the issue forms.
MIT © 2026 Mohammadreza Zare (@mrzroot). Gosast is an original work. If you use it in research or a blog, CITATION.cff has a ready-made citation.