rust-sailfish
sailfish
Rust

Simple, small, and extremely fast template engine for Rust

Last updated Jul 4, 2026
985
Stars
64
Forks
32
Issues
+1
Stars/day
Attention Score
77
Language breakdown
Rust 91.7%
HTML 2.5%
Shell 1.9%
Vim Script 1.1%
JavaScript 1.0%
TypeScript 1.0%
โ–ธ Files click to expand
README

SailFish

Simple, small, and extremely fast template engine for Rust

TestsVersiondependency statusRust 1.60License: 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.89 or later

๐ŸŸ Example

Dependencies:

[dependencies]
sailfish = "0.11.2"

You can choose to use TemplateSimple to access fields directly:

Template file (templates/hello.stpl):
>
> <html>
> <body> > <% for msg in messages { %> > <div><%= msg %></div> > <% } %> > </body> > </html> > >
Code:
>
> use sailfish::TemplateSimple;
> > #[derive(TemplateSimple)] > #[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()); > } >

Or use the more powerful Template/TemplateMut/TemplateOnce:

Template file (templates/hello.stpl):
>
> <html>
> <body> > <% for msg in &self.messages { %> > <div><%= msg %></div> > <% } %> > <div><%= self.say_hello() %></div> > </body> > </html> > >
Code:
>
> use sailfish::Template;
> > #[derive(Template)] > #[template(path = "hello.stpl")] > struct HelloTemplate { > messages: Vec<String> > } > > impl HelloTemplate { > fn say_hello(&self) -> String { > String::from("Hello!") > } > } > > fn main() { > let ctx = HelloTemplate { > messages: vec![String::from("foo"), String::from("bar")], > }; > println!("{}", ctx.render().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

Documentation Deployment Instructions

sudo apt install mkdocs mkdocs-material
cd sailfishrootfolder &&
cd docs && cd en 
mkdocs build
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท rust-sailfish/sailfish ยท Updated daily from GitHub