desktop environment, OS, pain in the ass to work on
  • Rust 89.7%
  • Python 5.1%
  • Shell 1.8%
  • JavaScript 1.4%
  • Fluent 0.9%
  • Other 0.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
qwolff 371b6d3649
test(web): the agent-shell agent waits out a pending step before reading on
On a loaded machine making the note answered "pending" and the listing
after it timed out, so the run found no note, wrote in the notebook and
then looked for a window named after the notebook. The agent's own
steps are now waited for as an agent asks after them, and a listing
the host did not answer in time is asked again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 13:47:02 -08:00
.cargo build(speech): use the published whisper.cpp bindings 2026-11-08 14:36:50 -08:00
.codex codex hooks: fixtures named after what they carry 2026-10-27 13:57:26 -07:00
.config ci: the cost table prints from one overrides list 2026-11-11 12:05:47 -08:00
.cursor feat(agent-loop): an isolated session for testing an app's agent experience 2026-10-02 11:53:07 -07:00
.forgejo build: lint fails when the unified workspace drifts from the members 2026-11-11 09:51:40 -08:00
.githooks build: the commit hook reads every catalogue 2026-11-11 09:51:40 -08:00
.github feat(sdk): license the app framework as MIT and document contributions 2026-10-24 16:10:13 -07:00
apps fix(pdf-viewer): paint the tabs and empty state in the window's language 2026-11-11 13:40:01 -08:00
crates test(web): the agent-shell agent waits out a pending step before reading on 2026-11-11 13:47:02 -08:00
dist fix(dev): the nested session proves its runtime once, so the first app opens without hashing it 2026-11-10 22:58:26 -08:00
docs fix(web): a justified line shows as HTML where the toolkit set its words 2026-11-11 12:21:21 -08:00
examples fix(example): the virtual list answers the window it is asked for 2026-11-09 22:15:14 -08:00
fuzz chore(deps): drop the dependencies nothing uses any more 2026-10-22 22:18:54 +02:00
keys docs: remove the remaining mentions of the t tool 2026-10-29 18:20:03 -07:00
os fix(tilo-sh): the check holds the person it made, and the key without the scope 2026-11-11 10:42:30 -08:00
scripts fix(compositor): a session surface that takes the keys takes keyboard focus from the app 2026-11-11 11:20:10 -08:00
sdk fix(chat): an agent's reply shows its answer, with what it did folded under it 2026-11-11 11:47:46 -08:00
shots docs: replace the doc sprawl with a small accurate set 2026-10-29 18:20:03 -07:00
tools feat(web): single-line fields are the page's own inputs 2026-11-11 12:21:21 -08:00
vendor fix(compositor): a session surface that takes the keys takes keyboard focus from the app 2026-11-11 11:20:10 -08:00
.containerignore chore: rename qOS to Tilo 2026-09-17 02:52:26 +00:00
.gitattributes ci: remove the unused t tool's config, checks and docs 2026-10-29 18:20:03 -07:00
.gitignore docs: replace the doc sprawl with a small accurate set 2026-10-29 18:20:03 -07:00
AGENTS.md test: build the app binaries a test starts before the run, never inside it 2026-11-03 16:41:00 -08:00
Cargo.lock test(tilolang): a list over two chunks shows every task, and a chunk a peer sends later shows without reopening 2026-11-11 13:02:55 -08:00
Cargo.toml build: the vendored iroh-relay stays outside the workspace 2026-11-11 09:51:39 -08:00
clippy.toml feat(ui): every widget draws its children through a keyed path 2026-11-11 02:52:24 -08:00
CONTRIBUTING.md refactor(session): remove the old shell 2026-11-01 21:48:05 -08:00
deny.toml feat(licensing): the client side an SDK reaches a workspace by is MIT 2026-11-10 17:32:02 -08:00
flake.lock build: package desktop session across Linux distros 2026-09-01 01:16:10 +02:00
flake.nix Expose Cargo vendor validation as Nix check 2026-09-30 11:05:18 +02:00
LICENSE chore: add AGPL-3.0 licence 2026-08-26 14:53:40 +02:00
LICENSE-MIT feat(sdk): license the app framework as MIT and document contributions 2026-10-24 16:10:13 -07:00
LICENSING.md feat(licensing): the app language's lexer is MIT, beside an AGPL compiler 2026-11-10 19:00:06 -08:00
README.md docs: replace the doc sprawl with a small accurate set 2026-10-29 18:20:03 -07:00
rust-toolchain.toml fix(web): tilo-ui builds for the web again 2026-10-28 00:05:21 -07:00
SECURITY.md chore: name tilo.sh as the Tilo app's site, in place of tilo.coffee 2026-11-08 17:49:03 -08:00
t.toml fix(tilo-sh): the check builds each of its two programs on its own 2026-11-11 12:56:56 -08:00

Tilo — a desktop for doing things together.

Website · Contribute · Build an app · Source & issues

Tilo is a Linux desktop built around collaboration and around working across your own devices. You share a workspace with someone and work together in every Tilo app, with full history, undo, search and sync between devices and people. You can add AI agents too, with their own permissions and history.

We build the desktop, the apps and the system underneath them together. Tilo is early alpha: expect things to break, and don't trust it with your only copy of important data.

How it works

  • Workspaces are the unit of collaboration. Each has its own members, roles, apps, layout and data, and is on every device of every member.
  • People and devices are separate. A member is an identity; each of their devices has its own key. Devices sync directly over iroh, end to end encrypted with MLS. A server is just a device that stores more.
  • All shared state is CRDT. Edits from several people and devices merge.
  • Apps are resources, actions and views. An app declares its typed state and the actions that change it; collaboration, history and undo, permissions, sync and search come from that. Scripts, assistive technology and agents use the same actions as the buttons.
  • The shell is built like an app. Launcher, top bar and settings run on the same toolkit and model as every other app. Windows sit in horizontally scrolling strips; tabs can group different apps.

The architecture overview explains the model and where it lives in the code; workspace.md is the full specification. The apps directory lists the apps.

Try it

There is no public release download yet. Getting started covers virtual machines, adding the desktop to an existing Linux system and installing the OS. To build and run it from source, follow CONTRIBUTING.md.

Help build it

You don't need to understand the whole system to help, or even to program: bug reports, small fixes, accessibility testing, translations, documentation and design feedback all count. CONTRIBUTING.md takes you from a checkout to a pull request; Build an app covers the app SDK.

Our home is code.tilo.so/tilo/tilo. GitHub is a mirror; please send issues and pull requests to Forgejo. People and coding agents are both welcome; if you use an agent, understand the change you submit and say what you tested. AGENTS.md is for the agent.

License and security

Tilo is open source: everything you need to publish an app is MIT, the rest is AGPL 3.0. See LICENSING.md.

Please report vulnerabilities privately as described in SECURITY.md, not in a public issue.