Un entorno para el desarrollo de soluciones web modulares, extensibles y configurables.
Find a file
2026-05-09 09:35:59 +02:00
.cargo Añade alias cargo td y aclara doc de pruebas 2026-05-09 09:35:59 +02:00
config Añade soporte a temas en la API de extensiones 2025-07-20 23:51:15 +02:00
examples (examples): Añade ejemplo de formulario 2026-05-02 18:19:45 +02:00
extensions 📝 Retoques en README's y documentación 2026-05-09 08:18:28 +02:00
helpers 🔖 Prepara publicación de pagetop-minimal 0.1.0 2026-05-03 12:44:13 +02:00
src 🚧 Actualiza dependencias y revisa código 2026-05-02 18:19:45 +02:00
static ♻️ (intro): Normaliza nombres de clases CSS 2026-05-02 18:19:45 +02:00
tests ♻️ (pagetop): Renombra Slot a Embed 2026-05-02 18:19:45 +02:00
tools 🔨 Retoques en scripts de liberación de versiones 2026-05-03 12:16:45 +02:00
.gitignore 🔨 Mejora herramientas de liberación de versiones 2026-05-03 09:40:14 +02:00
build.rs 🍱 Añade gestión de recursos estáticos de PageTop 2025-07-28 18:33:50 +02:00
Cargo.lock 🔖 Prepara publicación de pagetop-bootsier 0.1.1 2026-05-07 21:21:47 +02:00
Cargo.toml 🔖 Prepara publicación de pagetop-bootsier 0.1.0 2026-05-03 23:41:43 +02:00
CHANGELOG.md 🔖 Prepara publicación de pagetop 0.5.0 2026-05-03 22:57:20 +02:00
CONTRIBUTING.md 📝 Actualiza el formato de mensajes commit 2025-12-21 15:20:53 +01:00
CREDITS.md 📝 Retoques en README's y documentación 2026-05-09 08:18:28 +02:00
LICENSE-APACHE 📄 Añade las licencias del proyecto 2025-06-24 20:23:28 +02:00
LICENSE-MIT 📄 Añade las licencias del proyecto 2025-06-24 20:23:28 +02:00
MAINTAINERS.md 📝 Actualiza las guías de contribución 2025-12-21 09:47:35 +01:00
README.md Añade alias cargo td y aclara doc de pruebas 2026-05-09 09:35:59 +02:00

PageTop

Un entorno para el desarrollo de soluciones web modulares, extensibles y configurables.

Doc API Crates.io Descargas Licencia


PageTop reivindica la esencia de la web clásica usando Rust para la creación de soluciones web SSR (renderizadas en el servidor) basadas en HTML, CSS y JavaScript. Ofrece un conjunto de herramientas que los desarrolladores pueden implementar, extender o adaptar según las necesidades de cada proyecto, incluyendo:

  • Acciones (actions): alteran la lógica interna de una funcionalidad interceptando su flujo de ejecución.
  • Componentes (components): encapsulan HTML, CSS y JavaScript en unidades funcionales, configurables y reutilizables.
  • Extensiones (extensions): añaden, extienden o personalizan funcionalidades usando las APIs de PageTop o de terceros.
  • Temas (themes): son extensiones que permiten modificar la apariencia de páginas y componentes.

Guía rápida

La aplicación más sencilla de PageTop se ve así:

use pagetop::prelude::*;

#[pagetop::main]
async fn main() -> std::io::Result<()> {
    Application::new().run()?.await
}

Este código arranca el servidor de PageTop. Con la configuración por defecto, muestra una página de bienvenida accesible desde un navegador local en la dirección http://localhost:8080.

Para personalizar el servicio, se puede crear una extensión de PageTop de la siguiente manera:

use pagetop::prelude::*;

struct HelloWorld;

impl Extension for HelloWorld {
    fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
        scfg.route("/", service::web::get().to(hello_world));
    }
}

async fn hello_world(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
    Page::new(request)
        .add_child(Html::with(|_| html! { h1 { "Hello World!" } }))
        .render()
}

#[pagetop::main]
async fn main() -> std::io::Result<()> {
    Application::prepare(&HelloWorld).run()?.await
}

Este programa implementa una extensión llamada HelloWorld que sirve una página web en la ruta raíz (/) mostrando el texto "Hello world!" dentro de un elemento HTML <h1>.

📂 Proyecto

El código se organiza en un workspace donde actualmente se incluyen los siguientes subproyectos:

  • pagetop, con el código fuente de la librería principal. Reúne algunos de los crates más estables y populares del ecosistema Rust para proporcionar APIs y recursos para la creación avanzada de soluciones web.

Auxiliares

  • pagetop-build, prepara los archivos estáticos o archivos SCSS compilados para incluirlos en el binario de las aplicaciones PageTop durante la compilación de los ejecutables.

  • pagetop-macros, proporciona una colección de macros procedurales que mejoran la experiencia de desarrollo con PageTop.

  • pagetop-minimal, ofrece macros declarativas esenciales para optimizar tareas comunes como la composición de texto, la concatenación de cadenas y el manejo de colecciones clave-valor.

  • pagetop-statics, permite incluir archivos estáticos en el ejecutable de las aplicaciones PageTop para servirlos de forma eficiente, con detección de cambios que optimizan el tiempo de compilación.

Extensiones

  • pagetop-aliner, es un tema para demos y pruebas que muestra esquemáticamente la composición de las páginas HTML.

  • pagetop-bootsier, tema basado en Bootstrap para integrar su catálogo de estilos y componentes flexibles.

🧪 Pruebas

Para simplificar el flujo de trabajo, el repositorio incluye varios alias de Cargo declarados en .cargo/config.toml. Basta con ejecutarlos desde la raíz del proyecto:

Comando Descripción
cargo ts Lanza todos los tests de pagetop
cargo ts --test util Lanza los tests de integración del archivo tests/util.rs
cargo ts --doc locale Lanza los doctests de pagetop cuyo path contiene locale
cargo tw Lanza todos los tests del workspace
cargo td <crate> Lanza los doctests de un crate concreto del workspace

Nota

  • Todos los alias, excepto cargo td, aplican la feature testing para los crates que la declaren.
  • Cuando lanza todos los tests se incluyen las pruebas unitarias, de integración y doctests.
  • Los alias suprimen las trazas del registro de eventos. Para activarlas usa directamente cargo test.

🚧 Advertencia

PageTop es un proyecto personal para aprender Rust y conocer su ecosistema. Su API está sujeta a cambios frecuentes. No se recomienda su uso en producción, al menos hasta que se libere la versión 1.0.0.

📜 Licencia

El código está disponible bajo una doble licencia:

Puedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en el ecosistema Rust.

Contribuir

PageTop mantiene un único repositorio oficial:

El repositorio de GitHub actúa como espejo y punto de entrada para:

  • dar mayor visibilidad al proyecto,
  • facilitar la participación de la comunidad,
  • centralizar issues y pull requests externas.

Aunque GitHub permite abrir pull requests, la integración del código se realiza únicamente en el repositorio oficial. El repositorio de GitHub se sincroniza posteriormente para reflejar el mismo estado.

En todos los casos, se respeta la autoría original de las contribuciones integradas, tanto en el historial como en la documentación asociada al cambio.

Para conocer el proceso completo de participación, revisión e integración de cambios, consulta el archivo CONTRIBUTING.md.

Cualquier contribución para añadir al proyecto se considerará automáticamente bajo la doble licencia indicada arriba (MIT o Apache v2.0), sin términos o condiciones adicionales, tal y como permite la licencia Apache v2.0.