Open source

go-webthings

Kleine Go-pakketten voor HTML-first websites.

go-webthings is een familie van gerichte pakketten voor Go-applicaties die hun pagina's op de server opbouwen en toch vlot aanvoelen. De stukken blijven klein: routing is routing, wat een template nodig heeft staat beschreven, en partial rendering is expliciet.

Je werkt met gewone net/http en gewone html/template-bestanden, en krijgt updates die goed met HTMX samengaan, zonder dat de browser de hoofdapplicatie wordt.

Drie pakketten, één HTML-antwoord

go-router routeert het verzoek, go-clue beschrijft wat een template verwacht, en go-partial rendert een hele pagina of alleen een HTMX-fragment.

  1. request
  2. routego-router
  3. contractgo-clue
  4. rendergo-partial
  5. html
go-router

Routing per host bovenop net/http: routegroepen, middleware, benoemde routes, gemounte routers en not-found-pagina's, met middleware voor logging, security-headers, compressie en output caching.

go-clue

Getypeerde contracten en editor-metadata voor html/template-bestanden. Templates blijven gewoon templates, maar je editor kan aanvullen, navigeren en fouten in modeltoegang aanwijzen.

go-partial

Rendert hele pagina's of alleen het stuk dat nodig is uit dezelfde templates: gerichte HTMX-updates, out-of-band swaps, selecties, acties en herbruikbare regio's, zonder van HTML een componentendialect te maken.

Voeg toe wat je nodig hebt

Formulieren, vertalingen en het klaarzetten van assets werken op dezelfde manier: expliciete Go-types en HTML voorop. Elk pakket is ook los te gebruiken.

go-form

Getypeerde HTML-formulieren uit struct-tags, met het inlezen van inzendingen, veldvalidatie, instelbare thema's, request-metadata en CSRF-bescherming.

go-importmap

Zet vaste versies van JavaScript- en CSS-pakketten tijdens de build klaar met een lockfile, bedt ze in, serveert ze met versie-URL's en Subresource Integrity, en maakt import maps en stylesheet-tags voor je templates.

go-translator

Gettext-PO-catalogi met een taal per request, meervoudsvormen, vertaalcontexten en het extraheren van letterlijke sleutels uit Go-templates.

En go-webthings zelf

De Go-bibliotheek go-webthings draait de backend van een website, gebouwd uit deze pakketten. Je site is een klein Go-programma: jij brengt de templates en kiest de modules. Het resultaat is één binary, die op SQLite draait zonder andere dienst, of op PostgreSQL of MySQL.

  • De database en haar tabellen, aangemaakt en bijgewerkt bij de start
  • De admin, met inloggen, twee-staps inloggen, wachtwoordherstel, accounts en groepen
  • De paginaboom, de routes in elke taal en gepland publiceren
  • De mediabibliotheek, met verkleinde kopieën van afbeeldingen
  • Site-instellingen, thema's, sitemap.xml, robots.txt en zoeken op de site
  • E-mail voor de modules, via de afzender die je instelt
app := webthings.New(webthings.Config{
    Name:      "My site",
    Locales:   locales.Config{
        Default: "en",
        Enabled: []string{"en", "nl"},
    },
    Templates: os.DirFS("templates"),
})

err := app.Use(
    publishing.Module("news", "News"),
    events.Module("agenda", "Agenda"),
)
if err != nil {
    log.Fatal(err)
}

err = app.ListenAndServe(ctx, ":8080")

Modules

Een module voeg je toe met één regel: haar admin-secties, pagina's, templatefuncties en databasetabellen komen mee. De meegeleverde modules gebruiken alleen de publieke API, dus een eigen module kan alles wat zij ook kunnen.

  • Publishing
  • Events
  • Gallery
  • Forms
  • Newsletter
  • Comments
  • Polls
  • Documents
  • People
  • Directory
  • Lists
  • Banners
  • Testimonials
  • Registrations
  • Submissions
  • Redirects
  • Stats