Files
UmbrelApps/whatsnext-evolu-relay/umbrel-app.yml
T
HarmenandClaude Opus 5 a092464e4d Relay 0.7.0: een weg naar binnen, en de melding bij elke klik weg
Vier punten van de gebruiker, opgekomen tijdens het beproeven met de testclient.

De getimede leerstand is eruit; de wachtlijst is de enige weg naar binnen. Zijn
redenering: allebei de wegen vragen iemand die bij de app kan, dus het is
dubbelop, en het venster is de zwakste omdat het iedereen toelaat die er
toevallig in verbindt. Dat weegt zwaarder nu de relay op een publiek wss-adres
kan staan. De oorspronkelijke reden voor de leerstand, dat je je eigen OwnerId
nergens kon aflezen, verviel toen de weigerlijst dat id ging tonen. Daarmee
verdwijnt ook de bug die hij dezelfde dag meldde: een geleerde eigenaar bleef in
de weigerlijst staan terwijl hij al kon schrijven en lezen, want decideOwner
haalde hem niet van die lijst af en de knop allow wel.

"Refused owners" heet "Waiting list", met de badge Waiting en een teller waar de
widget van het tijdvenster stond. Het veld op schijf blijft rejected: hernoemen
zou een migratie zijn voor een woord dat niemand ziet.

Het adres onderaan zei http:// en dat kan nergens werken, want de relay spreekt
WebSocket en nooit HTTP. Nu ws://<host>:3852, met een regel over wss://<domein>
zonder poort achter een reverse proxy. Dat is precies de fout die diezelfde dag
een ronde kostte bij het koppelen van de testclient.

De melding bij elke klik is weg. Die stond in de gewone stroom van de pagina,
dus alles eronder schoof omlaag en weer omhoog. Nu gaan de knoppen in de lijsten
even op slot tot de ronde de nieuwe stand heeft; foutmeldingen blijven wel staan,
want die zeggen iets wat je nergens anders ziet.

STATE_VERSION blijft 1 en een owners.json van 0.6.0 leest door: learning en
learningUntil worden gelezen, genegeerd en niet teruggeschreven. Een verhoging
zou store.js de allowlist van een werkende installatie opzij laten schuiven.

Twee toetsen bewaken dat de leerstand niet terugsluipt: een onbekende eigenaar
wordt geweigerd ook met learning: true in het bestand, en set-learning is een
onbekende actie. Beide mutatie-getest.

De compose staat op 0.7.0 zonder digest, zodat het hard faalt tot de image
bestaat. Bouwen, duwen en pinnen ligt bij de gebruiker.

Suite: 424 goed, 0 fout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 15:45:55 +02:00

194 lines
9.2 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.7.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: >-
There is now one way in: the waiting list. An owner that connects for the first time is turned away and
shows up there with its owner id, and you decide whether it may stay. The timed window that let in
whoever connected within two minutes is gone; it did the same job less carefully, and both ways need
someone at this page anyway. An owner you allow now leaves the waiting list instead of staying in both
panels at once.
Two smaller things. Clicking a button no longer pushes the page down with a notice; the buttons freeze
until the change has landed, and only real problems still get a message. And the relay address now
reads ws:// instead of http://, with a line about what it becomes behind a reverse proxy: the relay
speaks WebSocket and never HTTP, so the old address could not work anywhere.
Everything in 0.6.0:
The whole app now ships as one image: the relay, the status page and the small helper behind it. Until
now only the relay did, and the other two were mounted into stock images from the app folder. Nothing
changes in what the app does; the app data folder now holds only your data, and the icon updates along
with everything else.
Everything in 0.5.6:
Owners are now listed most recently seen first, in both panels. Until now the rows kept the order in
which owners first showed up, which stops meaning anything after a week. The order follows along on its
own: the page refreshes its lists every few seconds, so a reconnecting owner moves to the top without a
reload.
Everything in 0.5.4:
The status widget has moved to the right of the top row and is now called Status, matching Electrum
Gate. The two pages are one app store and they should read the same way.
Everything in 0.5.3:
Two adjustments to the refresh. The Relay card reads in the accent colour again when it says
Running, and on a phone the page drops back to the flat look: the glow is wider than a phone screen,
so it stopped being a gradient and became a haze over everything.
Everything in 0.5.2:
A visual refresh, shared with the other apps in this store. The page now has a soft glow behind it in
the accent colour, and the cards are translucent with a light edge and a shadow, so they read as
panels sitting on the page instead of flat blocks painted on it. Card corners are a little tighter,
and every framed element now uses the same corner radius. Nothing about what the relay does has
changed.
Everything in 0.5.1:
Fixes a message at the top of the page that never went away. Confirming that a command was sent is worth
saying for a second or two, but it stayed until you reloaded the page, so it was still there long after it
stopped being true. It now clears itself as soon as the relay has picked the command up. A refusal is the
exception and stays put: that is the only explanation you get of what went wrong.
Everything in 0.5.0, released the same day:
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: []