Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
recordExtensionInstallPromptDismissed,
shouldShowExtensionInstallPrompt,
} from "#/lib/extension-install-prompt-storage";
import { siteConfig } from "#/lib/site-config";
import { getExtensionStoreInstallUrl } from "#/lib/extension-store-url";
import { useHasMounted } from "#/lib/use-has-mounted";

export function ExtensionInstallPrompt() {
Expand Down Expand Up @@ -55,7 +55,7 @@ export function ExtensionInstallPrompt() {
return null;
}

const installHref = siteConfig.browserExtensionInstallUrl;
const installHref = getExtensionStoreInstallUrl();

return (
<div
Expand Down
15 changes: 15 additions & 0 deletions apps/dashboard/src/lib/extension-store-url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { siteConfig } from "#/lib/site-config";

/**
* Resolves the correct extension listing for the user's browser (Firefox AMO vs Chrome Web Store).
*/
export function getExtensionStoreInstallUrl(): string {
if (typeof navigator === "undefined") {
return siteConfig.chromeExtensionStoreUrl;
}
const ua = navigator.userAgent;
if (/Firefox\//i.test(ua)) {
return siteConfig.firefoxExtensionStoreUrl;
}
return siteConfig.chromeExtensionStoreUrl;
}
12 changes: 8 additions & 4 deletions apps/dashboard/src/lib/site-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ type SiteConfig = {
name: string;
domain: string;
url: string;
/** Where users install the GitHub → DiffKit redirect browser extension (store or docs). */
browserExtensionInstallUrl: string;
/** Chrome Web Store URL for the DiffKit redirect extension. */
chromeExtensionStoreUrl: string;
/** Firefox Add-ons URL for the DiffKit redirect extension. */
firefoxExtensionStoreUrl: string;
githubRepositoryUrl: string;
themeColor: string;
socialImagePath: string;
Expand All @@ -17,8 +19,10 @@ export const siteConfig: SiteConfig = {
name: "DiffKit",
domain: "diff-kit.com",
url: "https://diff-kit.com",
browserExtensionInstallUrl:
"https://github.com/stylessh/diffkit/blob/main/extensions/diffkit-redirect/README.md#install-locally",
chromeExtensionStoreUrl:
"https://chromewebstore.google.com/detail/celjddfjncnnkgfgldobcahfiimlebll/",
firefoxExtensionStoreUrl:
"https://addons.mozilla.org/en-US/firefox/addon/diffkit/",
githubRepositoryUrl: "https://github.com/stylessh/diffkit",
themeColor: "#00C943",
socialImagePath: "/logo512.png",
Expand Down
13 changes: 13 additions & 0 deletions extensions/diffkit-redirect/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,19 @@ For an exact URL redirect, use:
3. Click Load unpacked
4. Select `extensions/diffkit-redirect`

## Package for Chrome Web Store / Firefox Add-ons

Store uploads expect **`manifest.json` at the root of the ZIP** (not inside a parent folder). Create the archive from inside this directory:

```bash
cd extensions/diffkit-redirect
zip -r ../../diffkit-redirect.zip . -x "*.DS_Store"
```

Then upload `diffkit-redirect.zip`.

Firefox (AMO) requires a **Gecko add-on ID** and **`data_collection_permissions`** in MV3 (`required: ["none"]` here — no developer telemetry). Minimum versions are set for desktop **140+** and Android **142+** to match Firefox data-consent support and `options_page` compatibility. Chrome ignores `browser_specific_settings`.

## Scope

This version is intentionally limited to `github.com` in `manifest.json`. If you later want redirects from other source hosts, add those hosts to the extension matches and permissions.
Expand Down
14 changes: 13 additions & 1 deletion extensions/diffkit-redirect/manifest.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
{
"manifest_version": 3,
"name": "DiffKit",
"version": "0.1.1",
"version": "0.1.3",
"description": "Redirect selected GitHub URLs to matching DiffKit routes.",
"browser_specific_settings": {
"gecko": {
"id": "diffkit-redirect@diff-kit.com",
"strict_min_version": "140.0",
"data_collection_permissions": {
"required": ["none"]
}
},
"gecko_android": {
"strict_min_version": "142.0"
}
},
"icons": {
"16": "icons/icon-16.png",
"32": "icons/icon-32.png",
Expand Down
Loading