Initial release

This commit is contained in:
aculix committed 2026-09-28 18:28:32 +05:30
commit 4b67728cce
108 files changed
+13310

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
# Open in Knotchy (Chrome extension)
Adds **Open in Knotchy** to the right-click menu of links in Chrome (and other Chromium
browsers such as Edge, Brave and Arc).
Chrome gives the macOS Services menu only a link's words, never its address, so Services
can't open Chrome links in Knotchy. This extension hands the address to the Knotchy app
through its `knotchy://open?url=…` URL scheme instead. It only passes on `http` and
`https` links, and it needs no permission beyond adding the menu item.
## Install
1. Open `chrome://extensions` and turn on **Developer mode**.
2. Click **Load unpacked** and choose this folder.
3. Right-click any link and choose **Open in Knotchy**. The first time, Chrome asks
whether to open Knotchy; allow it.
The Knotchy app must be installed.
## Publishing
[STORE.md](STORE.md) has everything the Chrome Web Store asks for: the package, listing text, graphics and privacy
answers. Once the store assigns the item ID, set `ChromeExtension.storeURL` in the app and link the listing here.
## Files
- `manifest.json`: Manifest V3, with the `contextMenus` permission only
- `background.js`: creates the menu item and opens the `knotchy://` link
- `icons/`: generated by `scripts/make-icons.sh` at the repository root
- `store/`: the store's promo images (also generated) and framed screenshots; not part of the package
+76
View File
@@ -0,0 +1,76 @@
# Chrome Web Store listing
Everything the developer dashboard asks for, in the order it asks.
## Package
`scripts/package-extension.sh` at the repository root builds `build/open-in-knotchy-<version>.zip`. It holds only
`manifest.json`, `background.js` and `icons/`. Upload that zip.
## Store listing
**Title** (from the manifest): Open in Knotchy
**Summary** (from the manifest): Adds "Open in Knotchy" to the right-click menu of links: opens them in Knotchy's
disposable, isolated browser.
**Description:**
> Right-click any link and choose Open in Knotchy to open it in Knotchy's disposable browser instead of Chrome.
>
> Knotchy is a free, open-source Mac app. Each link opens in its own throwaway Linux virtual machine, shown in a
> panel under your MacBook's notch. The page can reach the internet but not your Mac or your local network, and the
> whole machine is destroyed when you're done. It's meant for links you don't trust: unexpected email links,
> shortened URLs, and sites you'd rather not open in your own browser.
>
> This extension does one thing: it passes the address of the link you right-click to the Knotchy app on your Mac.
> It passes only http and https links, can't see the pages you visit, and sends nothing anywhere else.
>
> Requires the Knotchy app, on a Mac with Apple silicon and macOS 26 or later. The first time, Chrome asks whether to
> open Knotchy; allow it.
**Category:** Privacy & Security. **Language:** English.
**Graphics:**
| Asset | File |
|---|---|
| Store icon, 128 × 128 | `icons/icon-128.png` |
| Screenshots, 1280 × 800 (at least one) | `store/screenshot-*.png`, made as below |
| Small promo tile, 440 × 280 | `store/promo-440x280.png` |
| Marquee, 1400 × 560 (optional) | `store/marquee-1400x560.png` |
`scripts/make-icons.sh` regenerates the promo images with the icons.
**Screenshots** must be real captures:
1. With the extension loaded in Chrome, press ⌘⇧5, set a 5-second timer and capture the screen. During the countdown,
right-click a link so the menu shows **Open in Knotchy**.
2. Open a link that way and capture the Knotchy panel under the notch with ⌘⇧4.
3. Fit each capture to the store's frame:
`swift scripts/icons/frame.swift ~/Desktop/capture.png extensions/chrome/store/screenshot-1.png`
**Homepage and support URLs:** the GitHub repository and its issues page, once the repository is public.
## Privacy practices
**Single purpose:** Open a link in the Knotchy Mac app from Chrome's right-click menu.
**Permission justification, `contextMenus`:** Adds the Open in Knotchy item to the right-click menu of links, and
nothing else.
**Host permissions:** none requested.
**Remote code:** No. All code ships in the package.
**Data usage:** tick none of the data types. The extension collects nothing: the clicked link goes only to the
Knotchy app on the same Mac, through its `knotchy://` URL scheme, and never to a server. Tick the three
certifications (no selling or transferring data, no use unrelated to the single purpose, no use for creditworthiness).
**Privacy policy:** not required, since no user data is collected. If the dashboard asks anyway, link a page that
says: "Open in Knotchy collects no data. It passes the link you choose to the Knotchy app on your Mac and sends
nothing to any server."
## Distribution
Public, free, all regions.
+13
View File
@@ -0,0 +1,13 @@
// Chrome gives the Services menu a link's text, never its address, hence this extension.
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({ id: "open-in-knotchy", title: "Open in Knotchy", contexts: ["link"] });
});
chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId !== "open-in-knotchy" || !info.linkUrl || !tab || tab.id === undefined) return;
if (!/^https?:\/\//i.test(info.linkUrl)) return;
const target = "knotchy://open?url=" + encodeURIComponent(info.linkUrl);
// Hands the URL to the app without leaving the page.
chrome.tabs.update(tab.id, { url: target });
});
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

+14
View File
@@ -0,0 +1,14 @@
{
"manifest_version": 3,
"name": "Open in Knotchy",
"description": "Adds \"Open in Knotchy\" to the right-click menu of links: opens them in Knotchy's disposable, isolated browser.",
"version": "1.0.0",
"icons": {
"16": "icons/icon-16.png",
"32": "icons/icon-32.png",
"48": "icons/icon-48.png",
"128": "icons/icon-128.png"
},
"permissions": ["contextMenus"],
"background": { "service_worker": "background.js" }
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB