Gebouwd en geduwd op de Umbrel, digest twee keer in de compose. Geen versieverhoging: 0.1.0 is nog nergens geinstalleerd. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
50 KiB
Changelog
Alle belangrijke wijzigingen aan dit project worden hier vastgelegd. Het formaat volgt Keep a Changelog en het project volgt Semantic Versioning.
Wat er nog moet gebeuren staat niet hier maar in de plannen; zie CONTINUE_HERE.md. Een lijst met geplande features op twee plekken loopt uit elkaar, en dan is geen van beide meer te vertrouwen.
[0.1.0] - 2026-09-07
Gebouwd en geduwd op de Umbrel op 08-09-2026, gepind als
sc.kamenier-hamer.nl/sysop/electrum-gate:0.1.0@sha256:97fee09b…7cfd8f.
Changed
- De app heeft een eigen image, gebouwd uit
tools/electrum-gate/metbuild.sh, op basis vannginx:1.30-alpinepluspython3. Eén image voor beide containers; de compose start hem alsservermet het standaardcommando en alsagentmetpython3 /app/agent.py. Tot nu draaide de app oppython:3-alpineennginx:alpinemet zijn eigen bestanden als*.templateuit de app-map gemount. Waarom, staat in het plan Eigenimage,PLAN.md§3; het korte antwoord is dat de programmacode nu niet meer in de app-data staat, en dat het startscript weer leesbaar is. - Het
command-blok van de compose isentrypoint.shin de image. Ruim honderd regels shell in een YAML-string, met elk dollarteken verdubbeld omdat umbreld anders elke${...}leegmaakte, is nu een gewoon script. Zelfde gedrag: TLS aan of uit naar de toestand vancert.conf, de verbindingsteller uit/proc/net/tcp, de herlaadlus met vangnettak, enexec nginxals laatste regel. - Het
log_formatstaat instream.confzelf. Het stond in een los bestand dat hetcommand-blok wegschreef, omdat een dollarteken in een template niet mocht. Die omweg is weg. - Het backend-adres komt uit de omgeving, in beide containers.
stream.confheeft twee plaatshouders zonder dollarteken dieentrypoint.shbij het starten invult; de server-service krijgt daarvoor dezelfdeGATE_ELECTRUM_HOSTenGATE_ELECTRUM_PORTals de agent. - De pagina haalt de versie en het backend-adres uit
status.json. umbreld vulde die tot nu rechtstreeks in de pagina in; nu de pagina in de image zit, geeft de composeAPP_VERSIONaan de agent door alsGATE_APP_VERSION, en zet de agentversionin de status. Ontbreekt hij, dan toont de kop geen versie in plaats van een verzonnen. icon.pngis updatebaar, want de image kopieert hem uit de app-map. Het bestand blijft ook daar staan, want het manifest wijst ernaar voor de tegel in de winkel.
Removed
- De vier
*.template-bestanden en hun mounts uit de app-map. Wat er overblijft:docker-compose.yml,umbrel-app.yml,icon.pngendata/.
[0.0.29] - 2026-09-04
Changed
-
De accentgloed achter de pagina staat uit, op verzoek van de gebruiker. Hij kwam in 0.0.25 met de opfrisbeurt uit het gedeelde designsysteem en deed wat hij moest doen, maar dit is een pagina waar je een blik op werpt, en een gekleurde waas over het hele venster is daar veel opsmuk voor. Wat blijft: de rand, de schaduw, het randlicht en de doorschijnende kleur van de vlakken. Alleen het licht erachter is uit.
Het is een schakelaar geworden en geen verwijdering, ook een verzoek van de gebruiker:
data-glow="on"op het html-element zet hem terug. De stand hangt aan de combinatie metdata-depth="deep"en niet aan zichzelf; dat is de tweede eis, en hij is juist. De gloed is de onderste van de vier dieptelagen, dus hem aanzetten op een vlakke pagina legt een verloop achter vlakken die er dekkend voor staan.Twee dingen liften mee:
- de blur gaat met de gloed mee. Een
backdrop-filterop een egale ondergrond levert per definitie niets op, dus zonder gloed is doorzichtigheid rekenwerk zonder resultaat. Dat argument stond al in de app, in het mobiele blok, en geldt nu voor de hele pagina; - dat mobiele blok is weg. Het viel onder 900 pixels terug op de vlakke stand, en dat was er om de gloed: die is 58rem breed en dus breder dan een telefoon, waardoor het geen verloop meer was maar een egale waas. Nu de gloed uit staat zette het blok drie dingen om die al uit stonden. Het staat in het commentaar beschreven voor wie de gloed terugzet.
Eén reparatie die hierbij aan het licht kwam: de selector met twee attributen heeft een hogere specificiteit dan de
:rootin deprefers-reduced-transparency-query, die daardoor de blur niet meer uit kreeg. Die query noemt de gloedselector nu letterlijk. Dat is dezelfde klasse fout als in 0.0.25, waar twee toegankelijkheidswensen in één media-query stonden. - de blur gaat met de gloed mee. Een
[0.0.28] - 2026-09-04
Removed
-
De widget met de blokhoogte is eruit, op verzoek van de gebruiker. Reden: het is niet aan deze app om die informatie te tonen. Deze app is een TLS-voordeur op een Electrum-server; wat de keten doet, staat in elke wallet en elke block explorer die de gebruiker al heeft. Wat er overblijft zijn vier widgets die alle vier over deze gateway gaan: waar het verkeer heen gaat, of dat antwoordt en hoe snel, hoe lang het certificaat nog goed is, en of de voordeur zelf staat.
Drie dingen liften mee, en die zijn geen opschoning maar noodzaak:
- de leeftijd van de meting stond onder de blokhoogte als "as of ... ago" en was daarmee de laatste plek op de pagina waar stond hoe oud de gegevens zijn. Twee eerdere versies haalden de voetregel (0.0.10-tijd, 19-08-2026) en de badge (20-08-2026) weg met precies dat argument: het staat al onder de blokhoogte. De regel is dus meeverhuisd naar de reactietijd, dezelfde meting uit dezelfde ronde. Hij staat daar ná de sparkline, zodat de vier onderregels op één lijn blijven;
- de bovenste rij is een raster van vier geworden in plaats van vijf. De breekpunten zijn daarmee 1100 en 560 pixels, en op elke stap staan er nu volle rijen. De derde stap die bepaalde wélke widget alleen kwam te staan is vervallen: vier deelt door twee;
- de agent neemt de blokhoogte niet meer over uit het antwoord. Het verzoek zelf blijft
blockchain.headers.subscribe, want dat is het goedkoopste verzoek waar een geldig antwoord op komt en de reactietijd wordt eruit gemeten. Wat er van het antwoord gebruikt wordt is dat het er is en dat het te ontleden valt. Ooknum()in de pagina is weg, de functie die een getal met spaties per duizend afbrak: de blokhoogte was de enige waarde die groot genoeg was om dat te vragen.
[0.0.27] - 2026-08-31
Fixed
-
Na elke herstart of update las de statuskaart vijf minuten lang "Not answering" met
[Errno 111] Connection refusederonder, terwijl de gateway van buiten gewoon werkte. Gemeld door de gebruiker. Het was een startvolgorde en geen storing, en de keten is de moeite van het onthouden waard:- de compose laat
serverná de agent starten (depends_on: [agent], want nginx losthttp://agent:8000bij het starten op en breekt af op een onbekende naam); build_statusdraait meteen bij het opstarten, vóór de eersteWAKE.wait;- de branch die de meting uitstelt hing alleen aan
reloaded, en die is bij een herstart met een ongewijzigd certificaatFalse. Er werd dus gemeten; - nginx luisterde toen nog niet op 50022, dus
ECONNREFUSED; - en dat bleef staan, want de volgende meting kwam pas na
SELF_CHECK_INTERVAL.
Twee reparaties, elk voor een helft. De eerste ronde van een proces meet niet maar zet
pending, zodat de kaart "Checking" toont in plaats van een onwaarheid; die toestand heeft geenat, dus de ronde daarna meet gewoon. En na een mislukking wordt er naGATE_SELF_CHECK_RETRY(60 seconden) opnieuw gemeten in plaats van na 300. Een geslaagde meting blijft op 300, want dat is de waarde die zelden verandert en die het activiteitenlog belast.Deze fout zat er sinds de zelfcontrole bestaat (27-08-2026); je moest er binnen vijf minuten na een herstart naar kijken om hem te zien. Vastgelegd in
tests/test_agent_zelfcontrole.py, mutatie-getest. - de compose laat
[0.0.26] - 2026-08-31
Changed
-
"Running" staat weer in de accentkleur. Hij volgde tot 0.0.25 helemaal geen statuskleur en was gewoon
--text-primary; de tegel in Evolu Relay hing wél aan--posen werd daar groen toen die variabele van oranje naar groen ging. Beide apps zetten die tekst nu op--accent-text, want "Running" is de eigen toestand van de app en geen positief cijfer.--posblijft groen en betekent "het staat in de plus". Alleenokkrijgt de kleur:offenpendingzijn niet fout maar ook niet in orde, en houden de gewone tekstkleur. -
Op een telefoon valt de pagina terug op de vlakke stand. De gloed is 58rem breed, ongeveer 928 pixels, dus op een telefoonscherm is het beeld smaller dan de gloed zelf: dan is het geen verloop meer maar een egale waas. De blur gaat in dezelfde stap eruit, want doorzichtigheid met niets erachter is gewoon grijs, en een
backdrop-filterkost op een telefoon wel per frame rekenwerk. Rand, schaduw en randlicht blijven staan. Grens: 900 pixels.
[0.0.25] - 2026-08-31
Changed
-
De opfrisbeurt uit het gedeelde designsysteem (
HomeGit/Docs/website-design-system.html), in dezelfde ronde doorgevoerd in Evolu Relay en in AssetApp. Drie dingen:- een accentgloed achter de pagina, uit de linkerbovenhoek, met een zwakker tegenlichtje
rechtsboven. Dit is het deel dat het meeste doet, en het is ook de vóórwaarde voor de rest: een
backdrop-filterop een egale ondergrond levert per definitie niets op, dus er moet eerst iets áchter de vlakken staan; - kaarten zijn doorschijnend met een randlicht en een schaduw. Ze lezen daardoor als panelen die op de pagina liggen in plaats van als vlakken die erop geschilderd zijn;
- één hoek voor élk buitenste kader. De kaart ging van 28 naar 20 pixels, gelijk aan het logkader en aan AssetApp; twee radii naast elkaar lezen als een fout in plaats van als een keuze. De geneste hoek van het logkader rekent mee.
De vijf accentkleuren van AssetApp (oranje, blauw, lila, teal, magenta) staan nu in het palet; deze app blijft op oranje. Wisselen kan door
data-accentop<html>te zetten, er is bewust geen knop voor: dit is een statuspagina met licht/donker en verder geen bediening. Om dezelfde reden staat de diepte hier vást aan, terwijl het in AssetApp een instelling is. - een accentgloed achter de pagina, uit de linkerbovenhoek, met een zwakker tegenlichtje
rechtsboven. Dit is het deel dat het meeste doet, en het is ook de vóórwaarde voor de rest: een
-
--posis groen geworden in plaats van oranje. Hij volgde het accent, en dat las als merkkleur in plaats van als betekenis. Zichtbaar gevolg: de badge "Running" is groen.
Fixed
prefers-reduced-motionzette per ongeluk de hele opmaak plat. Die wens stond samen metprefers-reduced-transparencyin één media-query. Windows heeft een schakelaar "Animatie- effecten" die bij veel mensen uit staat, en die zetreduced-motionopreduce; op zo'n machine bleef er van de nieuwe opmaak niets over. De twee zeggen ook echt iets anders: de ene gaat over doorschijnende vlakken, de andere over beweging. Ze staan nu apart, enreduced-motionhaalt alleen de overgang weg.
[0.0.24] - 2026-08-30
Added
-
Een menu-item "About this app…", met een dialoog erachter. De marketingtekst stond alleen in
umbrel-app.ymlen dus alleen in de winkel, terwijl je juist ná het installeren nog eens wil kunnen nalezen wat de app voor je doet. Vijf kopjes: waar het voor is, het certificaat, wat er niet in het midden zit, wat de statuswidget bewijst, en welke wallets.Dezelfde toevoeging zit in Evolu Relay, op verzoek van de gebruiker: het is één store en de twee pagina's horen zich hetzelfde te gedragen.
Changed
-
De statuswidget zei "Answering" en zegt nu "Running". Gemeld door de gebruiker: die tegel is onduidelijk, en die van Evolu Relay leest meteen. Dat klopt om twee redenen die los van elkaar staan.
"Answering" is een tegenwoordig deelwoord en leest dus als een handeling die bezig is, niet als een toestand; "Checking" ernaast is er wél een, en dat maakt het erger. En de onderregel "answered in 7 ms, from inside the app" probeerde in vier woorden een nuance te dragen waar vier woorden te weinig voor zijn: wie het niet al weet, leest er niets uit.
De onderregel is nu "the TLS port answered in 7 ms". De nuance is niet weggelaten maar verplaatst naar de nieuwe dialoog, onder een eigen kopje: de controle loopt van container naar container, dus een router die de poort niet meer doorstuurt leest hier alsnog als Running. Haal dat kopje niet weg zonder in de widget iets terug te zetten, want dan staat die bewering nergens meer.
[0.0.23] - 2026-08-28
Fixed
-
De pagina kon leeg blijven of oude waarden tonen zodra er een tweede app uit deze store bijkwam. Hij bereikte zijn agent via de korte containernaam
agent, en Evolu Relay heeft er ook een op poort 8000. Alle apps van umbrelOS delen één Docker-netwerk, dus Docker verdeelde die naam over beide containers en ongeveer de helft van de verzoeken kwam bij de verkeerde app uit.Beide apps wijzen nu naar de volledige naam
<app-id>_agent_1, en die vorm is per app uniek.tests/test_appstore_vorm.pytoetst dit voortaan voor élke app in de store, want dit is precies het soort fout dat stil terugkomt bij de volgende app die iemand toevoegt.
[0.0.22] - 2026-08-27
Changed
-
Meer diepte en contrast in het lichte thema, overgenomen uit AssetApp op verzoek van de gebruiker. Twee dingen samen: de kaders krijgen een rand naast hun schaduw, en
--borderen--border-midgaan van 0,07 en 0,11 naar 0,12 en 0,18 zwart.De reden is dat een zachte schaduw op wit wel diepte geeft maar geen begrenzing: waar een kader ophoudt bleef een kwestie van kijken. De rand doet dat werk, en de schaduw is daarom strakker geworden (2 en 16 pixels in plaats van 3 en 24) zodat het samen niet zwaar wordt. Het donkere thema verandert niet: daar staat een lichte rand op een donkere ondergrond en die zie je hoe dan ook.
De opgehoogde randkleur raakt meer dan de kaders: ook de scheidingslijnen tussen lijstregels, het menupaneel, de dialoog en de invoervelden. Dat is de bedoeling en het is dezelfde stap die AssetApp al gezet had.
Dezelfde wijziging is doorgevoerd in het gedeelde ontwerpdocument
HomeGit/Docs/website-design-system.html, dat de bron is waar deze pagina op gebaseerd is. Zonder dat zou de volgende app die het document volgt de oude waarden weer overnemen. Let op: die map staat niet onder versiebeheer.
[0.0.21] - 2026-08-27
Changed
-
Eén lettergrootte voor de waarde van alle vijf de widgets. Er waren er drie: 1,9rem voor een getal, 1,5rem voor
unknownen 1,3rem voor een woord. Naast elkaar op één rij viel dat op, en terecht:964 307oogde belangrijker danFulcrumofAnsweringernaast, terwijl ze even belangrijk zijn. Nu 1,55rem voor alle drie de gevallen. Dat is de maat waaropWrong certificateop een vijfde van de breedte binnen twee regels blijft en een blokhoogte zijn gewicht houdt. -
De dialoog sluit met een kruisje in plaats van het woord
Close. Het maalteken (U+00D7) en geen letter x, en niet rood: er gaat niets kapot van sluiten, en rood is op deze pagina voor het geval waar je iets aan moet doen. Hetaria-labelblijftClose, want een schermlezer die "maalteken" voorleest zegt niets over wat de knop doet.
[0.0.20] - 2026-08-27
Changed
- De widgets op de bovenste rij van 10,5rem naar 12rem. In 0.0.19 stond hier dat de gebruiker uitdrukkelijk géén extra hoogte wilde; dat berustte op een tikfout in zijn bericht ("mag niet iets groter" waar "wel" bedoeld was) en is diezelfde dag rechtgezet. De uitlijning uit 0.0.19 blijft de eigenlijke oplossing voor de leegte; dit is er los van een kwestie van lucht tussen titel en waarde.
[0.0.19] - 2026-08-27
Changed
-
De onderregel van een widget staat nu onderin het vak in plaats van bovenin. Dit was het verschil dat de gebruiker zag: de sparkline is precies 34 pixels hoog en raakt dus de onderrand van het vak dat
.stat-subreserveert, terwijl een regel tekst in datzelfde vak bovenaan begon en er leegte onder overliet. Eén widget leek daardoor uitgelijnd en de andere vier niet. Opgelost metdisplay: gridplusalign-items: end, en niet met flex: dan blijft de tekst een gewoon blok dat afbreekt zoals het hoort, ook de mono-variant met een lange domeinnaam.De hoogte van de bovenste rij is niet verder vergroot. Dat was de andere weg naar hetzelfde beeld en de gebruiker wilde hem uitdrukkelijk niet.
-
De chevron van
Setting up your walletstaat links vóór de titel in plaats van rechts aan de rand, en kleurt mee bij hover, net als het menu rechtsboven. Links is waar het driehoekje van de browser ook gestaan zou hebben, en het staat bij het woord waar het iets over zegt. Dicht wijst hij naar rechts, open naar beneden.
[0.0.18] - 2026-08-27
Fixed
-
De zelfcontrole verbond met de verkeerde container. De Status-widget meldde
Not answeringmet[Errno 111] Connection refusedop een gateway die gewoon werkte. De fout was veelzeggend: geweigerd betekent dat de naam wél oploste, alleen niet naar ons.GATE_TLS_HOSTstond op de servicenaamserver, en dat is een naam die meer apps op een Umbrel gebruiken; op een gedeeld netwerk is het dus een gok wie je krijgt. Nu de volledige containernaamwhatsnext-electrum-gate_server_1, dezelfde vorm die umbrelOS vanAPP_HOSTverlangt.Dit was de eerste keer dat de widget zijn nut bewees, en meteen op zichzelf: zonder de foutmelding op de pagina was dit een stille verkeerde meting geweest.
Changed
Bijstellingen van de gebruiker na het bekijken van 0.0.17, allemaal op de pagina.
- Het menu is drie kale punten met een accent bij hover, geen knop meer. Een rand en een vlak voegden niets toe naast een kop die verder alleen het merk bevat.
- De eerste menuregel heet
Settings…en herhaalt de naam van het actieve certificaat niet meer; die stond al als onderregel van de certificaatwidget. De dialoog heet nu ookSettings, want anders klik je op het ene woord en kom je op het andere uit. - De dialoog opent in het midden van het scherm in plaats van linksboven. Niet op de standaardopmaak
van de browser vertrouwen: die plaatst een
dialogten opzichte van zijn dichtstbijzijnde geplaatste voorouder, en deze staat in het raster van de pagina. - De widget
GatewayheetStatus. - De widgets zijn iets hoger, met hun waarde langs de onderrand. Zonder een minimumhoogte bepaalde de hoogste widget de rij, en dan stond de titel vrijwel tegen de waarde aan.
- Reactietijd en blokhoogte zijn omgedraaid, zodat de reactietijd naast de server staat waar hij over
gaat. Dat is meteen de stapelvolgorde op een smal scherm; er staat nergens een
orderin de CSS. - Het activiteitenlog is half zo hoog (30vh in plaats van 60vh).
[0.0.17] - 2026-08-27
Changed
-
De tweede indeling: vijf kleine widgets op de bovenste rij. Electrum-server, blokhoogte, reactietijd, certificaat en de zelfcontrole uit 0.0.16, die daarmee eindelijk ergens te zien is. Opgegeven door de gebruiker; ontwerp in het plan Webinterface,
PLAN.md§4a2.Dit is minder mechaniek dan er stond, niet meer. Twee koppelingen vervallen die er alleen waren omdat kaders naast elkaar stonden: de tegels hoefden niet meer mee te rekken met de hoogte van hun buur, en het logblok en de certificaatlijst hoefden niet meer samen te groeien en te krimpen. Dat laatste was de hele inhoud van 0.0.13.
Vijf past niet in het twaalfkolomsraster, dus die rij heeft een eigen raster van vijf. De stappen bij het versmallen staan expliciet in de CSS en zijn niet aan
auto-fitovergelaten: met vijf items levert elke stap een ongelijke laatste rij op, en dan wil je zelf bepalen welke widget alleen komt te staan. -
Kiezen, uploaden en de certificaatdetails naar een dialoog achter een menu rechtsboven, samen met de licht/donker-schakelaar. Het menu toont drie punten en geen hamburger, op aanwijzing van de gebruiker: dat is wat umbrelOS bij zijn eigen apps doet.
De eis die dat oproept staat in de code en niet alleen in het plan. Een verse installatie heeft geen certificaat, en de pagina is de enige plek waar je er een kiest; dat achter een menu verstoppen is de klem van 0.0.3 in een andere vorm. De foutmelding bovenaan blijft daarom staan en heeft nu een knop die de dialoog opent. Het menu is de weg terug voor later, die knop is de weg erheen nu.
-
Het activiteitenlog over de volle breedte, en
Setting up your walletdichtgeklapt en compacter. Twee kopieerknoppen in plaats van één per wallet: er zijn feitelijk maar twee vormen van hetzelfde adres, dus tien knoppen waren negen keer dezelfde handeling. Dat draait een besluit van 19-08-2026 terug, met één voorwaarde die in het plan staat: de wallets blijven gegroepeerd onder de vorm die ze vragen, want zonder die groepering staat er wel een adres maar niet meer waar het bij hoort. -
De licht/donker-regel toont de huidige stand en niet de handeling. Als losse knop stond er "Light" terwijl de pagina donker was, en dát klopte: een knop belooft wat er gebeurt als je hem indrukt. Als menuregel met een waarde erachter leest dezelfde tekst als een bewering over hoe het nu staat, en dan is hij fout.
Removed
.col-5en.col-7uit de CSS. Er is geen rij meer die in tweeën valt, en een ongebruikte klasse nodigt uit tot een indeling die er niet meer is.
[0.0.16] - 2026-08-27
Added
-
De zelfcontrole: de agent verbindt met de eigen TLS-poort. Tot nu toe keek de app of de Electrum-server antwoordde, maar niet of hij zélf antwoordde, en dat laatste is zijn enige taak. De agent zet nu een TLS-verbinding op naar poort 50022 van de nginx-container ernaast, maakt de handdruk af en vergelijkt het getoonde certificaat byte voor byte met het gekozen bestand.
Die vergelijking is het punt, en niet de handdruk. Een certificaatwissel die nginx nooit heeft toegepast ziet er van buiten goed uit en loopt pas bij de wallet stuk op naamverificatie; dat is precies het geval waar een controle op vertrouwen blind voor is. Er wordt daarom bewust niet tegen de certificaatwinkel van het besturingssysteem geverifieerd: een zelfondertekend certificaat uploaden is een ondersteunde bron, en die opstelling zou dan als kapot gemeld worden.
De uitkomst staat in
status.jsonondertls.self_check, met vier toestanden:off(geen certificaat gekozen, dus geen poort),ok,wrong-certificateenfailed. Bij een wijziging komt er een regel in het activiteitenlog; elke ronde dezelfde regel zou ruis zijn.Wat het niet bewijst, en dat is minder dan het plan beloofde. Er wordt na de handdruk niets verstuurd, dus de doorverbinding naar de Electrum-server zit er niet in; die wordt apart bevraagd. En de verbinding loopt van container naar container, dus de poortmapping naar de host en de doorstuurregel in de router blijven ongetest.
Changed
-
De controle draait niet elke ronde, en zijn eigen sessies worden uit het activiteitenlog gefilterd. Elke verbinding met poort 50022 is voor nginx een gewone sessie en levert dus een logregel op. Zonder rem zou het log elke minuut over onszelf gaan in plaats van over wallets. Er wordt daarom hoogstens elke vijf minuten gemeten, en de agent onthoudt wanneer hij zelf verbond om de bijbehorende regel weg te laten.
Twee eigenschappen van die filter horen erbij: hij laat alleen regels weg waarin niets is doorgegeven, want een sessie met verkeer kan een storing zijn en die verbergen is erger; en hij kan een échte scan missen die toevallig in hetzelfde venster van twee seconden eindigde.
-
Vlak na een certificaatwissel wordt er juist niet gemeten. nginx herlaadt binnen tien seconden, dus een meting op dat moment ziet nog het vorige certificaat en zou dat als storing melden. De meting schuift één ronde op, en dan is het meteen de interessantste die er is.
[0.0.15] - 2026-08-25
Deze regel is op 27-08-2026 alsnog toegevoegd; bij de verhuizing is de changelog overgeslagen.
Changed
-
De app store is verhuisd naar
UmbrelApps, enwebsite,repo,support,submissioneniconwijzen daarheen. De app zelf is ongewijzigd: het app-id hangt aan het store-idwhatsnexten niet aan de URL. Aanleiding was Evolu Relay, want umbrelOS leest per store één repo en een tweede app maakte een naam naar deze ene app onhoudbaar.Wat hierbij geleerd is en verder gaat dan deze release: een geïnstalleerde app overleeft een wisseling van store-URL niet. umbrelOS tóónde de update wel en voerde hem niet uit, zonder foutmelding. Deïnstalleren plus opnieuw installeren loste het op, en de prijs daarvan is de certificaatkeuze.
[0.0.14] - 2026-08-20
Added
-
probenaastrefusedin het activiteitenlog. Aanleiding was een vraag van de gebruiker over een regelrefused ... status 500met nul bytes: dat is een TLS-handdruk die niet is afgemaakt, en op een poort die in de router doorgestuurd staat vrijwel altijd een scanner. Elke scan gaf dus een rode regel die suggereerde dat de app iets geweigerd had, terwijl er niets gebeurd was.Het onderscheid ligt bij de bytes, niet bij de duur of de status. Nul in beide richtingen betekent dat er nooit iets doorgegeven is; die tellers gaan over de doorgegeven verbinding en niet over de handdruk, wat af te lezen was aan de sessies van de gebruiker. Een scan die tien seconden open blijft is nog steeds een scan, en een sessie die na een halve seconde omvalt maar wél verkeer had is nog steeds een storing. Rood blijft dus voor
refused, en dat is nu het geval waar je iets aan moet doen.De notitie bij een probe blijft feitelijk ("nothing exchanged, status 500") en beweert niet dat het de handdruk was; bij status 500 is dat de bijna zekere oorzaak, en bijna is hier niet genoeg. De bytes worden bij nul weggelaten, want "0 B from wallet" naast die notitie is dubbelop en "wallet" is dan ook het verkeerde woord.
Changed
- Meer ruimte tussen de kaders, van 1 naar 1,5rem, op verzoek van de gebruiker. De kaders hebben 1,8rem ruimte binnenin en een radius van 28 pixels; met 1rem ertussen was de ruimte tússen twee kaders kleiner dan die erbinnen, en dan plakken ze aan elkaar.
[0.0.13] - 2026-08-20
Fixed
-
De twee kaders van die rij groeien en krimpen nu samen. Dit was de echte oorzaak van het hoogteprobleem dat 0.0.12 alleen kleiner maakte: het logblok stond op
flex: 1 1 auto, en met basisautotelt zijn inhoud mee voor de natuurlijke hoogte van zijn kader. Een log met tien regels duwde de rij dus hoger dan het certificaatkader nodig had, en dat kwam aan de andere kant terug als leegte onder de knop, precies de leegte die verdween als je het uploadblok uitklapte.Nu
flex: 1 1 0: het logblok draagt niets bij aan die natuurlijke hoogte, het certificaatkader bepaalt de rij, en uitklappen laat beide kaders meegroeien. Wat er niet in past scrolt in het logblok, en daar is een log voor. Demax-heightvan 620 pixels kon eruit, want de rij is nu begrensd door het kader ernaast.Op één kolom geldt het omgekeerde en daar staat het log op zijn eigen hoogte, met een plafond van 60% van het venster: er staat dan geen kader naast om de hoogte van te lenen, en een etmaal aan regels zou anders één lange pagina worden.
[0.0.12] - 2026-08-20
Changed
- Het certificaatkader en het activiteitenlog zijn minder hoog. Gevraagd door de gebruiker. Het
mechanisme erachter is het opschrijven waard: de twee kaders staan in één rij met
align-items: stretch, dus het hoogste bepaalt de hoogte. Het certificaatkader is dat, en alles wat daar aan ruimte overbleef kwam als leegte terug ónder het log ernaast. Krappere marges rond de keuzekop en de knop, minder ruimte om het uploadblok, en de bodem van het logblok van 180 naar 150 pixels. - De regel over Nginx Proxy Manager is eruit. Die stond er als bron van certificaten, terwijl die mount nog uitgecommentarieerd in de compose staat omdat het pad niet geverifieerd is; wat er stond kón dus niet waar zijn. De uitleg is nu één regel, en waar een certificaat vandaan komt staat toch al in de optie zelf.
[0.0.11] - 2026-08-20
Fixed
- De kopieerknoppen staan op een telefoon weer op één lijn. Regressie van 0.0.10: door het omvouwen
volgde de knop de tekst, en het ene adres is langer dan het andere. Nu
margin-left: autoop de knop, en bewust nietspace-betweenop de rij: bij de gesplitste weergave staat er ook een notitie naast de waarde, en die hoort daar tegenaan te blijven staan.
Changed
- De winkeltekst zegt nu wat er níet in het pad zit. De gebruiker merkte op dat het vermijden van
tunneldiensten en VPN-producten bij hem juist de aanleiding voor deze opstelling is, en dat dat goed is
voor de marketing. Dat is ook het scherpere argument: een tunneldienst termineert je verkeer onderweg en
een mesh-VPN vraagt een account plus een client op elk apparaat, terwijl deze app geen van beide vraagt.
Eén alinea in
description, met de doorgestuurde poort erbij als wat het wél vraagt. Zie Vergelijkbare-apps.md, waar ook de Engelse formulering staat voor hergebruik in de PR bij inlevering. - Het uploadblok staat nu boven de keuzelijst, tussen de rij "Last reload" en de kop "Choose a
certificate". Voorgesteld door de gebruiker om een horizontale lijn uit te sparen: de lijstregel erboven
trekt er al een, dus het blok heeft geen eigen
border-topmeer nodig. Het is bovendien de logische volgorde, want wat je uploadt komt in die keuzelijst terecht: eerst toevoegen, dan kiezen.
Bevestigd
0.0.10na0.0.9levert een update op. Nagekeken op de Umbrel toen de melding gewoon verscheen. Daarmee is de aanname uit 0.0.10 bevestigd en een tekstvergelijking met groter-dan uitgesloten; tweecijferige versiedelen zijn dus veilig. Vastgelegd in Umbrel-appstore-spec.md.- De mobiele weergave werkt, gecontroleerd op een telefoon door de gebruiker. Daarmee is 0.0.10 geverifieerd op het enige punt dat niet te toetsen was.
[0.0.10] - 2026-08-20
Fixed
- Op een telefoon liep de pagina buiten beeld. Gemeld door de gebruiker. De directe oorzaak was
minmax(420px, 1fr)op de clientlijst: dat eist een track van minstens 420 pixels, ook op een scherm dat smaller is, dus liep de hele lijst met kopieerknoppen eruit. Numinmax(min(420px, 100%), 1fr), waarmee de track tot de schermbreedte mag krimpen. - De lijstregels en de logregels vouwen onder 700 pixels om. Wat op een brede kaart rechts staat, komt
daar onder de titel te staan. Voor de logregels is dat een herziening van een eerdere keuze: die scrollen
liever dan dat ze afkappen, en dat blijft zo op een breed scherm, maar op een telefoon betekende het dat
je de bytes nooit zag.
overflow-wrap: anywhereerbij, wanthost:poort:protocolheeft geen spatie en kan nergens afbreken.
Changed
- De tegel met het aantal dagen tot het certificaat verloopt is eruit, op verzoek van de gebruiker. De kaart Certificate zegt hetzelfde en noemt de datum, en onder de dertig dagen staat er een melding bovenaan de pagina. Backend response neemt de vrijgekomen ruimte en is nu twee kolommen breed; dat is het enige op die rij dat met breedte iets doet, want daar hangt de sparkline in.
Over het nummer: 0.0.10 en niet 0.1.0. Dat is alleen een risico als umbreld versies als tekst zou
vergelijken, want dan is 0.0.10 kleiner dan 0.0.9. Elke app in de officiële store gaat ooit van .9
naar .10, dus dat zou daar overal stuklopen; de aanname is dat het een gelijkheids- of semver-vergelijking
is. Blijft de update-melding weg, dan is dít de plek om te kijken.
[0.0.9] - 2026-08-20
Changed
-
Alles wat de app schrijft staat onder
data/.${APP_DATA_DIR}/runtimeen.../certszijn${APP_DATA_DIR}/data/runtimeen.../data/certsgeworden. Gevraagd door de gebruiker met het oog op publicatie in de officiële appstore, en de packaging-documentatie van umbrel zegt het woordelijk: gebruikersstaat, config, uploads en gegenereerde geheimen horen onder${APP_DATA_DIR}/data/..., met een.gitkeepin de repo voor elke map die bij de eerste start moet bestaan. Die twee.gitkeeps staan er nu.Dit vraagt opnieuw kiezen, of opnieuw installeren. Bij een update kijkt de app niet meer in de oude map, dus zelf geüploade certificaten en de gemaakte keuze zijn weg. Certificaten uit Zoraxy niet.
Added
backupIgnorein het manifest, voordata/runtime/stream.logendata/runtime/status.json. Die twee groeien of veranderen elke minuut en zijn nergens voor nodig in een back-up. Wat er bewust niet in staat isdata/runtime/config: daar zit de certificaatkeuze, en dat is het enige in die map dat niet opnieuw te bedenken is. Paden zijn relatief aan de app-datamap; nagekeken inapp.tsvan umbreld.- Een toets die deze conventie vasthoudt. Bij de volgende mount die iemand toevoegt is dit precies het detail dat je vergeet, en er gaat niets van stuk; het valt pas op bij het inleveren.
Het manifest op orde, zonder eigen versienummer
Later diezelfde dag, en met opzet geen verhoging naar 0.0.10: de winkeltekst leest umbrelOS uit de repo-kloon, dus dit is zichtbaar zonder update, en aan de app verandert niets.
- De velden staan in de voorgeschreven volgorde. Die is geen smaak; de packaging-documentatie van de
officiële store schrijft hem voor. Wat de spec niet noemt (
icon,backupIgnore) staat nu áchter die reeks, zodat de kop van het bestand letterlijk op orde is en er bij inlevering alleen iets weg hoeft.iconstaat als laatste, want dat is precies de regel die dan verdwijnt. defaultUsernameendefaultPasswordzijn eruit. Ze stonden er leeg in. Deze app heeft geen eigen inlog, de app_proxy van umbrelOS zet er zijn eigen voor, en een leeg veld suggereert dat er iets te vullen valt.- De release notes zijn opgeschoond, en dat was een echte fout. Drie versies achter elkaar kwam er een nieuwe kop bovenop terwijl de oude tekst eronder bleef staan: er stond drie keer "Earlier releases" en twee keer dezelfde regel over 0.0.4. Nu is het één verhaal over deze versie en één regel per eerdere versie. Een toets let erop, want niemand leest zijn eigen release notes nog een keer na.
- De beschrijving noemt nu ook dat je een eigen certificaat kunt uploaden. Dat kan sinds 0.0.7 en stond nog niet in de winkeltekst.
[0.0.8] - 2026-08-20
Changed
- De pagina draagt dezelfde tagline als de appstore. Er stond "TLS in front of your own Electrum
server", en dat was de achterblijver van de oude naam: bij het hernoemen naar Electrum Gate op
19-08-2026 was de reden juist dat de tekst over de opbrengst gaat en niet over TLS als middel. Die
maatstaf gold nog niet voor deze regel. Beslist door de gebruiker, die het verschil opmerkte.
tests/test_server_start_zonder_certificaat.pyhoudt de twee plekken nu gelijk, want niemand die het manifest aanpast opent daarna de pagina.
[0.0.7] - 2026-08-20
Added
-
Een certificaat uploaden via de pagina, open punt 6 van het plan Webinterface. De bron
Own folderbestond al, maar${APP_DATA_DIR}/certsis zonder SSH niet te bereiken, dus die bron was alleen bruikbaar voor wie de shell op durft. Dat was de helft van de reden dat hij bestaat.Wat er onder de motorkap voor nodig was, in vier stukken:
- de mount
${APP_DATA_DIR}/certsis bij de agent beschrijfbaar geworden. Bij nginx blijft hij alleen-lezen: die hoeft er nooit iets neer te zetten; GATE_UPLOAD_DIRzegt welke map dat is. Expliciet en niet afgeleid uitGATE_CERT_SOURCES, want welke bron beschrijfbaar is hoort naast de mount te staan die dat toestaat. Leeg zetten schakelt uploaden uit;- een eigen
locationin nginx met een limiet van 96k, want een sleutel plus keten haalt de 1k van/api/ruim. Een exacte match, dus die grotere limiet geldt nergens anders; - de validatie, en dat is het eigenlijke werk. Het paar gaat eerst onder een
.tmp-naam naar de doelmap en wordt daar doorssl.SSLContext.load_cert_chaingeopend. Dat is dezelfde OpenSSL die nginx straks gebruikt, dus wat hier doorkomt komt daar ook door. Zonder die controle levert een verkeerde sleutel een nginx die niet meer herlaadt, en dat is dezelfde klasse storing als waardoor 0.0.3 helemaal niet startte. Geweigerd worden verder: rommel in plaats van PEM, een versleutelde sleutel, een verlopen certificaat, en een certificaat zonder hostnaam.
De bestandsnaam komt uit het certificaat zelf en niet uit het verzoek. Dat is geen detail: een naam die van buiten komt moet je tegen padtrucs verdedigen, een naam die je uit het certificaat leest niet. Een hostnaam met
../erin wordt een platte naam en kan de doelmap niet uit.Uploaden kiest niet. De nieuwe komt voorgeselecteerd in de lijst en de gebruiker drukt op dezelfde knop als altijd, zodat er precies één plek blijft waar TLS van certificaat wisselt.
- de mount
Changed
- Het app-icoon in de kop, groter, in plaats van het generieke schildje. De pagina valt terug op dat schildje als de mount er niet is, want een gebroken-afbeeldingicoon in de kop is erger dan een generiek merkje. Ook als favicon voor het tabblad.
- De badges in de hoek van de kaders zijn eruit, op verzoek van de gebruiker. Bij de Electrum-server stond dezelfde meting twee keer in één kader ("answered 7 seconds ago" naast de rij "Last checked"), en bij het activiteitenlog is het log zelf genoeg. Wat er niet verloren gaat is het slechte geval: een backend die niet antwoordt geeft nog steeds de rode melding bovenaan.
- "your choice" staat niet meer achter het actieve certificaat. De gebruiker merkte op dat het altijd zijn keuze is. Het redenveld blijft voor de gevallen die niet vanzelf spreken, zoals een app die niets koos of er zelf een pakte.
- Een wallet die al verbonden was levert nu ook een
connected-regel op. De teller vergeleek met het vorige aantal en zweeg dus over een verbinding die er al hing voor de agent begon, en dat is precies het geval waarin iemand op de pagina komt kijken. - Trezor Suite staat niet meer als "desktop only". De gebruiker heeft het op iOS nagekeken en de instelling zit er wel; de documentatie van Trezor sprak zichzelf tegen en had het mis. Zie Clients.md §3.
[0.0.6] - 2026-08-20
Added
- Een verbindingsteller, dus de pagina laat zien dat er nú een wallet verbonden is. Dit was het open
punt uit §4e van het plan Webinterface: nginx
streamschrijft zijn logregel pas bij het sluiten van een sessie, en een wallet houdt zijn verbinding uren open. Een werkende opstelling zag er daardoor uit als een stille. Het antwoord is/proc/net/tcp, geteld door de achtergrondlus van de nginx-container, want die geldt per netwerk-namespace en de agent zit in een andere. Het aantal komt via een bestand instatus.json, net als bij de herlaadvlag, en de agent zet er eenconnected-regel bij als er één bijkomt. Alleen het aantal: geen adres en geen bronpoort, net als in het log_format.
Changed
- De certificaatkeuze is een dropdown. Op verzoek van de gebruiker: met veertien certificaten op de machine was de lijst met keuzerondjes het drukste onderdeel van de pagina, voor iets wat je één keer doet. Alles staat nu in de tekst van de optie, inclusief "expired" en "in use", want opmaak binnen een option verschilt per browser. De keuzeknop eronder blijft.
- Een keuze overleeft een verversing. De oude lijst zette zichzelf elke ronde terug op wat er in gebruik was, dus een keuze die je net gemaakt had verdween binnen tien seconden.
disconnectedheet nusession ended, en de details zeggen wat ze betekenen. De gebruiker vroeg wat die regel betekende, en dat was terecht: er stond een tijd, een duur en twee aantallen bytes, en niets zei dat de tijd het einde is en de duur teruggaat. Ook "up" en "down" zijn eruit; er staat nu bij wie er stuurt.- Blockstream Green heet nu Blockstream in de clientlijst en in de winkelbeschrijving; de app is omgedoopt. Gemeld door de gebruiker. De historische entries hieronder houden hun oude naam.
- Vijf stukken tekst eruit, alle vijf op verzoek van de gebruiker: de voetnoot onder het activiteitenlog, de regel "only ever read, never requested by this app" bij Certificate, de stip voor de badges, de zin dat apps op de Umbrel zelf deze gateway niet nodig hebben, en de uitleg dat de ene wallet één regel wil en de andere twee velden. Wat overblijft bij de verbindingsregels is de SSL-instructie en de waarschuwing over een afwijkende externe poort.
Niet gebouwd, met opzet
- De
traffic-regel uit de §4e-tabel. Bytes van een lopende sessie zijn binnen de container niet af te lezen:/proc/net/tcpheeft geen tellers en de interfacetellers van de container zitten vol met dashboard- en backendverkeer. Het zou dus een schatting worden die als meting leest. De sessieregel bij het sluiten geeft de echte aantallen, en de teller geeft de aanwezigheid.
[0.0.5] - 2026-08-20
Changed
- De reden bij meerdere kandidaten noemt het aantal, niet de namen. Op de Umbrel van de gebruiker vond de agent veertien certificaten, en de melding somde ze alle veertien op. Dat is een muur tekst die zegt wat de keuzelijst eronder al toont, en die lijst is waar je klikt. Het aantal blijft erin, want dat verklaart waarom de app niets koos. De weigering zelf verandert niet: bij twijfel kiest de app niet.
[0.0.4] - 2026-08-20
Fixed
-
De app kwam niet omhoog zonder certificaat, en dat was een klem. Het stream-blok met
listen 50022 sslstond innginx.conf.templateen includeerde decert.confvan de agent. nginx weigert te starten als dat certificaat er niet is, dus startte ook de web-UI niet, en de web-UI is precies waar je een certificaat kiest. Wie geen reverse proxy draait, of twee kandidaten heeft, zag daardoor niets en had geen weg vooruit. Aangetroffen bij de eerste echte installatie van 0.0.3; de logregels wezen ergens anders heen, want de app_proxy meldde alleen dat de server niet te bereiken was.De reparatie: het stream-blok staat nu in
stream.conf.template, en hetcommand-blok van de compose legt het in/var/lib/gate/tls/zodracert.confbestaat.nginx.confhaalt die map op met een jokerteken, en een jokerteken dat niets matcht is voor nginx geen fout. Geen certificaat betekent dus geen poort 50022, maar wel een pagina die vertelt waarom en waaruit je kunt kiezen. Een keuze zet de poort erbij met een herlading, zonder herstart. -
Een mislukte herlading brak de herlaadlus af. Die lus draait onder
set -e, dus een certificaat dat nginx niet aanneemt liet hem verdwijnen. Daarna werd geen enkele latere wijziging meer opgepikt, zonder dat er iets te zien was.
Added
tests/test_server_start_zonder_certificaat.py, dat de bovenstaande reparatie vastlegt. Het stream- blok "netjes" terugzetten innginx.confbrengt de klem terug, en geen van de bestaande toetsen zou dat merken.
[0.0.3] - 2026-08-19
De nummering begint opnieuw, onder 1.0. Besloten door de gebruiker bij het opnieuw installeren van de
app. De oude nummers, 1.0.0 en daarna 2.0.0 en 2.0.1, beweerden een rijpheid die er niet was: het
ging om één met de hand neergezette installatie op één machine. Het project gaat naar 1.0.0 wanneer het
dat verdiend heeft.
Twee dingen die daarbij horen, zodat dit later niet als een fout leest:
- de oude entries blijven staan onder hun oude nummer. Er wordt niets met terugwerkende kracht
omgenummerd; dat zou de commit-historie en deze changelog uit elkaar laten lopen.
0.0.1en0.0.2zijn dus nooit onder die naam uitgeleverd. De3is te lezen als "de derde opzet": met de hand neergezet, toen een echte Umbrel-app, en nu deze; - een stap terug in het nummer is eenmalig en veilig, want dit is een nieuwe app-id zonder geïnstalleerde voorganger en de gebruiker deïnstalleert de oude app. Vanaf hier moet het nummer altijd omhoog: de spec zegt alleen dat umbreld "de versie vergelijkt", niet of dat een ongelijkheid of een semver-groter-dan is, dus op een omlaaggaand nummer valt niet te bouwen.
Changed
- De app heet Electrum Gate, met store-id
whatsnexten app-idwhatsnext-electrum-gate. De oude naam beschreef het middel (TLS) en niet wat je ermee kunt. Voor umbrelOS is dit een andere app, dus het vraagt een verwijdering en een herinstallatie. - De TLS-poort is 50022 in plaats van 50002. Fulcrum bezet 50002 op de host, en met Fulcrum als backend zou de container niet starten; dat is precies het omschakelen dat deze app moet ondersteunen. Dit vraagt eenmalig een andere doorstuurregel in de router.
- De web-UI is herbouwd op het design-systeem, in het Engels, en haalt alles uit
status.json. De oude pagina zetteOnlineals platte tekst in de HTML en had een verzonnen logvenster; hij loog dus precies op het moment dat je hem raadpleegt. - Het domein en het certificaatpad staan niet meer in de app. Ze zijn uit
docker-compose.ymlennginx.conf.templateverdwenen: de agent bepaalt ze en schrijft eencert.confdie nginx includeert. - De teksten in
umbrel-app.ymlgaan nu over de afweging tussen Tor en snelheid, en over voor welke wallets dit nuttig is, in plaats van over TLS als middel.
Added
- Een
agent-container oppython:3-alpinediestatus.jsonschrijft, de certificaatmappen scant, de Electrum-server bevraagt en de certificaatkeuze aanneemt. Geen eigen image, dus geen bouwstap en geen registry. Hij herlaadt nginx niet zelf, want dat zou de Docker-socket vragen; hij zet een vlagbestand neer en de nginx-container herlaadt zichzelf. - Certificaatkeuze op het dashboard, uit de mappen van Zoraxy of een eigen map. Bij meer dan één kandidaat zonder keuze weigert de app en noemt hij de kandidaten, in plaats van te gokken: een verkeerd certificaat geeft een verbinding die het lijkt te doen en pas bij de wallet stukloopt op naamverificatie.
- Verbindingsregels per client met een kopieerknop, voor Trezor Suite, Electrum, Sparrow, BlueWallet, Nunchuk, Blockstream Green en BitBoxApp.
- Een activiteitenlog met een regel per sessie. Zonder client-adres en zonder bronpoort, en zonder regel per protocolaanroep: die zitten in de versleutelde verbinding en ze uitlezen zou precies het verkeer aantasten waarvoor deze app bestaat.
- De eerste tests van dit project, in
tests/. Ze toetsen de X.509-lezer van de agent tegensslop echte certificaten, en de guards rond de certificaatkeuze. Hoe je ze draait staat inCLAUDE.md. - Documentatie ondergebracht in
Docs/volgens de HomeGit-methode.ARCHITECTURE.md,STRUCTURE.mdenQUICKSTART.mduit de repo-root zijn opgegaan inDocs/Referenties/Architectuur-huidig.md; ze beschreven grotendeels hetzelfde in drie versies. Docs/Referenties/Umbrel-appstore-spec.md: wat umbrelOS van een community app store verwacht, met bronvermelding per feit. Belangrijkste vondsten: umbreld doet géén hostnaamcontrole op de store-URL, dus een eigen Gitea kan de store zijn, mits publiek en over HTTPS; en wisselen tussen Electrs, Fulcrum en ElectrumX vraagt geen eigen mechanisme, want die aliassen zichzelf naarAPP_ELECTRS_*.Docs/Referenties/Clients.md: welke wallets naar een eigen Electrum-server kunnen wijzen, en wanneer Tor de betere keuze is.
Niet geverifieerd
Hoort erbij, want dit is een release-entry en niet een plan. De agent heeft bij het uitbrengen van deze versie nog nooit op de Umbrel gedraaid. Wat er getoetst is, is de X.509-lezer en de keuze-guards, met unittests. De certificaatscan op een echte Zoraxy-map, de Electrum-vraag, het herladen via de vlag en de keuze via de API zijn ongetest in bedrijf.
[2.0.1] en [2.0.0] - 2026-08-18
Uitgeleverd onder de oude naam en de oude nummering; zie de noot bij 0.0.3. Nooit als entry in deze
changelog opgenomen, en dat wordt hier alleen vastgelegd zodat de reeks niet met een gat begint.
- 2.0.0: herbouwd als echte Umbrel-app in een eigen community app store, met nginx en de
stream-module in plaats van stunnel. Daarmee vervielen de installatie bij het starten, de losse certificaatmonitor en de mount van de Docker-socket. Fulcrum en ElectrumX werken sindsdien als backend. - 2.0.1: de wallet-verbinding lag er na ongeveer tien minuten uit.
proxy_timeoutstaat bij nginx standaard op tien minuten en verbrak een stille verbinding; stunnel hanteerde twaalf uur, en dat verschil was bij de overstap over het hoofd gezien. Op 19-08-2026 bevestigd dat de verbinding de nacht doorstond.
[1.0.0] - 2024-01-15
Eerste werkende opzet, met de hand op de Umbrel neergezet.
Added
- SSL/TLS-terminatie via stunnel voor Electrum-verbindingen, op poort 50002.
- Certificaatmonitor die elke vijf minuten de mtime van het Zoraxy-certificaat vergelijkt en stunnel herstart bij een wijziging.
- Read-only mount van de Zoraxy-certificaten.
- Statuspagina op nginx.
install.shenuninstall.shvoor installatie op de Umbrel.- Documentatie: README, ARCHITECTURE, QUICKSTART, STRUCTURE.
Noot bij de 1.0.0-entry, toegevoegd 18-08-2026. Deze entry is ingekort. De oorspronkelijke versie noemde onder meer "TLS 1.2+ enforcement", "geen root-rechten in containers" en "minimale Docker-socket-rechten" als geleverde beveiligingskenmerken. Die claims houden geen stand: de stunnel-configuratie legt geen minimale TLS-versie vast, de containers draaien als root, en een read-only mount van de Docker-socket beperkt niets, want wie de socket kan lezen kan containers starten en is daarmee root op de host. Ze zijn geschrapt in plaats van bijgesteld, omdat een changelog-entry beschrijft wat er geleverd is en dit niet geleverd is. De onderliggende punten zijn opgenomen in het plan Appstore.