dajet-browser

Dajet

Silence, styled. A small, fast, quiet web browser for the Mac.

Forked from Search by Office Commun (MIT) and renamed, as its license asks.

Dajet, with its tabs down the left and a page taking the rest of the window

dajet.ru/browser · macOS 14 or later · free · about 7 MB

Or build it yourself (see below). A Homebrew tap arrives with the first signed release.


What it is

Dajet is a browser with nothing in the way. A row of tabs — across the top or down the left, your choice — and the page. There is no toolbar, no start page, no sidebar of suggestions, no account to sign into, nothing that wants your attention. You type an address or a few words in one field and you are on the page.

It uses WebKit, the engine already inside every Mac (it is what Safari runs on). That is why the whole app is about 3 MB on disk and opens instantly: there is no second copy of Chromium to download, update and keep in memory.

It was built by a design studio that spends its whole day in a browser and was tired of the ones that had become products. This one is a tool.

What it does

What it doesn’t do

On purpose:

Privacy, concretely

What Where it is Who can read it
Passwords The macOS login keychain, as ordinary keychain items tagged Dajet Dajet. Any other app triggers the system’s permission dialog.
History, bookmarks, open tabs, hidden elements Small JSON files in ~/Library/Application Support/Dajet/ You.
Cookies and site data WebKit’s own store for the app The sites that set them, as in any browser.
Extensions Unpacked in ~/Library/Application Support/Dajet/Extensions/, their data in WebKit’s extension store Each extension, within the permissions you accepted when adding it.
Anything else Nowhere. There is no server. —

A private tab (⇧⌘N) has its own cookie jar and leaves nothing behind when it closes.

Apps you allow in System Settings › Privacy & Security › Automation can read the address and title of your tabs with AppleScript; private tabs are never shown.

Keyboard

   
⌘L address · ⌘K switch tab · ⌘T new tab · ⌘W close · ⇧⌘T reopen ⌘[ ⌘] back, forward · ⇧⌘[ ⇧⌘] previous, next tab · ⌘1–⌘9 jump
⇧⌘S tabs across the top or down the left · ⌘S fold the sidebar away · ⇧⌘B bookmark this page ⇧⌘R reading mode · ⇧⌘P float the video · ⇧⌘H hide something · ⇧⌘U what is hidden here
⌘F find · ⌘D duplicate tab · ⇧⌘C copy address · ⇧⌘V paste and go ⌘Y history · ⇧⌘J downloads · ⌘, settings · ⌥⌘L passwords

⌘R reloads the page; ⌥⌘R reloads it from origin, checking everything cached with the site again, as Safari’s Reload Page From Origin.

⌃Tab and ⌃⇧Tab walk along the row of tabs; Tab stays the page’s, for moving through a form. esc puts away whatever is open.

With Split View on, ⌥⌘N splits the current page and ⌃⌘← / ⌃⌘→ go from one page to the other. ⌘W closes the focused tab and gives the remaining page the whole area. Tabs › Separate Split Tabs keeps both tabs open separately.


For developers

Why the source is here

So anyone can read exactly what a browser handling their passwords and history is doing, build it themselves, or fix something that bothers them. The code is small enough to actually read — about 42,000 lines of Swift, no dependencies beyond what Apple ships with macOS, one file per concern.

Building it

A build you make yourself won’t be notarized or carry Office Commun’s Developer ID, so the first launch needs a right-click → Open (or an allow in System Settings → Privacy & Security). That’s expected — it’s the same thing that happens with any app that isn’t from the App Store or a notarized DMG. Your own build also keeps its passwords apart from a signed Dajet’s: the keychain tells the two apart by their signatures.

./build.sh release dmg also makes Dajet.dmg / Dajet.zip. ./build.sh release ship additionally notarizes and staples — that step needs a Developer ID certificate and Apple credentials, so it only really does anything for Dajet’s own releases.

How it’s put together

Testing it without closing it

Turn on Settings › General › Let a script drive Dajet and the running app listens on a Unix socket in its own folder (readable by your user only). ./bench at the root of the repository speaks it:

./bench open https://example.com     # a tab of its own, at the end of your row, marked with a flask
./bench wait 2e7e7e89                 # until it has loaded
./bench text 2e7e7e89                 # the page's text
./bench shot 2e7e7e89 out.png         # a picture of it
./bench click 2e7e7e89 "button.go"    # click, type, submit — through the page's own events
./bench probe                         # the window's state: open panels, a modal, every window
./bench close all

Bench tabs are never selected for you, never enter the session or the history, and go when the script says so. It is how this browser is tested while somebody is using it.

python3 Tests/split_view.py, after ./build.sh, checks Split View through the app’s own model in a hidden test run with its own settings and files, all removed afterwards. It never makes or shows a window; what can only be seen (dragging onto a page’s edge, the divider under the pointer, the motion) is checked by hand on a release candidate.

Contributing

Issues and pull requests are genuinely welcome — see CONTRIBUTING.md for how this is reviewed and what tends to get merged. The short version: small changes, no new dependencies, nothing that phones home. Found a security problem? Please report it privately, as SECURITY.md says.

License

MIT — see LICENSE. This is a fork of Search by Office Commun, renamed to Dajet as their license asks (the name “Search” and the original icon stay theirs). Do what you want with the code.