Crates.io | ruxt |
lib.rs | ruxt |
version | 0.1.2 |
source | src |
created_at | 2024-05-03 04:43:36.9838 |
updated_at | 2024-05-05 03:42:10.133211 |
description | An Actix-based Rust framework for building HTMX applications. |
homepage | https://ruxt.rs |
repository | https://github.com/duncanlutz/Ruxt |
max_upload_size | |
id | 1228375 |
size | 5,803 |
Ruxt is a Rust web framework written on top of Actix-web. It was written to make it easier to write plain HTML web applications in Rust, specifically utilizing the HTMX library!
This project is still in its early stages and is not recommended for production use.
Run the following command to add Ruxt to your project:
cargo add ruxt
Or add the following to your Cargo.toml
file:
[dependencies]
ruxt = "0.1.2"
To create a new Ruxt project, install the create-ruxt-app
CLI tool with the following command:
cargo install create-ruxt-app
Then, create a new project with the following command:
cargo create-ruxt-app {project_name}
This will create a new project with the following structure:
my_project
├── Cargo.toml
├── src
│ ├── main.rs
│ └── pages
│ ├── index.rs
│ └── mod.rs
To run your project, navigate to the root of your project and run the following command:
cargo run
The Ruxt main
macro will automatically generate routes for files in the routes
directory.
The routes are generated based on the file name, so a file named index.rs
will be available at the root of the server.
The macro determines which HTTP verb to use based on the function name. For example, a function named get
will be a GET
route.
So for example:
// routes/index.rs
use actix_web::{web, HttpResponse, Responder};
pub async fn get() -> impl Responder {
HttpResponse::Ok().body("Hello, World!")
}
Will be available as a GET request at http://localhost:8080/
.
The following verbs are available for routing:
get
post
put
patch
delete
Dynamic routes can be created by naming a folder or file with two leading underscores. For example, a folder named __user
will create a dynamic route at /user/{id}
.
// routes/__user.rs
use actix_web::{web, HttpResponse, Responder};
pub async fn post(id: web::Path<String>) -> impl Responder {
HttpResponse::Ok().body(format!("Hello, {}!", id))
}
Will be available as a POST request at http://localhost:8080/user/{id}
.
mod
or index
because of the way the macro generates routes. I'm looking into a solution for this.More to come!
Feel free to open an issue if you have any feature requests or suggestions.
Ruxt uses a file-based routing system.
This is accomplished using a custom proc-macro that reads the contents of the pages
directory and generates a new main
function that creates a new Actix-web server with routes for each file in the pages
directory.
This project is licensed under the MIT license.