{"id":14988748,"url":"https://github.com/manuelcillero/pagetop","last_synced_at":"2025-04-12T00:23:08.034Z","repository":{"id":61369491,"uuid":"522170772","full_name":"manuelcillero/pagetop","owner":"manuelcillero","description":"An opinionated web framework to build modular Server-Side Rendering web solutions.","archived":false,"fork":false,"pushed_at":"2024-04-28T22:10:10.000Z","size":4326,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-30T15:41:33.592Z","etag":null,"topics":["rust","ssr","web"],"latest_commit_sha":null,"homepage":"https://pagetop.cillero.es","language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manuelcillero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-07T09:37:12.000Z","updated_at":"2024-07-27T12:45:21.671Z","dependencies_parsed_at":"2024-01-07T01:00:09.423Z","dependency_job_id":"6d28f33a-cee8-428d-ba6b-8730c610faf9","html_url":"https://github.com/manuelcillero/pagetop","commit_stats":{"total_commits":285,"total_committers":1,"mean_commits":285.0,"dds":0.0,"last_synced_commit":"2a8946d9486837cbb7c61ed2426a5c67dd638d38"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelcillero%2Fpagetop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelcillero%2Fpagetop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelcillero%2Fpagetop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelcillero%2Fpagetop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuelcillero","download_url":"https://codeload.github.com/manuelcillero/pagetop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247886922,"owners_count":21012920,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust","ssr","web"],"created_at":"2024-09-24T14:17:08.648Z","updated_at":"2025-04-12T00:23:08.000Z","avatar_url":"https://github.com/manuelcillero.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/manuelcillero/pagetop/main/static/banner.png\" /\u003e\n\n\u003ch1\u003ePageTop\u003c/h1\u003e\n\n\u003cp\u003eUn entorno de desarrollo para crear soluciones web modulares, extensibles y configurables.\u003c/p\u003e\n\n[![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia\u0026style=for-the-badge)](#-license)\n[![Doc API](https://img.shields.io/docsrs/pagetop?label=Doc%20API\u0026style=for-the-badge\u0026logo=Docs.rs)](https://docs.rs/pagetop)\n[![Crates.io](https://img.shields.io/crates/v/pagetop.svg?style=for-the-badge\u0026logo=ipfs)](https://crates.io/crates/pagetop)\n[![Descargas](https://img.shields.io/crates/d/pagetop.svg?label=Descargas\u0026style=for-the-badge\u0026logo=transmission)](https://crates.io/crates/pagetop)\n\n\u003c/div\u003e\n\n`PageTop` reivindica la esencia de la web clásica usando [Rust](https://www.rust-lang.org/es) para\nla creación de soluciones web SSR (*renderizadas en el servidor*) basadas en HTML, CSS y JavaScript.\nOfrece un conjunto de herramientas que los desarrolladores pueden implementar, extender o adaptar\nsegún las necesidades de cada proyecto, incluyendo:\n\n  * **Acciones** (*actions*): alteran la lógica interna de una funcionalidad interceptando su flujo\n    de ejecución.\n  * **Componentes** (*components*): encapsulan HTML, CSS y JavaScript en unidades funcionales,\n    configurables y reutilizables.\n  * **Extensiones** (*extensions*): añaden, extienden o personalizan funcionalidades usando las APIs\n    de `PageTop` o de terceros.\n  * **Temas** (*themes*): son extensiones que permiten modificar la apariencia de páginas y\n    componentes sin comprometer su funcionalidad.\n\n\n# ⚡️ Guía rápida\n\nLa aplicación más sencilla de `PageTop` se ve así:\n\n```rust#ignore\nuse pagetop::prelude::*;\n\n#[pagetop::main]\nasync fn main() -\u003e std::io::Result\u003c()\u003e {\n    Application::new().run()?.await\n}\n```\n\nPor defecto, este código sirve una página web de bienvenida accesible desde un navegador en la\ndirección `http://localhost:8088`, siguiendo la configuración predeterminada.\n\nPara personalizar el servicio, puedes crear una extensión de `PageTop` de la siguiente manera:\n\n```rust#ignore\nuse pagetop::prelude::*;\n\nstruct HelloWorld;\n\nimpl ExtensionTrait for HelloWorld {\n    fn configure_service(\u0026self, scfg: \u0026mut service::web::ServiceConfig) {\n        scfg.route(\"/\", service::web::get().to(hello_world));\n    }\n}\n\nasync fn hello_world(request: HttpRequest) -\u003e ResultPage\u003cMarkup, ErrorPage\u003e {\n    Page::new(request)\n        .with_component(Html::with(html! { h1 { \"Hello world!\" } }))\n        .render()\n}\n\n#[pagetop::main]\nasync fn main() -\u003e std::io::Result\u003c()\u003e {\n    Application::prepare(\u0026HelloWorld).run()?.await\n}\n```\n\nEste programa implementa una extensión llamada `HelloWorld` que sirve una página web en la ruta raíz\n(`/`) mostrando el texto \"Hello world!\" dentro de un elemento HTML `\u003ch1\u003e`.\n\n\n# 📂 Repositorio\n\nEl código se organiza en un *workspace* con los siguientes subproyectos:\n\n  * **[pagetop](https://github.com/manuelcillero/pagetop/tree/latest/pagetop)**, es la librería\n    principal. Reúne algunos de los *crates* más estables y populares del ecosistema Rust para\n    proporcionar APIs y recursos para la creación avanzada de soluciones web.\n\n## Auxiliares\n\n  * **[pagetop-build](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-build)**,\n    permite incluir fácilmente archivos estáticos o archivos SCSS compilados directamente en el\n    binario de las aplicaciones `PageTop`.\n\n  * **[pagetop-macros](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-macros)**,\n    proporciona una colección de macros que mejoran la experiencia de desarrollo con `PageTop`.\n\n## Extensiones\n\n  * **[pagetop-seaorm](https://github.com/manuelcillero/pagetop/tree/latest/extensions/pagetop-seaorm)**,\n    integra [SeaORM](https://www.sea-ql.org/SeaORM) para trabajar con bases de datos en aplicaciones\n    `PageTop`.\n\n  * **[pagetop-mdbook](https://github.com/manuelcillero/pagetop/tree/latest/extensions/pagetop-mdbook)**,\n    incluye contenido generado por [mdBook](https://rust-lang.github.io/mdBook/) en aplicaciones\n    desarrolladas con `PageTop`.\n\n  * **[pagetop-hljs](https://github.com/manuelcillero/pagetop/tree/latest/extensions/pagetop-hljs)**,\n    utiliza [HighlightJS](https://highlightjs.org) para mostrar fragmentos de código con resaltado\n    de sintaxis con `PageTop`.\n\n## Temas\n\n  * **[pagetop-bootsier](https://github.com/manuelcillero/pagetop/tree/latest/extensions/pagetop-bootsier)**,\n    tema para `PageTop` que usa [Bootstrap](https://getbootstrap.com) para dar vida a tus diseños\n    web.\n\n## Aplicaciones\n\n  * **[drust](https://github.com/manuelcillero/pagetop/tree/latest/drust)**, es una aplicación que\n    utiliza `PageTop` para crear un Sistema de Gestión de Contenidos (CMS) que permita construir\n    sitios web dinámicos, administrados y configurables.\n\n  * **[website](https://github.com/manuelcillero/pagetop/tree/latest/website)**, es la aplicación\n    web creada con el propio entorno `PageTop` para descubrir a la comunidad su ecosistema en\n    [pagetop.cillero.es](https://pagetop.cillero.es).\n\n\n# 🚧 Advertencia\n\n`PageTop` es un proyecto personal que hago por diversión para aprender cosas nuevas. Su API es\ninestable y está sujeta a cambios frecuentes. No recomiendo su uso en producción, al menos mientras\nno se libere una versión **1.0.0**.\n\n\n# 📜 Licencia\n\nEl código está disponible bajo una doble licencia:\n\n  * **Licencia MIT**\n    ([LICENSE-MIT](LICENSE-MIT) o también https://opensource.org/licenses/MIT)\n\n  * **Licencia Apache, Versión 2.0**\n    ([LICENSE-APACHE](LICENSE-APACHE) o también https://www.apache.org/licenses/LICENSE-2.0)\n\nPuedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en\nel ecosistema Rust.\n\n\n# ✨ Contribuciones\n\nCualquier contribución para añadir al proyecto se considerará automáticamente bajo la doble licencia\nindicada arriba (MIT o Apache v2.0), sin términos o condiciones adicionales, tal y como permite la\nlicencia *Apache v2.0*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelcillero%2Fpagetop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuelcillero%2Fpagetop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelcillero%2Fpagetop/lists"}