Negen punten uit echt gebruik met 0.4.0, alle negen gedaan. Twee ervan waren onderzoeksvragen en die staan onderaan. Evolu Relay 0.5.0 - Een tijdvenster van twee minuten voor nieuwe eigenaars, met een stopknop. De teller zit in het relay-proces en niet in de pagina: een teller in een tabblad dat je sluit, sluit de deur niet. policy.js kreeg learningUntil, isLearningOpen en expireLearning. - decideOwner kijkt naar isLearningOpen en niet naar het veld learning. De lus die een verlopen venster opruimt loopt elke twee seconden, en in dat gat zou een onbekende alsnog binnenkomen. - Zonder STATE_VERSION te verhogen, met een toets die dat verdedigt: een verhoging zou de allowlist van de draaiende installatie laten afwijzen en de deur sluiten voor eigenaars die er al in stonden. - Labels op een eigenaar-id, in een eigen labels.json met de agent als enige schrijver. Een label zegt niets over toegang, dus de relay hoeft het niet te weten; het is daardoor meteen opgeslagen en werkt ook als de relay omligt. - Geblokkeerde en geweigerde eigenaars in een kader, met een badge die zegt welke van de twee het is. De badge staat buiten het hover-blok, anders is dat onderscheid onzichtbaar tenzij je over de regel gaat. - Maatvoering gelijk aan Electrum Gate: 1760px, hetzelfde raster, icoon van 64 pixels, dezelfde kop, versienummer erachter. Uitleg uit de kaders, knoppen pas bij hover, geen voetregel. Electrum Gate 0.0.24 - Menu-item "About this app", in beide apps. - De statuswidget zei "Answering" met "answered in 7 ms, from inside the app" en zegt nu "Running" met de meting eronder. De nuance dat de controle van container naar container loopt is verplaatst naar een eigen kopje in die dialoog, waar er ruimte voor is; vier woorden waren te weinig. Toetsen en gereedschap - tests/test_relay_agent.py (nieuw, 65 toetsen) en tests/test_paginas_parsen.mjs (nieuw). Muteertests gedraaid op de beslissende regels. - Een dollarteken-toets in test_appstore_vorm.py. Het commentaar in drie bestanden beweerde al dat die test bestond; nu is dat waar. - Een toets dat er geen werkbestanden in een app-map staan. umbreld kopieert de hele map naar het apparaat en in de back-up. - tools/voorbeeldpagina.mjs maakt van een *.template een pagina die je in een browser kunt openen. Dat vond meteen twee echte opmaakfouten. De twee onderzoeksvragen - Een geweigerde eigenaar komt niet in de database: isOwnerAllowed zit in de WebSocket-upgrade, dus het is een 401 en een gesloten socket. Het gewenste gevolg treedt wel op, via de client: die is local-first en levert bij toelating de hele geschiedenis. Blokkeren werkt daarentegen pas bij de volgende verbinding, en dat staat als open punt. - De blobs zijn niet met een xpub te ontcijferen; een OwnerId komt daar niet uit. Met de SLIP-21-node van het apparaat kan het wel, maar die geeft volledige zeggenschap, dus dat hoort niet in een relay. Als plan-punt opgenomen bij de tool in HomeGit/Trezor. Nog niet uitgerold: de image 0.5.0 moet gebouwd en geduwd worden. De digest staat daarom niet in de compose, want een oude digest onder een nieuwe tag levert stil de oude relay. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
126 lines
6.4 KiB
YAML
126 lines
6.4 KiB
YAML
# De veldvolgorde hieronder is niet vrij: de packaging-documentatie van de
|
|
# officiele appstore schrijft hem voor. Zie de tabel in
|
|
# Docs/Referenties/Umbrel-appstore-spec.md.
|
|
#
|
|
# Wat de spec niet noemt staat onderaan dit bestand en niet ertussen. Dan is de
|
|
# voorgeschreven kop letterlijk goed en hoeft er bij inlevering alleen iets weg.
|
|
#
|
|
# `dependencies` is weggelaten en niet leeg gezet: deze app hangt van geen enkele
|
|
# andere app af. Een leeg veld zou suggereren dat er iets te kiezen valt.
|
|
manifestVersion: 1
|
|
id: whatsnext-evolu-relay
|
|
category: files
|
|
name: Evolu Relay
|
|
version: "0.5.0"
|
|
tagline: Encrypted sync and backup for your local-first apps
|
|
description: >-
|
|
Local-first apps keep your data on your own device and work whether or not you have a
|
|
connection. A relay is what lets a second device catch up: it holds the encrypted changes
|
|
until your other devices come online. This app runs that relay on your Umbrel, so the copy
|
|
in the middle sits on hardware you own.
|
|
|
|
|
|
It is the relay from the Evolu project, taken straight from the package they publish and not
|
|
reimplemented here. Any app built on Evolu can use it.
|
|
|
|
|
|
Your data is encrypted on your device before it leaves. The relay holds encrypted blobs,
|
|
padded so their size says nothing, and never has the key. What it can see is an owner id,
|
|
which identifies data without identifying you, along with timestamps and the addresses that
|
|
connect. Self-hosting does not make the data more secret than it already is; what it changes
|
|
is who keeps the encrypted copy, who can see that you are syncing at all, and whether anyone
|
|
can pull the service out from under you.
|
|
|
|
|
|
What this app adds is the part a self-hosted relay needs and a public one does not: control
|
|
over who may use it. New owners are accepted one at a time. The first one that connects is
|
|
remembered, and you close the door again once your own devices are paired; anything new is
|
|
refused until you open it. Any owner can be blocked or removed later.
|
|
|
|
|
|
The tile opens a status page behind your umbrelOS login, showing whether the relay is
|
|
running, how much it holds, when it was last written to, and which owners are allowed. Point
|
|
your app at the address shown there. Away from home you will need a way in, such as Tailscale
|
|
or a reverse proxy with your own domain.
|
|
releaseNotes: >-
|
|
Accepting a new owner is now a two minute window instead of a switch you have to remember to turn
|
|
back off. Open it, pair your device, and it closes on its own; you can close it early or restart the
|
|
two minutes if you need longer. The countdown runs on the Umbrel, so closing the page does not leave
|
|
the door open.
|
|
|
|
|
|
Owner ids can be given a name. They are long strings of random characters that say nothing about
|
|
which of your devices or wallets they are, so hover a row and label it. Names are kept on your Umbrel
|
|
and are never sent anywhere.
|
|
|
|
|
|
Blocked owners and refused attempts were two lists and are now one, because what you do with them is
|
|
the same: allow, or forget. Each row carries a badge saying which it was.
|
|
|
|
|
|
The page itself has been rebuilt to match Electrum Gate in this store: the same width, the same
|
|
layout, the same header, and the version number where you can see it. Buttons appear when you hover a
|
|
row, so a page you are only reading stays quiet. Explanatory paragraphs have moved into a new
|
|
"About this app" item in the menu, which also spells out what the relay can and cannot see.
|
|
|
|
|
|
Earlier releases:
|
|
|
|
|
|
0.4.0 fixed a status page that alternated between working and showing an error. It reached its helper
|
|
by a short name that another app in this store uses as well, so about half of its requests ended up
|
|
at the wrong app.
|
|
|
|
|
|
0.4.0 also dropped the wording that tied the app to one particular client. It is a general purpose
|
|
Evolu relay: any app built on Evolu can use it.
|
|
|
|
|
|
0.2.0 replaced the relay this app shipped with. Until 0.0.2 it packaged a vendor's own deployment,
|
|
which came with a quota manager and a PostgreSQL database and could not work outside that vendor's
|
|
service: clients skip the quota manager as soon as you point them at a relay of your own, while
|
|
that relay refuses every owner the quota manager never registered. 0.2.0 uses the relay from the
|
|
Evolu project instead. Measured, not assumed: a client synced to it and the data arrived. Three
|
|
containers became one relay plus a status page, and the database and its password are gone.
|
|
|
|
|
|
0.2.0 also added the status page behind your umbrelOS login, and control over who may sync.
|
|
|
|
|
|
Not verified yet: reading back from a second device, and whether every client platform can use a
|
|
relay of your own.
|
|
developer: "WhatsNext?"
|
|
website: https://sc.kamenier-hamer.nl/sysop/UmbrelApps
|
|
repo: https://sc.kamenier-hamer.nl/sysop/UmbrelApps
|
|
support: https://sc.kamenier-hamer.nl/sysop/UmbrelApps/issues
|
|
# De poort waarop umbrelOS deze app aanbiedt. Sinds 0.1.0 is dat de STATUSPAGINA
|
|
# en niet de relay: de app-proxy zet er de inlog van umbrelOS voor, en daar hoort
|
|
# een pagina wel achter en een relay niet. De cliënt wijst naar 3852, die de
|
|
# relay zelf publiceert. Zie docker-compose.yml en het plan Umbrelapp, PLAN.md §4h.
|
|
#
|
|
# Niet 4000, de eigen poort van de relay: die is een veelgebruikte poort en een
|
|
# botsing op de host merk je pas als de app niet start. Dat heeft bij Electrum
|
|
# Gate een keer een dag gekost, met 50002 tegen Fulcrum. 3851 sluit aan op de 3850
|
|
# van die app.
|
|
port: 3851
|
|
# Leeg laten bij een nieuw pakket; de plaatjes doet het store-team zelf.
|
|
gallery: []
|
|
path: ""
|
|
submitter: "WhatsNext?"
|
|
submission: https://sc.kamenier-hamer.nl/sysop/UmbrelApps
|
|
|
|
# ── Hieronder staat wat de voorgeschreven volgorde niet noemt ────────────────
|
|
#
|
|
# Het icoon, sinds 28-08-2026. Het bestand staat in deze repo en wordt door Gitea
|
|
# rauw uitgeleverd; dezelfde constructie als bij Electrum Gate. Bij inlevering in
|
|
# de officiële store moet deze regel juist weg, want die host iconen apart.
|
|
# Daarom staat hij als laatste: dan is het één regel schrappen.
|
|
icon: https://sc.kamenier-hamer.nl/sysop/UmbrelApps/raw/branch/main/whatsnext-evolu-relay/icon.png
|
|
|
|
# Wat niet in de back-up hoeft. Paden zijn relatief aan de app-datamap.
|
|
#
|
|
# Voor deze app is dat vrijwel niets, en dat is expres: de database ís de waarde
|
|
# van de app. Electrum Gate gebruikt dit veld wel, maar daar gaat het om een log
|
|
# en een statusbestand. Neem die keuze hier niet uit gewoonte over.
|
|
backupIgnore: []
|