Existiendo Hugo, Eleventy, Astro y una docena más de generadores de sitios estáticos bien mantenidos, he montado esta web con Publish, de John Sundell. Es una decisión discutible, así que la explico.
El motivo
Escribo Swift todo el día. Publish me deja definir la web como un tipo:
struct DavidNovella: Website {
enum SectionID: String, WebsiteSectionID {
case apps
case blog
}
var url = URL(string: "https://davidnovella.es")!
var name = "David Novella"
var language: Language { .spanish }
}
Y el tema como funciones que devuelven HTML, con el compilador vigilando:
func makeItemHTML(for item: Item<Site>,
context: PublishingContext<Site>) throws -> HTML {
HTML(
.lang(context.site.language),
.head(for: item, on: context.site),
.body {
SiteHeader(currentPath: item.path)
Wrapper {
H1(item.title)
Div(item.body).class("content")
}
}
)
}
No hay plantillas con llaves dobles ni errores que aparezcan al generar. Si me invento un campo de metadatos, no compila. Es la misma sensación que trabajar con SwiftUI, aplicada a HTML.
Los inconvenientes
Conviene decirlos:
- Publish lleva tiempo sin actualizarse. La última versión etiquetada es la 0.9.0. Compila sin problemas con Swift 6.4, pero no esperes correcciones.
- La comunidad es pequeña. Comparado con Hugo, aquí hay poco escrito y pocos temas que copiar.
- El ecosistema de plugins es mínimo. Lo que necesites, probablemente tengas que escribirlo tú, aunque escribir un
PublishingStepes sorprendentemente poco código.
Para quién tiene sentido
Si escribes Swift a diario y tu web es pequeña, la balanza sale a favor: montarla es cuestión de una tarde y el mantenimiento es escribir Markdown. Si no, casi cualquier otro generador te va a dar menos trabajo.