| Commit message (Expand) | Author | Age | Files | Lines |
| * | Player: redesigned cast remote | Christophe Besson | 10 hours | 1 | -2/+1 |
| * | Player: remote control while casting | Christophe Besson | 10 hours | 2 | -2/+32 |
| * | fix(android): the cast relay spools a receiver's lead to disk | Christophe Besson | 10 hours | 1 | -1/+15 |
| * | fix(client): the local player is silent while casting | Christophe Besson | 10 hours | 1 | -0/+15 |
| * | fix(client): a seek's first segments are held while it lands, not dropped | Christophe Besson | 10 hours | 2 | -2/+70 |
| * | feat(android): casting through a LAN relay and the platform cast SDK | Christophe Besson | 10 hours | 2 | -2/+122 |
| * | feat(android): downloads to disk and uploads through the system picker | Christophe Besson | 10 hours | 1 | -0/+90 |
| * | fix(client): a download written to disk no longer holds the whole file | Christophe Besson | 10 hours | 1 | -0/+53 |
| * | feat(android): device key, bundle key and node identities held natively | Christophe Besson | 10 hours | 2 | -2/+77 |
| * | fix(client): the node setup welcome is for a build that has a node | Christophe Besson | 10 hours | 1 | -0/+11 |
| * | feat(android): client shell with the interface from the package | Christophe Besson | 10 hours | 1 | -0/+210 |
| * | test(hub): shared keyring and transcript vectors | Christophe Besson | 10 hours | 3 | -0/+716 |
| * | fix(client): no confirmation dialog for adding a folder or its flags | Christophe Besson | 38 hours | 1 | -8/+4 |
| * | feat(mnp): sharing a folder is decided on the node's machine only (MNP 6.0) | Christophe Besson | 38 hours | 3 | -6/+51 |
| * | feat(client): list cast receivers as they answer | Christophe Besson | 40 hours | 1 | -0/+108 |
| * | test(hub): wrap a docstring ruff flagged | Christophe Besson | 2 days | 1 | -3/+3 |
| * | fix(client): rotating a group key asks nothing | Christophe Besson | 2 days | 1 | -3/+2 |
| * | fix(hub): a username is unique whatever its case | Christophe Besson | 2 days | 1 | -0/+24 |
| * | fix(hub): what an offer or a node message costs the hub is bounded | Christophe Besson | 2 days | 1 | -0/+51 |
| * | fix(client): the audit export never hands a spreadsheet a formula | Christophe Besson | 2 days | 1 | -0/+32 |
| * | fix: an MBK2 bundle is opened once and stored again as MBK3 | Christophe Besson | 2 days | 2 | -2/+80 |
| * | fix: downloads are marked and keep their extension; Explorer files are refused | Christophe Besson | 3 days | 1 | -0/+23 |
| * | fix(hub): a stranger who knows your name locks only browsers you never used | Christophe Besson | 3 days | 2 | -4/+114 |
| * | fix(hub): a group name fits its column and carries no control characters | Christophe Besson | 3 days | 1 | -0/+33 |
| * | fix: an identity signs a named kind, and a device approval answers a request | Christophe Besson | 3 days | 2 | -8/+102 |
| * | fix(hub): the pepper and a device key take the passphrase, not a token | Christophe Besson | 3 days | 4 | -12/+67 |
| * | feat: browser access, decided in the desktop application | Christophe Besson | 3 days | 2 | -0/+37 |
| * | feat(client): the desktop application keeps M and every node identity in its ... | Christophe Besson | 3 days | 2 | -0/+196 |
| * | refactor(hub): the transport holds an identity, never a private key | Christophe Besson | 3 days | 3 | -3/+53 |
| * | feat: bundles sealed per node under the passphrase and the hub's pepper | Christophe Besson | 3 days | 10 | -276/+406 |
| * | feat(hub): a bundle pepper per account, handed only to a proven session | Christophe Besson | 3 days | 1 | -0/+181 |
| * | fix(hub): a downloaded file opens in a tab only under a type that runs nothing | Christophe Besson | 3 days | 2 | -4/+55 |
| * | fix: the page connects to its own origin and reCAPTCHA, nowhere else | Christophe Besson | 3 days | 1 | -7/+10 |
| * | fix(client): the page names node operations, and the app confirms what widens... | Christophe Besson | 3 days | 3 | -7/+82 |
| * | fix(hub): the admin allow-list grants an account, not a username | Christophe Besson | 3 days | 1 | -0/+121 |
| * | fix: only the owner decides who hosts a group, and nobody is made a member un... | Christophe Besson | 4 days | 17 | -48/+787 |
| * | fix: a member can no longer lock a node, crash it with a link, or stop hub cl... | Christophe Besson | 4 days | 1 | -0/+103 |
| * | feat(hub): search title, description, canonical and noscript in the shell | Christophe Besson | 4 days | 2 | -1/+37 |
| * | feat(hub): sitemap.xml, named by robots.txt | Christophe Besson | 4 days | 1 | -1/+15 |
| * | refactor(hub): remove the closed relay registry | Christophe Besson | 5 days | 2 | -91/+0 |
| * | feat(client): save files under a name every platform can write | Christophe Besson | 5 days | 1 | -0/+42 |
| * | feat(hub): reports from public-group members, decided by an administrator | Christophe Besson | 5 days | 1 | -42/+163 |
| * | feat: nodes apply the content blocklist in their public groups | Christophe Besson | 5 days | 2 | -11/+94 |
| * | refactor: remove the public-content swarm | Christophe Besson | 5 days | 2 | -67/+3 |
| * | refactor: remove dead code across packages | Christophe Besson | 5 days | 1 | -1/+0 |
| * | fix: refuse an unsigned handshake challenge | Christophe Besson | 5 days | 2 | -7/+6 |
| * | fix(hub): say so when a lazily loaded view cannot be fetched0.16 | Christophe Besson | 5 days | 2 | -0/+211 |
| * | feat(hub): keep a show's detail modal open under the player | Christophe Besson | 6 days | 2 | -0/+340 |
| * | test: make both suites pass on Windows | Christophe Besson | 6 days | 65 | -217/+219 |
| * | fix(hub): the sidebar's Node section follows the node link | Christophe Besson | 6 days | 1 | -0/+55 |