Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

SignalOnly preview

SignalOnly

SignalOnly is a local Chromium extension for alt management, per-site identity profiles, fingerprint spoofing, cookie separation, SOCKS routing, WebRTC leak control, and cleaner browsing.

The main use is simple: keep different site identities separated without constantly switching Chrome profiles, clearing cookies manually, or rebuilding the same setup over and over.

Assign a profile to a site, and SignalOnly gives that site a stable alternate browser surface. The profile carries its own fingerprint values, storage salts, cookie behavior, cleanup rules, and local UI state. SOCKS proxy and browser privacy controls are global Chromium settings, with per-site behavior applied where Chrome exposes host scoping. It does not promise invisibility; it gives each site/profile a local, inspectable browser surface and reversible rules.

This is useful for alt accounts, privacy testing, account separation, and making noisy sites less annoying without breaking every login flow.

How it works

SignalOnly runs as a Manifest V3 extension. The background worker handles profiles, site assignments, proxy settings, privacy controls, exclusions, dynamic rules, and cookie jars. The content script runs early on pages and injects the shield when the current site has an active profile.

The shield changes the browser signals that sites usually read when they try to identify you. Instead of leaking the same raw browser state everywhere, each assigned profile gets its own stable surface. The default goal is not random noise every reload. The goal is a believable profile that stays consistent.

Auto-Rotate is the exception and is marked as an advanced volatile mode. When it is enabled, fingerprint shielding derives a fresh page-load seed from the selected profile, so the profile family stays recognizable but the session surface changes on reload. Keep it off when you want long-lived, stable account separation.

Cookie handling works through per-site cookie identities. SignalOnly can switch and clone cookie jars for the current site scope. When you switch identities, it snapshots the previous jar, clears the current scope, and restores the target jar when one exists. That makes alt switching much less annoying because you are not constantly logging in and out by hand.

Storage access is namespaced with profile salts, so normal page storage APIs are separated at the JavaScript API layer for assigned profiles. This is not a full Chromium storage partition; existing origin storage can still exist outside the namespace, and changes that happen before the shield loads require a reload to fully settle.

The extension also has optional cleanup rules for recommendations, comments, overlays, sticky junk, metrics, and motion-heavy page elements.

What it does

Fingerprint Spoofing: Feeds fake but consistent data to scripts checking Canvas, WebGL, AudioContext, DOMRects, Math precision, screen posture, plugins, and hardware concurrency. Optional Auto-Rotate: Advanced volatile mode that uses a fresh fingerprint seed per page load when fingerprint shielding is active. Default profiles remain stable. Cookie Identities: Switches and clones per-site cookie jars. Policies can keep cookies, clear on tab close, or clear on profile switch. It also sweeps known tracking cookies and caps first-party cookie lifetimes. UI Cleanup: Visually removes algorithmic recommendations, vanity metrics, overlays, and sticky headers using safe, non-destructive DOM tagging. Network Routing: Built-in global SOCKS proxy support and WebRTC leak protection. Header Stripping: Blocks declarative tracking headers (ETag, Last-Modified) on third-party requests.

Why this exists

Most privacy extensions are built like blunt instruments. They block too much, break pages, and then expect you to babysit every site.

SignalOnly is meant to be more controlled. Keep the page working, but change what the page sees. Give each site a profile. Keep cookies separated. Keep browser signals consistent unless you explicitly enable volatile rotation. Route traffic through SOCKS when needed. Hide the parts of the page that are just attention trash.

It is not trying to be a giant hardened browser project. It is a practical local tool for managing identities inside Chromium.

Install

Load the repository root (the folder containing manifest.json) as an unpacked extension in your Chromium-based browser.

Open chrome://extensions, enable Developer mode, click Load unpacked, and select the folder containing manifest.json.

Then open a normal website, click the SignalOnly icon, and assign a profile to the current site.

Usage

Use the popup for quick current-site changes, profile assignment, module toggles, cookie identity switching, and creating new cookie alts. Current-site module toggles auto-save so button presses have visible effect instead of sitting as hidden pending edits.

Use the options page for profiles, exclusions, cookie jars, imports, exports, global settings, and the advanced Auto-Rotate mode.

After changing fingerprint, storage, or service-worker behavior, reload the page. A lot of sites read browser APIs early, so reloads matter.

Use exclusions for sites where you want SignalOnly completely out of the way, especially login providers, payment flows, or anything that acts weird when browser signals change.

Testing

The basic test is to assign Profile A to a fingerprint test page, reload, and confirm the result stays stable. Then switch to Profile B, reload, and confirm the surface changes. Switch back to Profile A and check that the old surface and cookies return.

If Auto-Rotate is enabled, expect the fingerprint surface to change on reload. Disable it before testing stable profile identity.

Also test the actual sites you care about.

Project layout

manifest.json defines the extension.

src/background/service-worker.js handles extension state, profiles, site assignments, cookie jars, proxy controls, rules, and exclusions.

src/background/pure.js contains shared pure helpers used by the service worker and tests.

src/content/content.js runs on pages, prepares per-load Auto-Rotate profiles, and applies the current site config.

src/injected/fingerprint.js patches page-world browser APIs, including Auto-Rotate plugin and math surfaces.

popup/ is the quick control panel.

options/ is the full manager.

rules/static-rules.json contains the baseline tracker rules.

Notes

SignalOnly is local. Profiles, salts, site assignments, and saved cookie jars live in Chrome extension storage.

Exports can contain profile and cookie data. Treat exported configs like private files.

About

Cool little privacy extension.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages