Je klikt in de nieuwe EmDash plugin registry op Freeform, de formulierplugin van Solspace. Nog voor je iets installeert, zie je twee regels in een oranje kader: "Make unrestricted network requests" en "Send email". Een formulier dat naar elke server op internet mag praten. Dat scherm is het hele verhaal van EmDash 1.0, in het klein.
Cloudflare bracht EmDash 1.0 op 28 september uit, samen met een plugin-registry op het AT Protocol, het netwerk onder Bluesky.
Het idee: een plugin draait in een eigen afgeschermde omgeving en krijgt alleen de rechten die jij als beheerder goedkeurt. Voor wie EmDash plugins bouwt of zoekt, is dit de dag dat er eindelijk een plek is om ze te vinden. We hebben de registry dezelfde avond doorgelopen en alles wat erin stond opgeschreven.
Dertien plugins, allemaal gratis
Op maandagavond 28 september rond acht uur stonden er dertien plugins op de voorpagina van plugins.emdashcms.com . Twee daarvan heten marketplace-test en zijn testplugins. Blijven er elf echte over. Een teller met het totaal geeft de site niet, dus dit is wat de voorpagina toonde, niet per se de hele catalogus.
Alle dertien hebben een MIT-licentie. Dat is geen toeval: de registry kan nu alleen gratis plugins aan. Betaalde plugins noemt Cloudflare iets "in future", met hetzelfde gedecentraliseerde model.
Per plugin toont de registry vóór installatie welke rechten hij vraagt. Die lijst hebben we per plugin overgenomen:
| Plugin | Versie | Rechten | Netwerk |
|---|---|---|---|
| Freeform (Solspace) | 0.1.3 | 2 | onbeperkt |
| contact-form | 1.0.0 | 0 | geen |
| Cloudflare Email Sending | 0.1.2 | 3 | alleen api.cloudflare.com |
| Forward Email | 0.1.1 | 2 | alleen api.forwardemail.net |
| EmDash to Buffer | 1.1.1 | 2 | alleen api.buffer.com en api.bufferapp.com |
| ai-search | 0.5.0 | 2 | alleen api.cloudflare.com |
| LinguaDash | 0.1.0 | 5 | vier hosts: DeepL (2), OpenAI, Cloudflare |
| Eventual | 0.8.0 | 2 | geen |
| audit-log (EmDash) | 0.2.2 | 3 | geen |
| AT Protocol Syndication (EmDash) | 0.2.2 | 2 | onbeperkt |
| Webhook Notifier (EmDash) | 0.2.2 | 3 | onbeperkt |
Acht van de elf houden het netjes: geen netwerk, of alleen de API's die ze nodig hebben. Drie vragen onbeperkt netwerk. Bij een webhook-plugin snap je dat, want jij bepaalt waar de melding heen gaat. Bij een formulierplugin is het een keuze van de maker.
Een rechtenscherm werkt alleen als iemand het leest
Het sandboxmodel is goed. In WordPress draait een plugin in hetzelfde PHP-proces als de rest van je site en kan hij bij je database, je bestanden en het netwerk. Cloudflare zet in de aankondiging een tekening naast elkaar: bij WordPress kan één kwaadaardige plugin alles raken, bij EmDash alleen wat zijn eigen Worker mag.
Maar de beveiliging verschuift van de code naar de beheerder. EmDash laat zien wat een plugin wil, jij klikt op goedkeuren. Zie je "unrestricted network requests" bij een formulier en klik je toch door, dan heb je precies het oude WordPress-risico teruggehaald, alleen nu met een mooier scherm ervoor.
Bij Freeform is het waarschijnlijk onschuldig: formulieren sturen vaak door naar een CRM of webhook. Toch zou een formulierplugin die de doelen per site laat instellen hier sterker staan.
Ons oordeel: dit is een sterke start, juist omdat de registry je deze vraag laat stellen vóór er code draait. Dat maakt de rechtenlijst het belangrijkste wat op een pluginpagina staat. Sterren of downloadaantallen toont de registry nu niet eens.
Stabiel, maar de registry zelf nog niet
De blog noemt EmDash 1.0 "stable". De documentatie over publiceren zegt iets anders over de registry: "Experimental". Het formaat valt onder RFC 0001 en "will change while it's in flight", en makers moeten de plugin-CLI op een exacte versie vastzetten. Het CMS is dus 1.0, de plugin-winkel eromheen is nog in beweging. Wie nu publiceert, publiceert op een formaat dat kan verschuiven.
Onze eigen site kan geen enkele registry-plugin installeren
Hier moeten we eerlijk zijn over onszelf. In ons stuk over EmDash CMS schreven we dat de sandbox het oude pluginprobleem oplost. Klopt nog steeds, maar we vergaten erbij te zetten wat hij kost.
Op Cloudflare draait elke sandbox-plugin als Dynamic Worker. Volgens de sandbox-documentatie heb je daarvoor het Workers Paid-plan nodig, een worker_loaders-binding met de naam LOADER en een export van PluginBridge in je Worker.
De Cloudflare-templates zetten die binding standaard uit, zodat een nieuwe site op het gratis plan draait. Zonder binding zie je de registry wel, maar faalt installeren met SANDBOX_NOT_AVAILABLE.
We hebben het op onze eigen site gecontroleerd. emdashplugins.nl draait op EmDash 0.0.3, uit het voorjaar. De wrangler.jsonc heeft geen LOADER-binding. LinguaDash, een van de elf, vraagt zelfs letterlijk om "EmDash 0.42 or later". Een upgrade naar 1.0.1 staat dus op onze eigen lijst. Let bij die upgrade op het versienummer: op npm staat ook een emdash@1.0.0 uit april. Volgens de release notes is die per ongeluk gepubliceerd vanaf oude code. De echte eerste 1.x is 1.0.1.
Update 28 september, 21.18 uur: die upgrade is gedaan. emdashplugins.nl draait nu op EmDash 1.0.1, na 57 databasemigraties die we eerst op een kopie van onze eigen data hebben getest. De LOADER-binding zetten we er bewust nog niet in, dus registry-plugins installeren kan op deze site nog steeds niet.
Een betaalde plugin kan de registry nog niet in
EmDash kent twee soorten plugins. Een sandboxed plugin gaat de registry in en installeer je met één klik. Een native plugin is een npm-pakket dat je in astro.config.mjs zet, waarna je opnieuw deployt.
Native mag meer: eigen React-schermen in de admin, eigen Portable Text-blokken, scripts in de pagina. De prijs is dat hij in hetzelfde proces draait als je site, zonder afscherming.
| Sandboxed | Native | |
|---|---|---|
| Installeren | één klik vanuit de admin | npm install + astro.config aanpassen |
| Verspreiding | registry, ondertekend | npm |
| Afscherming | eigen Worker, alleen goedgekeurde rechten | geen, zelfde proces als je site |
| Eigen React-admin | nee, alleen Block Kit | ja |
| Betaald verkopen | nog niet | ja, via eigen licentie |
Onze EmDash Forms is native, want hij heeft een eigen admin-scherm en eigen blokken voor in je pagina's. Die blijft dus buiten de registry en loopt via een licentie, zoals op de prijspagina staat. Het rechtenmodel geldt er wel voor.
In de broncode van 1.0.1 hebben we nagekeken wat er met de oude rechtnamen gebeurt: network:fetch heet nu network:request en write:media heet media:write. De oude namen werken nog in een overgangsperiode, met een waarschuwing bij het valideren en een harde fout bij publiceren. Die hernoeming zit in onze upgrade.
Wie heeft de LOADER-binding al?
Bouw je zelf een EmDash-site op Cloudflare? Open wrangler.jsonc en zoek naar worker_loaders. Staat hij er niet, dan kan je site geen enkele plugin uit de registry draaien. Beslis dan eerst of je het Paid-plan wilt, voordat je in de registry gaat winkelen. Staat hij er wel, lees dan bij elke plugin de rechtenlijst voordat je op goedkeuren klikt.
Ben je nog aan het kiezen welke plugins je site echt nodig heeft, dan helpt ons stuk over welke EmDash plugin je als eerste bouwt . Kom je van WordPress, begin dan bij WordPress naar EmDash migreren : daar staat hoe je eerst je pluginlijst in kaart brengt.
Betaald publiceren hangt aan Atproto Spaces
Cloudflare schrijft dat het "with interest" kijkt naar de Atproto Spaces Alpha, als basis voor betaalde plugins zonder centrale winkel. Pas als daar iets werkends uitkomt, kan een maker geld vragen zonder zijn identiteit bij één bedrijf onder te brengen. Tot die tijd blijft de registry een etalage van gratis plugins, en blijft betaald werk op npm. De eerste e-commerceplugin, van Urumi, zegt daarover het meest: blijft die gratis in de registry, of komt hij als native pakket met een prijskaartje?