Drink Me.

~ vial: a micro micro-framework ~

vial is a small web "framework" for making small web "sites".

It only includes a few basics:

Everything else... well, that's up to you.

The goal is a small, simple, as-few-as-possible-dependencies web library you can use to test out an idea quickly or get a static site rolling. Single file, server side apps? You bet! Fast compilation? Yes please! À la carte dependencies? Now you're talkin'!

It's sort of like a picnic where the playlist is all 90s music and you have to bring your own beverage. In other words, you're gonna have a good time, but you're gonna have to do some work.

~ hello world ~

As is tradition:

```rust use vial::vial;

vial! { GET "/" => |_| "Hello, world!"; }

fn main() { vial::run!().unwrap(); } ```

For a bit more sanity, you can route to functions directly:

```rust use vial::prelude::*;

vial! { GET "/echo" => echo; POST "/echo" => post; }

fn echo(_: Request) -> impl Responder { "

" }

fn post(req: Request) -> impl Responder { format!( "

{}

", req.form("echo").unwrap_or("You didn't say anything!") ) }

fn main() { vial::run!().unwrap(); } ```

To really break the mold, you can split your site into different modules:

```rust use vial;

mod wiki; mod blog;

mod index { use vial::{Response, vial}; vial! { GET "/" => || Response::fromfile("index.html") } }

fn main() { // The order matters here - if wiki and blog both define "/", // the mod index version will match first and get run. vial::run!(index, wiki, blog); } ```

But hey, who wants to putz around with HTML when you can be writing Rust? Enable the horror feature and you're on your way:

```rust use vial::prelude::*;

vial! { GET "/" => |_| html! { p { : "You're looking for this: "; a(href="/echo") { : "echo" } } }; GET "/echo" => echo; POST "/echo" => post; }

fn echo(_: Request) -> impl Responder { html! { form(method="POST") { p { : "Type something: "; input(type="text", name="echo"); input(type="submit"); } } } }

fn post(req: Request) -> impl Responder { ownedhtml! { h1: req.form("echo") .unwrapor("You didn't say anything!"); } }

fn main() { vial::run!().unwrap(); } ```

~ hot reloading ~

Install [cargo-watch]:

$ cargo install cargo-watch
$ cargo watch -x 'run --example hello_world'

~ bonus features ~

vial doesn't come with JSON or a template engine or any of that fancy stuff, but there are a few compile-time --features you can activate for enhanced productivity:

Alice

Please note: The list above is a work-in-progress.

~ T0D0 ~

big goals