Tiling desktop browser

Your logged-in apps,
side by side.

Splitser tiles real Chromium views in one window. Every pane is a whole browser -- its own history, its own zoom, its own find -- and every site it loads is a first-party tab, not an iframe borrowing cookies that are about to disappear.

Free and local. No installer yet -- it builds from source in two commands.

Splitser
github.com
dashboard.stripe.com
https://github.com/… Splitser
An illustration of the interface, not a screenshot -- but the gutter drags, same as it does in the app. Those two URLs are what a fresh install opens.

The tiling UI had to become a browser

This started as the Split Screen browser extension, and that extension works -- it tiles sites today. But an extension can only ever put other people's pages in an iframe, and that comes with four problems it can't engineer its way out of.

It only works by rewriting the web

In an iframe

To put a site in an iframe at all, the extension has to intercept traffic and strip the headers -- X-Frame-Options and CSP frame-ancestors -- that the site set to say no.

In a pane

Nothing gets rewritten. A pane is a top-level Chromium view, so a site loads exactly the way it loads in any other browser, headers and all.

And some sites say no in JavaScript

In an iframe

A page that checks top !== self blanks itself or escapes the frame regardless of which headers you stripped. There's no rule you can write to stop it.

In a pane

There is no frame to bust out of. Those pages just work.

And the hack has a deadline

In an iframe

A framed site is a third-party context, so a framed login leans on third-party cookies -- which every browser is in the middle of killing. When they go, embedded logged-in apps go with them.

In a pane

Panes are first-party. Your logins are ordinary first-party cookies, so nothing about that deprecation touches them.

And it can never fill your password

In an iframe

An extension tiling other people's sites has no way to autofill a login into them. Not "not yet" -- structurally cannot.

In a pane

This can. The built-in vault fills the matching login straight into a pane. It is the cleanest reason the tiling UI had to become a browser.

What it does today

Everything on this page is built and working. What isn't built is listed just as plainly.

Panes that are really browsers

Each pane carries its own toolbar -- back, forward, reload, favicon, address bar, bookmark star, split, close -- and its own navigation history. Not a viewport onto one page. A browser.

Drag to resize

Panes lay out as resizable columns. Grab the gutter between two of them and drag. Add a pane with the + or Ctrl+T, close it with the × or Ctrl+W.

Links open as panes

A target=_blank link or a window.open popup opens a new pane beside the one you clicked from -- not a new OS window stacked on top of your work.

Real find in page

Ctrl+F runs Chromium's native find: actual highlighting, an actual match count, next and previous. Not a script crawling the DOM and guessing.

Shortcuts that fire anyway

Keyboard shortcuts reach the shell even while a page has focus -- they're forwarded from the main process, so a page can't swallow them.

Per-pane zoom and mute

Ctrl+= / − / 0 zooms one pane without touching the others. Ctrl+M mutes it, and any pane making noise grows a speaker button.

An address bar that remembers

Type, and matches from your own browsing history drop down -- arrow keys and Enter to pick. Ranked by how often you actually go there.

Bookmarks and downloads

Star a page with Ctrl+D and reopen it from the ★ panel. Downloads land in your OS Downloads folder, with a ↓ panel tracking progress.

Session restore

Close it with six panes open, reopen it to the same six panes. On a fresh install it starts you with GitHub next to your Stripe dashboard.

Permission prompts that mean it

Camera, microphone, geolocation and notifications raise a real allow/deny dialog. The harmless permissions are granted quietly instead of nagging you.

Settings, and your data stays put

Set your home page and search engine; clear history, bookmarks or session. Everything lives in plain files on your machine.

No server, no account, no telemetry

There is no backend to sign in to and nothing phones home. The app has no network dependency of its own -- only the sites you point it at.

Keys that reach the shell

Shortcuts are forwarded from the main process, so they fire even while a page has focus. A page can't eat your Ctrl+T.

  • Ctrl+T Split -- new pane
  • Ctrl+W Close pane
  • Ctrl+L Focus the address bar
  • Ctrl+R Reload the pane
  • Ctrl+F Find in page
  • Ctrl+D Bookmark the page
  • Ctrl+K Open the vault
  • Ctrl+M Mute the pane
  • Ctrl+= Zoom in
  • Ctrl+ Zoom out
  • Ctrl+0 Reset zoom

The one an extension can't have

A password vault that actually fills the box

Because panes are real top-level views, Splitser can put your login into the page. Press Ctrl+K.

Master password PBKDF2-SHA256 (600,000 iterations) → AES-256-GCM
  • Your master password and the key it derives are never stored -- not hashed, not kept. Only ciphertext is written to disk, as vault.enc.
  • A wrong master password fails the GCM authentication tag on decrypt. That is the check -- there is no password hash sitting on disk to attack.
  • The derived key exists only in the isolated interface process while the vault is unlocked -- never inside a web page, never in the main process. Main is a dumb ciphertext store.
  • Idle auto-lock after 15 minutes. Copying a password auto-clears your clipboard about 25 seconds later.
  • Autofill puts the matching login into a pane, with a chooser when more than one matches. Capture a login from the page you are on, generate a new one, or import a CSV out of your old browser.

The interface is sandboxed

contextIsolation: true, nodeIntegration: false, sandbox: true. The UI reaches the main process only through a narrow preload bridge.

Every pane is treated as hostile

Web content gets no privileged bridge and no reach into the shell. It is the open web, and it is handled like the open web.

Your data is local files

History, bookmarks, session and settings are plain JSON in the app data directory, alongside the encrypted vault. Yours to read, back up, or delete.

What it needs from your machine

Runtime
Electron ^32 (Chromium ~128) -- that is the whole runtime
Dependencies
One: electron. No native modules, so nothing compiles per platform
Network
None of its own. No server, no backend, no account, no sync, no telemetry
Your data
~/.config/splitser · ~/Library/Application Support/splitser · %APPDATA%\splitser

There's no installer yet.

No packaged build, no code signing, no auto-update -- that work hasn't happened, so this page isn't going to hand you a download button. What it will hand you is two commands that genuinely work right now.

Build and run it