Topics

EmDash officiële versie uitgebracht. Bijgewerkt van 0.22 naar 1.2

  • column

Op 28 september 2026 is EmDash 1.0 officieel uitgebracht.
EmDash is een open-source CMS op basis van Astro, ontwikkeld door Cloudflare, en wordt ingebouwd in de Astro-site inclusief het beheerdashboard, aangedreven door Cloudflare Workers + D1 + R2.
Je kunt het grosso modo zien als de Astro-versie van WordPress.

Ons interne blog 'Yurulog', dat we in een eerdere artikel van microCMS hebben gemigreerd, was blijven steken op versie 0.22 uit juni. Dit moment hebben we gebruikt om in één keer tot de nieuwste 1.2.0 te upgraden.

De hoogtepunten van 1.0 zijn de stabiliteit en veiligheid bij upgrades, plugins die in een sandbox draaien, en MCP-servers voor agents.

Kortom, de migratie was in een dag afgerond, maar er waren veel valkuilen.
Als je ervan uitgaat dat het stabiel zal zijn omdat het 1.0 is geworden, loop je vast niet op EmDash zelf, maar op afhankelijkheden eromheen.

Context: van 0.22 naar 1.2 moest handmatig worden gedaan

In 1.2 zit upgrade-emdash, een officiële upgrade CLI.
Deze werkt de afhankelijkheden bij en genereert een site-specifieke UPGRADE.md, maar ondersteunt alleen versie 0.35 en later, dus kon ik het niet gebruiken voor 0.22.

Tussen 0.22 en 1.2 zitten 47 databasemigraties, met enkele behoorlijk destructieve wijzigingen.
Je kunt het niet zomaar met npm install emdash@latest oplossen.

1. Backup maken en productieprogramma lokaal dupliceren

npx wrangler d1 export <database-name> --remote --output=backups/pre-1.2.sql

Dit in lokale D1 laden en migratie testen met dezelfde gegevens als productie.

2. Afhankelijkheden bijwerken

Pakket

Voor migratie

Na migratie

emdash / @emdash-cms/cloudflare / @emdash-cms/admin

0.22.0

1.2.0

@emdash-cms/plugin-forms

0.1.1

0.2.9

astro

6.1.2

6.4.8

wrangler

4.80

4.148

wrangler moest worden verhoogd vanwege de peer-requirement van emdash 1.2 (4.99 of hoger), dus hebben we op dit moment ook de noodoplossing uit de 0.22-era verwijderd.
@astrojs/cloudflare voldeed aan de peer-requirement, dus hebben we het op dit punt op versie 13.1.6 gehouden. Dit veroorzaakt de volgende valkuil.

  • patch-package voor OAuth-route: was toegepast als workaround voor een 0.22-bug. Dit is al in de mainline opgelost.
  • CSS-injectie in beheerderpaneel: de 0.22-admin maakt gebruik van CSS voor UILibrary kumo 2.4, maar het lock-bestand trok 2.6 in, waardoor de login- en publiceer-accentbuttons "transparante achtergrond met witte tekst" waren en onzichtbaar werden. In 1.2 is dit aan de mainline-zijde opgelost.

3. dev start niet op (valkuil: miniflare-versie mismatch)

Nadat de afhankelijkheden werden verhoogd en npm run dev werd uitgevoerd, startte het niet op vanwege een miniflare-versie mismatch.
wrangler 4.148 gebruikt miniflare 5, waarmee de lokale D1-status (onder .wrangler/state/v3/) de tabel _cf_ALARM naar 3 kolommen bijwerkt.
Aan de andere kant@astrojs/cloudflare 13.1.6 bevat miniflare 4, dus vanwege kolommismatch kan de lokale status niet worden gelezen.

De oplossing is om ook de @astrojs/cloudflare die achterbleef bij te werken, zodat de miniflare-versie aansluit op wrangler. Onthoud gewoon: "de miniflare-versies van wrangler en adapter moeten gelijk zijn" — dan zit je de volgende keer direct goed.

Ook in versie 0.22 aanwezig: de emdash dev-opdracht is afgeschaft, dus het dev-script is teruggezet naar astro dev. Migratie en type-generatie worden uitgevoerd wanneer astro dev wordt gestart.

4. Staging-menu verdwenen (hindernis: menus in seed.json)

Dev was gestart, 90 migraties waren geslaagd, staging was bijgewerkt en het beheerdashboard geopend, maar de japanse globale navigatie was leeg.

The cause is seed/seed.json with menus and widgetAreas.
EmDash's seed processing will delete all items and then recreate empty when there are menus or widget areas with the same name.
seed.json had a template menu definition "items": [] remaining, so the menu was being initialized every time the seed ran.

De oplossing was om de sleutels menus en widgetAreas volledig te verwijderen.
Menuinhoud wordt beheerd in het beheerdashboard, dus er is geen reden om het in seed op te nemen.

5. Engelse artikelkoppelingen worden /en/posts/en/slug (hindernis: localevoegsel in entry.id)

Dit is een specificatiewijziging in versie 1.2.
Voor meertalige sites krijgt de entry.id die door getEmDashCollection() wordt geretourneerd nu een localevoegsel. Voor een Engels artikel is het en/my-post.

Yuru Log construeerde artikel-URL's op basis van entry.id, dus koppelingen naar Engelse artikelen werden /en/posts/en/my-post en dus dubbel.
Alle locaties waar URL's werden samengesteld - lijsten, aanbevelingen, zoekresultaten, RSS en canonical - zijn vervangen door entry.data.slug.
De type van entry.data.slug is string | null, dus ook de type van de ontvangende zijde moet worden bijgewerkt.

Het is handig om onthouden dat entry.id de sleutel is, entry.data.slug de URL, en entry.data.id de ULID in de database (voor API-aanroepen).

6. Fouten elke minuut (hindernis: Cron Trigger en Worker-vermelding)

In versie 1.x voert de Worker's scheduled() handler geplande posts en periodieke plugin-processen uit.
Omdat Cloudflare geen interne timer heeft, verschijnen geplande posts niet op het geplande moment zonder Cron Trigger.
Daaromwrangler.jsonchebben we een Cron Trigger toegevoegd.

"triggers": { "crons": ["* * * * *"] }

Dan krijg je elk minuut "Handler does not export a scheduled() function".
Dit komt omdat het Worker-ingang scheduled() niet exporteert.
De oplossing is om src/worker.ts te vervangen door het officiële ingang.

export { default, PluginBridge } from "@emdash-cms/cloudflare/worker";

Nu heb je naast fetch en scheduled ook PluginBridge voor sandbox-type plugins.

Laten we het uitproberen

Wat goed was om naar versie 1.2 bij te werken.

  • De editor is vernieuwd en gebruiksvriendelijker. Het schuine menu is gegroepeerd en de werkbalk volgt nu mee. Ook op mobiel werkt het.
  • Videoblock is standaard inbegrepen. Ik voerde video-inbedding via een aangepaste plugin uit, dus ik wil dit binnenkort vervangen.
  • Alle noodoplossingen uit de 0.22-periode kunnen nu weg. Geen patch-package meer en geen CSS-injecties.

Punten van aandacht.

  • Van versie 1.0 naar 1.2 in 10 dagen - het gaat snel. Het lijkt erop dat we binnenkort een werkwijze moeten hanteren waarbij we elke minorversie in staging controleren.

Samenvatting

  • 0.22 → 1.2 vereist handmatige migratieupgrade-emdash CLI richt zich op versie 0.35 en hoger.
  • Zorg dat de wrangler- en adapterversies van miniflare op elkaar zijn afgestemd → als ze niet kloppen, start dev niet op
  • Laat geen lege template achter voor menus / widgetAreas in seed.json → ze verdwijnen bij elke seed
  • Meertalige sites hebben een localevoorvoegsel in entry.id → URLs komen van entry.data.slug
  • Voeg je een Cron Trigger toe, stel dan het Worker-inzendpunt in op @emdash-cms/cloudflare/worker

Alles kost slechts een paar regels aanpassingen als je het eenmaal snapt, maar als je alles stap voor stap uitzoekt, kost het meer tijd dan verwacht.

Toch is het feit dat we alle patches en CSS-workarounds die we bij versie 0.22 hadden aangebracht, volledig konden verwijderen, een teken dat kleine bugs naar aanleiding van de officiële release worden opgelost.
Een half jaar geleden was de stemming nog "experimenteel overgezet", maar na versie 1.0 kun je zeggen dat EmDash, mits je rekening houdt met updatebeheer, echt een CMS is geworden dat serieus kan worden overwogen voor productiegebruik.

Auteur van dit artikel

Vanuit DTP de wereld van het web in gestapt en merkte al snel dat hij markering, frontend, directie en accessibility allemaal beheerst — een echte 'meester van techniek'. Sinds de oprichting van Liberogic een multitalent en inmiddels een levend naslagwerk in het bedrijf. Tegenwoordig is hij geïnteresseerd in de vraag "Kunnen we accessibility-implementatie meer aan AI overlaten?" en experimenteert hij graag met efficiëntie via prompts. Zowel technisch als mentaal nog volop in ontwikkeling.

Ayumi Futamata

IAAP-gecertificeerd webtoegankelijkheidsspecialist (WAS) / Opmaakingenieur / Frontend-ingenieur / Webdirecteur

Artikelen van deze medewerker bekijken

Ons sterke punt is ons betrouwbare teamstructuur en snelle responsiviteit

Bij Liberogic worden ervaren teamleden actief ingezet voor projectvoering, wat door klanten zeer wordt gewaardeerd.
We wijzen vakbekwaam projectmanagers en directors aan en streven ernaar projecten soepel te laten verlopen. We voorkomen onnodig kostenverhogingen door volledig inzet te vermijden en wijzen middelen toe waar ze het meest geschikt zijn. Onze snelheid bij taakanalyse en bij het opmaken en indienen van offertes is goed bekend.

* Wij voeren niet actief SES-achtige permanente werkzaamheden uit, dus graag van tevoren dank voor uw begrip.

U kunt vrijwel alle grote projectmanagementtools en chattoolsgebruiken, zoals Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom en Webex.

Neem contact met ons op voor advies over uw webvragen.

Casestudies