HYRO

noun

/ˈhɪr.oʊ/

HYRO logo HYRO logo
1. A : acronym for "Hypermedia Rust Orchestration" B : a crate that extends [Axum](https://github.com/tokio-rs/axum/) with new functionality, like rendering [Jinja Templates](https://github.com/mitsuhiko/minijinja) on the server, [bundling css](https://github.com/parcel-bundler/lightningcss), and a better developer experience. C : a powerful HMR framework for [hypermedia systems](https://hypermedia.systems/) like [HTMX](https://htmx.org/). D : the equivalent of [Rails](https://rubyonrails.org/) for nerds ## Usage and Examples - More in-depth examples can be found at [examples/basic](examples/basic/) and [examples/crud](examples/crud/). Make sure you `cd` to the path containing the templates and style folders before running or _you will get a file-not-found error!_ Let's start with dependencies: ```sh cargo new hyro-getting-started cargo add hyro cargo add axum cargo add tokio -F full mkdir templates ``` HYRO templates use Jinja2. Let's start with a basic one: `templates/hello.html.jinja2` ```html

Hello, {{ name }}!

``` Then we can set up our boilerplate: `src/main.rs` ```rust use std::borrow::Cow; use axum::response::Html; use axum::{routing, Router, Server}; use hyro::{context, RouterExt, Template}; #[tokio::main] async fn main() { let router = Router::new() .route("/hello", routing::get(hello)) .into_service_with_hmr(); Server::from_tcp(hyro::bind("0.0.0.0:1380").await)).unwrap() .serve(router) .await .unwrap(); } async fn hello(template: Template) -> Html> { template.render(context! { name => "World", }) } ``` Now if we navigate to 'localhost:1380/hello', we can read our message! If you're running in debug mode, you can edit `templates/hello.html.jinja2` and the HMR should kick in.