CMS y publicaciones

STXT como formato fuente de un sitio web, un blog o un libro: el contenido vive en ficheros de texto y la presentación se decide después.

Este portal está hecho así. Cada página de stxt.dev es un documento STXT del namespace dev.stxt.website, y un generador lo convierte en HTML. Se puede comprobar añadiendo .stxt a la dirección de cualquier página, por ejemplo use-cases-cms.stxt.

Una página

Page (com.acme.cms.page):
	Title: Sobre STXT
	Slug: sobre-stxt
	Language: es
	Status: Published

	SEO:
		Description: Lenguaje textual legible y validable
		Keywords:
			Keyword: stxt
			Keyword: documentos

	Content >>
		## ¿Qué es STXT?

		STXT es un lenguaje diseñado para escribir documentos
		que las personas leen y los programas procesan.

		## Principios

		- Human First
		- Sintaxis mínima
		- Validación opcional

	Footer >>
		Última actualización: enero de 2026

En este ejemplo tenemos:

  • Metadatos: Title, Slug, Language, Status y SEO. Son nodos que el generador lee directamente.
  • Contenido: Content y Footer. Son nodos block, y el documento no contiene HTML, CSS ni layout.

La plantilla

Template (@stxt.template): com.acme.cms.page
	Structure >>
		Page:
			Title: (1)
			Slug: (1)
			Language: (?) ENUM [es, en, fr]
			Status: (1) ENUM [Draft, Published, Archived]
			SEO: (?)
				Description: (?)
				Keywords: (?)
					Keyword: (+)
			Content: (1) MARKDOWN
			Footer: (?) TEXT

La plantilla garantiza lo que el generador necesita para funcionar: un título, un slug, un estado de la lista y un contenido.

Content es de tipo MARKDOWN (STXT-SCHEMA-SPEC §9.7). STXT no interpreta ese Markdown: lo entrega tal cual, y el tipo indica a quien lo recibe (el generador, el editor o el playground) cómo debe tratarlo. Footer es TEXT, y se muestra literalmente. Una misma lección escrita con Frontmatter, MDX, Markdoc, YAML y STXT, y qué valida cada uno: STXT, prosa dentro de la estructura.

Una página que no valida

# ERROR: este documento no valida
Page (com.acme.cms.page):
	Title: Sobre STXT
	# Falta `Slug`
	# `published` en minúsculas no es `Published`
	Status: published
	# `Author` no está en la plantilla
	Author: Joan Costa
	Content >>
		## ¿Qué es STXT?

Una página que no valida no se genera.

Un libro por capítulos

Una publicación larga sigue el mismo patrón. Cada capítulo es un nodo con su número y su texto:

Publication (com.acme.editorial.publication):
	Title: STXT, el libro
	ISBN: 978-1-23456-789-0
	Language: es
	Status: In Progress

	Chapter: Introducción
		Number: 1
		Content >>
			Este capítulo introduce los conceptos básicos de STXT.
	Chapter: Sintaxis
		Number: 2
		Content >>
			Se describe la sintaxis del lenguaje con ejemplos.
	Chapter: Validación
		Number: 3
		Content >>
			Plantillas y esquemas permiten añadir reglas semánticas.

Y su plantilla:

Template (@stxt.template): com.acme.editorial.publication
	Structure >>
		Publication:
			Title: (1)
			ISBN: (?)
			Language: (1) ENUM [es, en, fr]
			Status: (1) ENUM [In Progress, Published]
			Chapter: (+)
				Number: (1) NATURAL
				Content: (1) MARKDOWN

Un documento STXT es un árbol ordenado, así que los capítulos salen en el orden en que están escritos. Un libro de cuarenta capítulos se puede partir en cuarenta ficheros con el mismo namespace, y la plantilla sirve para todos.

El flujo de publicación

  1. Se escribe el documento con cualquier editor.
  2. Se guarda en un repositorio. La revisión editorial es un diff.
  3. Se valida con stxt validate (La línea de comandos), en local o en integración continua.
  4. El generador lee el árbol y produce HTML, PDF, EPUB o un feed.

La presentación se decide en el paso 4, y se puede cambiar entera sin tocar el contenido.

Límites

STXT no es un CMS: no tiene interfaz de edición, usuarios, flujo de aprobación ni previsualización. Es el formato en el que se guarda el contenido.

Tampoco define qué dialecto de Markdown se admite en un bloque MARKDOWN. Eso lo decide quien lo renderiza.

Las páginas también las puede escribir un modelo, ver IA y LLMs.