Privacy Policy
The short version. Duskly collects nothing, sends nothing, and has no server. It contains no networking code at all — no analytics, no telemetry, no accounts, no crash reporting. Your settings are stored on your own device and never leave it.
1. Who this covers
This policy applies to the Duskly browser extension ("Duskly", "the extension") published on the Chrome Web Store, and to these documentation pages. Duskly is an independent open-source project by ownCoder.
2. Data we collect
None.
Duskly does not collect, transmit, sell, rent, share, or otherwise disclose any
information about you or your browsing. This is not a policy choice that could quietly
change in an update — it is a property of the code. Duskly contains no
fetch, no XMLHttpRequest, no WebSocket, no
sendBeacon, and no remote resources of any kind. Its build script refuses
to produce a package if any of those appear in the source, and its test suite asserts
the same thing independently.
| Category | Collected |
|---|---|
| Personally identifiable information | No |
| Health information | No |
| Financial or payment information | No |
| Authentication information | No |
| Personal communications | No |
| Location | No |
| Web history | No |
| User activity (clicks, keystrokes, mouse movement) | No |
| Website content | No |
3. Data stored on your device
Duskly stores two things using the browser's local extension storage
(chrome.storage.local). Both stay in your browser profile on your computer.
3.1 Your settings
Your chosen palette, the default approach for new sites, three comfort values (brightness, warmth, contrast), your schedule, and two interface flags recording whether you have dismissed a one-line notice.
3.2 Your per-site rules
If you tell Duskly to behave differently on a particular website, it records the
origin of that site — for example https://example.com —
together with the mode you chose.
This is a preference list you created deliberately, not a browsing history. It contains only sites you configured by hand. It records no full URLs, no page paths, no query strings, no timestamps, and no visit counts. Sites you merely visit are never added.
We deliberately do not use the browser's sync storage, because that would copy your data off your device. Everything stays local.
4. What Duskly reads from the pages you visit
To make a page dark, Duskly has to know what colours the page is currently using. It reads:
- colour values declared in the page's stylesheets;
- the computed background colour of elements, in cases where a stylesheet could not be read.
Those values exist only in the page's memory for as long as the tab is open. They are never stored and never transmitted. Duskly does not read page text, form fields, passwords, cookies, or anything you type.
5. What Duskly writes to the pages you visit
Duskly injects a stylesheet to re-colour the page. It also sets a dark-theme attribute on the page's root element where the site uses a standard convention for that.
There is one case in which Duskly writes to a website's own storage, and we disclose it explicitly:
For a small curated list of sites whose dark theme is controlled by a stored
preference, Duskly may write a theme key such as theme = "dark" into
that site's localStorage. This is written only when the key is
absent, so a choice you already made on that site is never overwritten. It
is the same value the site itself would store if you clicked its own dark-mode
button. The complete list is visible in
src/lib/recipes.js.
Duskly never reads a site's storage for any other purpose.
6. Permissions, and why each is needed
| Permission | Why |
|---|---|
storage |
To remember your settings and per-site rules on this device. |
scripting |
To register Duskly's theming scripts only on sites where you have it switched on. This is what allows a site you turned off to receive no Duskly code at all, rather than code that runs and then decides to do nothing. |
alarms |
To re-check your schedule every few minutes, so evening mode starts on time. |
| Access to all websites |
Applying a dark theme to whatever site you are reading is the entire purpose of
the extension, and it has to happen before the page paints. The narrower
activeTab permission would require you to click the toolbar icon on
every single page load.
|
Duskly deliberately does not request access to your tabs, browsing history, cookies, downloads, bookmarks, clipboard, location, or identity.
7. Third parties
There are none. Duskly uses no analytics service, no error-reporting service, no content delivery network, no advertising network, no fonts or scripts loaded from another server, and no third-party libraries at runtime. Nothing about you is shared with anyone, because nothing about you ever leaves your browser.
8. Children
Duskly is suitable for all ages and collects no data from anyone, including children under 13.
9. Your control over your data
- See it. Everything Duskly stores is visible in its options page.
- Export it. Options → Your data → Export settings writes a readable JSON file.
- Delete it. Options → Your data → Reset everything clears all of it. Uninstalling Duskly also removes everything the browser stored for it.
Because nothing is ever sent anywhere, there is no copy of your data for us to hold, disclose, or delete on your behalf.
10. Changes to this policy
If this policy ever changes, the new version will be published here with an updated effective date, and the change will be recorded in the project's changelog. If a future version of Duskly ever introduced an optional feature that required a network connection — cross-device sync, for example — it would be strictly opt-in, clearly labelled, and off by default, and this policy would be updated before it shipped.
11. Verifying any of this
Duskly ships with no minification, no bundler and no build step, which means the code inside the Chrome Web Store package is byte-for-byte identical to the code in the public repository. You do not have to take this policy's word for anything — you can read exactly what runs.
12. Contact
Questions about privacy, or anything else, can be raised as an issue at github.com/ownCoder/duskly/issues. See the support page for other options.