youros

FeaturesUsing it

Your devices

Every laptop, server, browser and agent of yours is a key, and your account is the signed list of which keys are yours and what each may do. Add one from a device you trust; revoke one from any other.

Nodes↑ Why · Alex loses a phone, and it opens nothing The lost phone is one key: revoking it touches nothing else.

Each node makes its own key, and the key never leaves it

A machine is revoked by its key; a copied key is two machines.

Shown when no API returns private key bytes.

0 of 1 test passed · 2 places in the code

  • not run a test node/tests/session.rs:104
  • code core/src/id.rs:24
  • code node/src/key.rs:2

One node can be revoked without touching any other

A lost laptop must not mean re-enrolling everything.

Shown when after revoking A, A is refused and B still connects.

0 of 2 tests passed · 0 places in the code

  • not run revoking one device leaves the others core/tests/log.rs:81
  • not run revoking one node leaves the others core/tests/seal.rs:97

Add a machine says which systems it runs on, and what each needs↑ Why · Alex reaches the laptop at home from a café Alex knows before installing whether the laptop at home is supported.

The first question is whether it runs on what you have; what isn't supported yet says so.

Shown when the list is generated from the targets CI builds and tests.

Not built: nothing in the code or tests names this yet.

Joining↑ Why · Alex reaches the laptop at home from a café Alex adds the home laptop with one pasted line.

A new node joins only from a device already trusted

Joining is the one step that widens the account.

Shown when joining without a trusted device's approval fails.

0 of 5 tests passed · 4 places in the code

  • not run only the account or an admin device writes core/tests/log.rs:35
  • not run a new node joins with the code core/tests/pair.rs:31
  • not run only an admin device can admit core/tests/pair.rs:125
  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • not run a paired node lets in whom its log says node/tests/session.rs:260
  • code core/src/pair.rs:206
  • code node/src/pair.rs:11
  • code web/app/app.tsx:847
  • code web/src/lib.rs:117

A pairing code lets in one key, before it expires

The code passes through a clipboard, a shell history or a camera.

Shown when a second key with the same code, or any key after expiry, is refused; the same hello again adds nothing.

0 of 2 tests passed · 2 places in the code

  • not run a code admits one key only core/tests/pair.rs:66
  • not run an expired code is refused core/tests/pair.rs:87
  • code core/src/pair.rs:206
  • code web/src/lib.rs:117

A relay carrying a pairing learns nothing usable and can't change it

The relay is the part someone else may run, and pairing widens the account.

Shown when the frames hold no key, name or log in clear; a changed byte fails the exchange and spends nothing.

0 of 3 tests passed · 1 place in the code

  • not run a relay that tampers gets nothing through core/tests/pair.rs:97
  • not run a test e2e/relay/client/src/main.rs:11
  • not run a test node/tests/session.rs:324
  • code core/src/pair.rs:206

The install line checks what it downloads, and needs no root

It's pasted into a terminal, so it does only what it says: one file into your home, checked, then the pairing, then the node started and kept running, serving your home folder. Nothing is typed after it: a systemd user service where there is one, otherwise the background and cron.

Shown when an ordinary user's install fetches the build, checks its SHA-256 against the one the script was served with, pairs and starts the node; on a machine with no systemd, the line alone leaves the node running and its files reachable.

0 of 1 test passed · 1 place in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • code node/install.sh:17

A phone or a second laptop is a device of the account, not a guest, and needs nothing typed.

Shown when a fresh browser opens the link, joins as an admin device, and reaches the machine the first browser added.

0 of 1 test passed · 1 place in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • code web/app/app.tsx:495

You choose how long a code works, and can type it

A link can't always be sent; a code read off one screen and typed into another can, and five minutes is enough to link a device.

Shown when a code of three words, made to last five minutes, joins a device typed by hand and is refused after; the relay, given every frame, can't test guesses at it, only make one per attempt.

Not built: nothing in the code or tests names this yet.

A backup code written down adds a device with nothing else online

Lose every device and the account goes with them, unless some way in was put aside first.

Shown when a backup code of twelve words, typed into a fresh browser with no device of the account online, adds it once; the device is an Admin only after a wait that any device left can veto, and a revoked or used code adds nothing.

Not built: nothing in the code or tests names this yet.

The log↑ Why · Alex loses a phone, and it opens nothing The revocation reaches the machine with Alex's notes before it answers anyone.↑ Why · Sam lets an AI help, and decides what it sees The agent's grant to one folder until Friday is an entry in the log, revocable from any device.

Peers' keys come from the log, never from a handshake

A key learned on the wire is a key an attacker can offer.

Shown when a handshake from a key not in the log is refused.

0 of 1 test passed · 1 place in the code

  • not run a paired node lets in whom its log says node/tests/session.rs:260
  • code node/src/auth.rs:23

The log merges in any order, and a revocation wins

Two devices add entries at once.

Shown when merging the same records in any order gives the same set; a revoked key stays revoked.

0 of 1 test passed · 0 places in the code

  • not run copies merged in any order agree and a revocation wins core/tests/log.rs:96

A grant gives one key rights on a scope, until it expires or is revoked

Every principal, a person, a machine or an agent, is a key holding grants.

Shown when a grant allows only its rights inside its scope before its expiry; an ungrant or a revoke of its subject ends it.

0 of 1 test passed · 0 places in the code

  • not run a grant covers its scope rights and time and no more core/tests/log.rs:179

The log crosses in every session, so a device added since is let in at once

A machine paired first must let in the phone added after it, with no server to ask.

Shown when a browser added after the machine paired reaches its files once another device has opened a session to it; what the machine sends back reaches the browser's copy.

0 of 2 tests passed · 2 places in the code

  • not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link e2e/node/pair.spec.mjs:14
  • not run a paired node lets in whom its log says node/tests/session.rs:260
  • code node/src/node.rs:165
  • code web/app/app.tsx:568

Every session carries both sides' log heads, and the difference crosses in it

Whoever you talk to first brings you up to date, so no one place decides what you know.

Shown when two nodes whose logs differ open a session; after it both hold the union.

Not built: nothing in the code or tests names this yet.

A holder catches up before it answers

Revocation takes effect where the data is.

Shown when a revocation waiting in the mailbox is applied before the first call after attach, and the revoked caller is refused.

Not built: nothing in the code or tests names this yet.

An account can set how stale a holder may be before it refuses calls

Availability against how fast a revocation bites; the account chooses, with a default.

Shown when past the limit without a sync a call is refused; after a sync it is allowed.

Not built: nothing in the code or tests names this yet.

Settings: yours, this device's, this moment's↑ Why · Jo's notes and code are on every device, and still files Jo's theme and workspaces follow Jo; the phone keeps its own zoom.

Settings today live in one browser and are lost with it, or sync whole, so a laptop's zoom lands on a phone.

Account state reaches every device

Workspaces, theme, keybindings, most settings.

Shown when a theme changed on one paired device shows on the other, through the relay, with nothing readable in the relay's capture.

Not built: nothing in the code or tests names this yet.

Device state stays on its device

Zoom, which workspace each screen shows.

Shown when zoom changed on one device leaves the other's alone; the first device's value is still readable from the second.

Not built: nothing in the code or tests names this yet.

A setting's tier is its schema's, not the writer's

Shown when a write of a device setting into the account doc, or the reverse, is refused.

Not built: nothing in the code or tests names this yet.

Devices that edit apart merge

Shown when two devices change different settings and the same one while apart; on reconnecting both hold both changes and agree on the third.

Not built: nothing in the code or tests names this yet.