Skip to content

Repository files navigation

Dark

"Hacking a browser shouldn't mean wrestling with C++."

Dark browser screenshot

See more screenshots here

Dark is a sleek, Electron-based browser you can bend, hack and make your own, 100% React + TypeScript under the hood. Built on Chromium (so you still get Chrome DevTools and ecosystem compatibility), Dark makes browser customization as easy as editing a React component.


🚀 Features

  • Fully Hackable Everything in Dark is React + TypeScript. No C++ gatekeepers, if you know JS, you can extend or fork any part of the browser UI or behavior.

  • Chromium-Powered Under the hood it's the same engine that powers Chrome, so all your favorite DevTools, extensions (via session.loadExtension), and web standards just work.

  • Modern UI Built with React, Tailwind-style CSS and shadcn. Customize tabs, sidebars, themes, or even the entire address bar. The only rule is: "everything's Dark"

  • Cross-Platform Runs on macOS, Windows, and Linux, package once, ship everywhere.

  • Open & Supported Unlike Arc (which went closed-source), Dark is 100% Apache 2.0-licensed and is 100% community-driven. We'll be here to merge your PRs and ship updates.


🔒 Open Source Pledge

Dark will always remain 100% open source.

We solemnly pledge that:

  • Forever Open: Dark will never go closed-source, proprietary, or behind paywalls
  • Permissive License: We commit to maintaining Apache 2.0 (or equivalent permissive licensing) in perpetuity
  • Community Ownership: The core project will always be owned and governed by the community
  • No Vendor Lock-in: You can fork, modify, redistribute, and even commercialize Dark without restriction

This isn't just a promise, it's our foundational principle. Unlike other browsers that started open and went commercial, Dark's architecture, governance, and licensing ensure it stays hackable forever.


📦 Getting Started

  1. Clone the repo

    git clone https://github.com/tomaspiaggio/dark.git
    cd dark
  2. Install dependencies

    npm install
  3. Run in dev mode

    npm start

    Your custom browser will spin up with live-reload on React code changes.

  4. Build & Package

    npm run build

🔧 How to Hack

  1. All UI lives under src/renderer/ as React components.
  2. Main-process logic (window management, IPC handlers) sits in src/main/.
  3. Want to override the tab switcher, add a custom sidebar widget, or tweak your new-tab page? Just dive in, edit a .tsx, and your changes show up instantly in npm start.

🤝 Contributing

We love contributions of all kinds:

  • Bug reports & feature requests via GitHub Issues
  • Design ideas, mockups, animations, new themes
  • Documentation fixes, help us keep this README crystal clear!

❤️ Support & Sponsorship

Building and maintaining a browser engine wrapper is no small feat, and your support keeps Dark alive and thriving:

  • ⭐ Star this repo
  • 🐛 Report bugs or propose new features
  • 💵 Donate
    • BTC: bc1qwyz7zp2av6ftg63quqpf025eetqpssaqd7ud0y
    • USDC (Polygon): 0x8C03f4c53a9a46d78D8b15E7A0Ea8D530EC3cA3F
    • USDT (Polygon): 0x8C03f4c53a9a46d78D8b15E7A0Ea8D530EC3cA3F
  • 🙌 Spread the word on Twitter, Mastodon, or your favorite tech blog
  • 🐦 Follow updates @tomaspiaggio for the latest Dark news

Your sponsorship helps pay for CI, hosting, and coffee to fuel late-night hacking sessions.


Made with ❤️ by @tomaspiaggio and the Dark community

Help needed

🔧 Missing Features

Feature Description Implementation Notes
Bookmarks Save, organize, and manage favorite websites Persistent storage with folders, tags, and quick access toolbar
Command+Number Quick switch to bookmark When doing Command+1 you go to the first bookmark, when doing Command+2, you'll go to the second, and so on.
Split Screen View multiple tabs side-by-side in the same window Dynamic webview layout with resizable panes
Spaces Separate workspaces for different contexts (work, personal, studying) Tab grouping with isolated sessions and visual workspace indicators
Extensions Support for loading Chrome extensions via session.loadExtension() Use Electron's extension APIs to load .crx files or unpacked extensions
Multiple Instances Run multiple browser windows/processes simultaneously Separate Electron processes for isolated browsing sessions
Sleep Tabs Reduce memory usage by suspending inactive tabs Unload tab content but preserve state for quick restoration
Quit Confirmation Ask before closing browser with Cmd+Q Prevent accidental closure with "Are you sure?" dialog
Config Menu Settings/preferences interface Persistent settings for new tab URL, tab cleanup timing, hotkeys
Landing Page Custom start page when opening browser Branded homepage with quick actions and workspace selection
Welcome Flow First-run onboarding experience Guide users through space creation and basic browser features
Cheatsheet Help documentation for keyboard shortcuts In-app reference for all available hotkeys and gestures
Printer Support Print web pages and PDFs Electron's print API with preview and printer selection
Enhanced New Tab Rich new tab experience with widgets Transform about:blank into useful start page with quick actions
Private Browsing Incognito mode with no history/cookies Isolated session that doesn't persist data after closing
History Browse and search previously visited pages Persistent history with search, date filtering, and quick access
Service Workers Full support for Progressive Web Apps Enable offline functionality and push notifications
Packaging & Release Build system for distributing the browser Electron Builder setup for macOS, Windows, and Linux packages
AI Features (Cmd+I) Cursor-style AI integration with user's API key LLM integration for page summaries, Q&A, and content assistance
Command+Shift+C Toast If a user does Command+Shift+C the url gets copied to clipboard. I want to show a toast when that happens so that the user knows that something happened. Also, when the user copies on the url, show the dialog that this is a feature.

✅ Completed Features and Bugs

  • Copy/Paste Menu - Edit menu items that target the active tab
  • Persistent State - Settings and sessions are saved between launches
  • Sidebar Toggle - Collapsible sidebar for more screen space
  • Find in Page (Cmd+F) - Search text within the current page
  • New Tab - Create new tabs with keyboard shortcuts
  • when changing tabs, the new size of the view should be the size of the window
  • when closing sidebar there's a white strip
  • context menu
  • middle button to close tabs
  • command left to go back, command [ to go back
  • on new tab fix resolution
  • command+l to change the current tab
  • Cmd+Shift+C Copy URL - Quick keyboard shortcut to copy current page URL | Copy active tab's URL to clipboard without manual selection

Bugs

  • switcher on control+tab+tab doesn't close automatically, need to do enter
  • title changes on the frontend but is not actually stored or returned
  • when a website doesn't exist it just goes to a blank screen
  • support websites starting on https:// or http://

About

A sleek, fully hackable Electron-based browser built with React + TypeScript. Chromium-powered with 100% customizable UI - no C++ required.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages