October 28, 2026

Justflows 0.3.9: elke first-party plugin staat op eigen benen

Cookie Consent, Forms, Helpdesk, Gallery en SEO Toolkit draaien nu volledig vanuit hun eigen pakketten, en de plugin-SDK krijgt de mogelijkheden die ze nodig hadden: vertaalde menulabels, paginarollen, afbeeldingsvelden, hooks voor de paginahead en panelen in de contenteditor.

Justflows 0.3.9: elke first-party plugin staat op eigen benen
Justflows 0.3.9 is uit. Deze release maakt een klus af waar we in 0.3.7 met Analytics aan begonnen: de core weet niets meer van een specifieke plugin. Cookie Consent, Forms, Helpdesk, Gallery en SEO Toolkit hadden code in de core: eigen adminschermen, routes, rendering en uitzonderingen. In 0.3.9 draait elk van hen volledig vanuit het eigen pakket, gebouwd op dezelfde openbare SDK die elke pluginauteur kan gebruiken. Om dat mogelijk te maken, kreeg de SDK een reeks algemene mogelijkheden die nu elke plugin kan gebruiken.

Voordat je upgradet: update vijf plugins samen met de core

Omdat deze plugins niet meer op code in de core leunen, heeft elk van hen de nieuwe versie nodig op de nieuwe core. Update ze in één keer mee:
  • Cookie Consent 1.1.0. Met een oudere versie heeft de Cookie Consent-pagina geen scherm.
  • Forms 0.3.0. Met een oudere versie werken openbare formulierinzendingen niet meer.
  • Helpdesk 0.2.0. Met een oudere versie verliezen andere sites de supportknop in de admin en kunnen supportmedewerkers Helpdesk niet openen.
  • Gallery 0.3.0. Met een oudere versie worden galerijen niet getoond op openbare pagina's.
  • SEO Toolkit 0.3.0. Met een oudere versie houden pagina's alleen een eenvoudige titel, een canonical-link en een basale sitemap, en toont de editor geen SEO-sectie. Niets van wat je hebt opgeslagen gaat verloren.
Publiceer je een statische export en gebruik je Forms, voer de export dan opnieuw uit na het updaten, zodat geëxporteerde pagina's de nieuwe formulierendpoints aanroepen. Eerder geëxporteerde pagina's blijven intussen gewoon werken.

Waarom de core buiten plugins blijft

Een first-party plugin zou niets moeten kunnen wat een plugin van derden niet kan. Zolang de core een scherm voor Cookie Consent bevatte of het Gallery-blok zelf rendde, kon een concurrerende consent- of galerijplugin nooit even goed zijn, en betekende elke wijziging aan die plugins een core-release. Nu wordt elke plugin los uitgebracht, bijgewerkt en vervangen. Waar een plugin iets nodig had wat alleen de core kon, hebben we een algemene SDK-mogelijkheid toegevoegd in plaats van een uitzondering.

Cookie Consent: een eigen scherm, in acht talen

Het instellingenscherm van Cookie Consent was een pagina in de core. Het wordt nu met de plugin meegeleverd als eigen admin-app, met dezelfde secties als voorheen: gedrag, categorieën, de bannertekst per taal, vormgeving met een live voorbeeld, het tegenhouden van scripts en embeds, cookieverklaringen en toestemmingsregistraties. Alles is vertaald in de acht admintalen, vanuit de eigen catalogi van de plugin.

Forms: eigen routes, en eenvoudigere statische exports

Forms serveert zijn endpoints nu als eigen routes onder /api/forms/: config, submit en de adminroutes. De openbare submitroute kiest ervoor geen sessie-CSRF-token te gebruiken en vraagt de host om een limiet van 10 inzendingen per 10 minuten per bezoeker. De core heeft geen afhandeling, gereserveerde slugs of exportregels voor /justflows-forms meer.
Een mooi bijeffect: het formulierscript verstuurt nu form-encoded data in plaats van JSON. Voor een statische export op een ander domein maakt dat een inzending een eenvoudig verzoek dat de browser zonder CORS-preflight verstuurt, dus er is geen extra serverondersteuning nodig. Statische exports die vóór deze update zijn gemaakt, blijven ook werken, omdat Forms nog steeds op de oude adressen antwoordt.

Helpdesk: de supportknop, gebouwd door Helpdesk

Op een multisite-installatie kan Helpdesk een supportknop tonen in de admin van elke andere site. Tot nu toe bouwde de core die knop. Helpdesk 0.2.0 doet het zelf met een netwerkbrede hook en volgt zoals voorheen de schakelaar, begroeting, zijkant en supportsite van de hoofdsite. Op de hoofdsite linkt de openbare supportpopup vanuit Helpdesk zelf naar de gekozen supportsite, en Helpdesk bepaalt welke instellingen elke site ziet. De rol Supportmedewerker komt nu in Helpdesk omdat de Helpdesk-pagina dat zegt, niet vanwege een regel in de core.

Gallery: een pluginblok zoals elk ander

De core sloeg de Gallery-plugin vroeger helemaal over en rendde het galerijblok zelf. Gallery 0.3.0 registreert en rendert zijn eigen blok. Raster-, masonry-, carrousel-, diavoorstellings- en lijstlay-outs, bijschriften, kolommen, de lightbox en responsieve afbeeldingen werken allemaal zoals voorheen, en bestaande galerijen behouden hun inhoud.
Twee dingen uit deze verhuizing helpen elke plugin met blokken. Blokken kunnen nu een veld images hebben, te bewerken met een upload, de mediabibliotheek of een URL. En de pagebuilder toont van elk pluginblok een voorbeeld met de echte weergave, waar hij eerder alleen de typenaam van het blok liet zien.

SEO Toolkit: de plugin schrijft de SEO

De core schreef vroeger op elke site de metabeschrijving, Open Graph- en Twitter-tags, gestructureerde data, het titelsjabloon en de extra's in de sitemap, en las daarvoor de instellingen van SEO Toolkit, zelfs als de plugin uit stond. Nu schrijft SEO Toolkit dat allemaal zelf, en de SEO-sectie in de contenteditor (SEO-titel, metabeschrijving, canonical-URL, social-afbeelding en uitsluiting van feeds) hoort ook bij de plugin.
Een site zonder SEO Toolkit staat niet met lege handen: de core geeft elke pagina nog steeds een gewone titel, een canonical-link en een basale /sitemap.xml van je gepubliceerde pagina's.

Plugin-SDK: wat pluginauteurs krijgen

Elke mogelijkheid die de first-party plugins nodig hadden, zit nu in de openbare SDK:
  • Vertaalde menulabels. Een item in het adminmenu kan per taal een eigen label hebben, of zijn labelKey opzoeken in de eigen admincatalogi van de plugin.
  • Paginarollen. Een menu-item kan de rollen noemen die het mogen openen, zoals een rol die je plugin registreert.
  • Een instellingenformulier per site. Met de filter plugin.settings.schema kan een plugin velden verbergen of de opties van een keuzelijst vullen voor de huidige site.
  • Netwerksites. ctx.network.site() geeft vanaf elke site een site in de installatie terug, met het openbare adres.
  • Afbeeldingsvelden en hulpfuncties. Blokvelden van het type images, responsieve afbeeldingsvarianten voor velden media en images, en renderResponsiveImage, applyResponsiveProp, escapeHtml en safeMediaSrc in de SDK.
  • Hooks voor de paginahead. Nieuwe filters html.title, html.canonical en site.identity, en een context html.head die de pagina beschrijft: contenttype en velden, beschrijving, canonical-URL, deelafbeelding en of de pagina geïndexeerd mag worden.
  • Panelen in de contenteditor. editorPanels in het manifest voegt secties toe aan de contenteditor, met tekst-, tekstvak-, URL-, afbeeldings- en selectievakvelden, gelabeld per taal.
Dit is de volledige SEO-sectie van de contenteditor, gedeclareerd door SEO Toolkit (ingekort):
"editorPanels": [
  {
    "id": "seo",
    "title": { "en": "SEO", "nl": "SEO" },
    "indexableOnly": true,
    "fields": [
      { "key": "seoTitle", "type": "text", "label": { "en": "SEO title" }, "placeholder": "{title}" },
      { "key": "seoImage", "type": "image", "label": { "en": "Social image" } }
    ]
  }
]
Eén veld is verdwenen: hostCooperative. De host activeert nu elke plugin op dezelfde manier, en een manifest dat het veld nog declareert, blijft werken.

Upgraden

  • Update Cookie Consent, Forms, Helpdesk, Gallery en SEO Toolkit samen met de core. In de lijst bovenaan staat wat er gebeurt met een oudere versie.
  • Statische export met Forms: voer de export opnieuw uit na het updaten.
  • Geen databasemigraties in deze release.
De release-zip heeft een SHA-256-checksum, een handtekening en een CycloneDX-SBOM, allemaal bijgevoegd bij de release 0.3.9 op GitHub. Sites op 0.2.7 of later controleren de handtekening voordat ze een update installeren.
Lees de volledige changelog