Darkkle is a community-built Manifest V3 browser extension that applies a true-black, configurable dark appearance to the Google Sheets web app. It includes coordinated tint controls, grid and border options, per-spreadsheet profiles, settings backup and restore, and a pinned settings panel.
Community-maintained project: Darkkle is maintained by volunteers. The repository owner may be unavailable for extended periods and does not promise response times, release dates, or ongoing compatibility. Bugs, testing, documentation, code, design work, and future maintainers are welcome.
Darkkle is independent software. It is not affiliated with, endorsed by, or sponsored by Google.
The repository is prepared for Darkkle 2.3.0. The extension display name is simply Darkkle.
The 2.3.0 package includes the header-highlight reliability work from the preceding test build, including improved handling of row and column labels during selection, scrolling, and multi-cell ranges. Google Sheets uses a private canvas-rendering implementation, so future interface changes can still require community fixes.
Every release on the Releases page carries a label. A release marked Pre-release has not completed the browser checklist in TEST_CHECKLIST.md, and its release notes state exactly what was and was not verified. A release marked Latest has completed that checklist, with the tested browser and operating-system versions recorded.
Read the testing section of a release before installing it, and prefer a blank or non-confidential spreadsheet when trying an untested build.
- Applies a true-black or soft-black spreadsheet appearance.
- Preserves user-selected cell colours while transforming neutral interface colours.
- Coordinates selection, header, gridline, and border tints.
- Stores settings separately for each spreadsheet.
- Mirrors profiles to local and browser-sync storage where available.
- Exports and imports a portable JSON settings backup.
- Opens the settings panel pinned beside the spreadsheet by default.
- Uses no developer-operated server, analytics SDK, advertising SDK, or remote code loader.
- Download the extension ZIP from the repository's Releases page.
- Extract it to a permanent folder.
- Open the browser's extension-management page.
- Enable Developer mode.
- Choose Load unpacked and select the extracted folder containing
manifest.json. - Refresh any spreadsheet tabs that were already open.
Detailed instructions and safe-upgrade guidance are in INSTALLATION.md. Common problems are covered in TROUBLESHOOTING.md.
Darkkle is intended to become a genuine community improvement effort rather than a one-person support obligation.
Before contributing:
- Read CONTRIBUTING.md.
- Check the roadmap and community wish list.
- Search existing issues and discussions.
- Run
npm run checkbefore submitting a pull request. - Test changes with a non-confidential spreadsheet and complete the relevant parts of TEST_CHECKLIST.md.
Small, focused pull requests are easier for volunteer reviewers to assess. Contributors are responsible for understanding and testing all code they submit, including AI-assisted code.
- Use the Bug report issue form for reproducible defects.
- Use the Compatibility report form when a browser or spreadsheet-interface change appears to have broken Darkkle.
- Use the Feature request issue form for a reasonably scoped proposal.
- Use Discussions → Ideas for early-stage wish-list items and design exploration.
- Use Discussions → Q&A for installation help and community support.
- Use GitHub's private vulnerability-reporting channel for security issues. Do not publish exploit details or confidential spreadsheet content.
There is no guaranteed response time. A lack of immediate response is not a rejection; another community member may triage or implement the request.
Darkkle requests only the storage extension permission and narrowly scoped access for the spreadsheet web app, its embedded Google companion panels, and Google-hosted static stylesheets. The extension does not intentionally collect or transmit spreadsheet contents. Because the rendering hook runs inside the page and observes canvas drawing operations, it may encounter rendered text during normal browser execution, but the project does not retain or send that content to a developer service.
See PRIVACY.md, PERMISSIONS.md, SECURITY.md, and ARCHITECTURE.md.
Darkkle is deliberately lightweight:
- plain JavaScript, HTML, and CSS;
- no runtime package dependencies;
- no bundler required;
- no remotely hosted executable code;
- a small Node-based validation and release-packaging toolchain.
Repository layout:
canvas-hook.js— early MAIN-world canvas interception and recolouring;content.js— extension-world orchestration, interface theming, diagnostics, and panel management;color.js— shared colour parsing and transformation logic;storage.js— per-spreadsheet persistence, migration, backup, and restore;popup.*— settings interface;theme.css— static interface theme rules;background.js— service worker, migration trigger, shortcut handling, and restricted stylesheet fetching;scripts/— validation, packaging, and GitHub setup helpers;tests/— a local synthetic header-highlight harness that complements real browser testing;.github/— issue forms, discussion forms, pull-request template, and workflows.
Some internal identifiers retain historical sn names so existing profiles continue to work. They are implementation details, not the public product name. Do not rename storage prefixes or message types casually; a migration plan and regression tests are required.
The project uses transparent, volunteer governance. Maintainer roles can be granted to contributors who demonstrate sound judgment, respectful conduct, reliable testing, and sustained useful work. The original repository owner retains administrative control but does not undertake to maintain Darkkle regularly.
Read GOVERNANCE.md, MAINTENANCE.md, SUPPORT.md, and CODE_OF_CONDUCT.md.
Darkkle is distributed under the Mozilla Public License 2.0. In practical terms, the licence permits use, modification, redistribution, and commercial distribution, while requiring distributed modifications to MPL-covered source files to remain available under the MPL. The licence text controls if this summary differs from it.
Contributions are accepted under the same licence. Project names and logos are addressed separately in TRADEMARKS.md.
Darkkle is provided without warranty. Test releases and community builds before relying on them. Never include private client, legal, financial, medical, or other confidential spreadsheet information in an issue, screenshot, log, sample file, or pull request.