#markup #template #html

sailfish

Simple, small, and extremely fast template engine for Rust

28 releases

new 0.8.4-beta.1 Feb 20, 2024
0.8.3 Oct 22, 2023
0.8.0 Jul 28, 2023
0.6.0 Jan 24, 2023
0.2.0 Jul 16, 2020

#10 in Template engine

Download history 1018/week @ 2023-11-05 1385/week @ 2023-11-12 1184/week @ 2023-11-19 1930/week @ 2023-11-26 1179/week @ 2023-12-03 1438/week @ 2023-12-10 1201/week @ 2023-12-17 988/week @ 2023-12-24 1267/week @ 2023-12-31 1198/week @ 2024-01-07 1480/week @ 2024-01-14 1254/week @ 2024-01-21 1016/week @ 2024-01-28 1025/week @ 2024-02-04 1102/week @ 2024-02-11 1693/week @ 2024-02-18

4,949 downloads per month
Used in 27 crates (16 directly)

MIT license

80KB
2K SLoC

SailFish

Simple, small, and extremely fast template engine for Rust

Tests Version dependency status Rust 1.60 License: MIT

User Guide | API Docs | Examples

✨ Features

  • Simple and intuitive syntax inspired by EJS
  • Include another template file inside template
  • Built-in filters
  • Minimal dependencies (<15 crates in total)
  • Extremely fast (See benchmarks)
  • Better error message
  • Syntax highlighting support (vscode, vim)
  • Works on Rust 1.60 or later

🐟 Example

Dependencies:

[dependencies]
sailfish = "0.8.4-beta.1"

Template file (templates/hello.stpl):

<html>
  <body>
    <% for msg in &messages { %>
      <div><%= msg %></div>
    <% } %>
  </body>
</html>

Code:

use sailfish::TemplateOnce;

#[derive(TemplateOnce)]
#[template(path = "hello.stpl")]
struct HelloTemplate {
    messages: Vec<String>
}

fn main() {
    let ctx = HelloTemplate {
        messages: vec![String::from("foo"), String::from("bar")],
    };
    println!("{}", ctx.render_once().unwrap());
}

You can find more examples in examples directory.

🐾 Roadmap

  • Template trait (RFC)
  • Template inheritance (block, partials, etc.)

👤 Author

🇯🇵 Ryohei Machida

🤝 Contributing

Contributions, issues and feature requests are welcome!

Since sailfish is an immature library, there are many planned features that is on a stage of RFC. Please leave a comment if you have an idea about its design!

Also I welcome any pull requests to improve sailfish! Find issues with Status: PR Welcome label, and let's create a new pull request!

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2020 Ryohei Machida.

This project is MIT licensed.


This README was generated with ❤️ by readme-md-generator

Dependencies

~0.1–11MB
~84K SLoC