cprussin/domicile

Wayland windows as DOM elements. Chromium as the compositor. May God have mercy on our souls.

TypeScript

0

913 commits

updated Sep 19, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

I Made an Abomination

1

Sep 19, 2026

README

Domicile

Wayland windows are DOM elements. Chromium is the compositor. May God have mercy on our souls.

const Shell = () => (
  <main>
    <app app-id="kitty" />
    <webview src="https://example.com" />
  </main>
);

A native Wayland window and a web page, siblings in the same DOM tree.

main {
  display: flex;
}

app {
  transform: rotate(17deg);
  border-radius: 12px;
  opacity: 0.9;
}

Want tiling? Use CSS.

Want floating? Use CSS.

Want to rotate Kitty 17 degrees because the user has sinned? Unfortunately, use CSS.

Domicile embeds Wayland surfaces directly into Chromium's layer tree. No screenshots, canvas copies, or other cowardice.

ARCHITECTURE.md · ROADMAP.md · running a desktop

Write a shell

A shell is a JavaScript module. You arrange the elements; Domicile handles the rest.

nix run github:cprussin/domicile -- ./dist/shell.js

Want to put Firefox inside Chromium?

Unfortunately:

<app app-id="firefox" />

WRITING-A-SHELL.md has the details. examples/minimal-shell is a complete shell built against the published SDK.

Manganese

Manganese proves the abomination can actually be lived in.

nix run github:cprussin/domicile#manganese

Tiling, workspaces, a bar, native apps, and browser windows. No clone or Chromium build required; that particular penance has already been paid.

See shell-manganese for configuration and keys.

shell-simple is the same terrible idea with fewer opinions.

Contributors

cprussin

465 commits

claude

447 commits

claude[bot]

1 commits

cprussin/domicile

Wayland windows as DOM elements. Chromium as the compositor. May God have mercy on our souls.

TypeScript

0

913 commits

updated Sep 19, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

I Made an Abomination

1

Sep 19, 2026

README

Domicile

Wayland windows are DOM elements. Chromium is the compositor. May God have mercy on our souls.

const Shell = () => (
  <main>
    <app app-id="kitty" />
    <webview src="https://example.com" />
  </main>
);

A native Wayland window and a web page, siblings in the same DOM tree.

main {
  display: flex;
}

app {
  transform: rotate(17deg);
  border-radius: 12px;
  opacity: 0.9;
}

Want tiling? Use CSS.

Want floating? Use CSS.

Want to rotate Kitty 17 degrees because the user has sinned? Unfortunately, use CSS.

Domicile embeds Wayland surfaces directly into Chromium's layer tree. No screenshots, canvas copies, or other cowardice.

ARCHITECTURE.md · ROADMAP.md · running a desktop

Write a shell

A shell is a JavaScript module. You arrange the elements; Domicile handles the rest.

nix run github:cprussin/domicile -- ./dist/shell.js

Want to put Firefox inside Chromium?

Unfortunately:

<app app-id="firefox" />

WRITING-A-SHELL.md has the details. examples/minimal-shell is a complete shell built against the published SDK.

Manganese

Manganese proves the abomination can actually be lived in.

nix run github:cprussin/domicile#manganese

Tiling, workspaces, a bar, native apps, and browser windows. No clone or Chromium build required; that particular penance has already been paid.

See shell-manganese for configuration and keys.

shell-simple is the same terrible idea with fewer opinions.

Contributors

cprussin

465 commits

claude

447 commits

claude[bot]

1 commits

Languages

TypeScript

32.3%

Rust

30.0%

C++

17.3%

Shell

15.6%

Nix

1.3%

Python

1.1%

JavaScript

1.0%