{"id":13672100,"url":"https://github.com/rust-sailfish/sailfish","last_synced_at":"2026-03-07T18:32:46.464Z","repository":{"id":37179346,"uuid":"268711126","full_name":"rust-sailfish/sailfish","owner":"rust-sailfish","description":"Simple, small, and extremely fast template engine for Rust","archived":false,"fork":false,"pushed_at":"2026-02-05T19:02:34.000Z","size":21356,"stargazers_count":958,"open_issues_count":36,"forks_count":62,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-02-12T20:46:30.396Z","etag":null,"topics":["rust","template-engine"],"latest_commit_sha":null,"homepage":"https://rust-sailfish.github.io/sailfish/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rust-sailfish.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-02T05:41:43.000Z","updated_at":"2026-02-02T18:43:09.000Z","dependencies_parsed_at":"2023-02-14T01:46:26.023Z","dependency_job_id":"56e070fb-fabb-4542-994c-de08d01f6673","html_url":"https://github.com/rust-sailfish/sailfish","commit_stats":{"total_commits":420,"total_committers":13,"mean_commits":32.30769230769231,"dds":"0.12380952380952381","last_synced_commit":"9b0cd6263c843948fe9e528561b18c1b975bb678"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/rust-sailfish/sailfish","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-sailfish%2Fsailfish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-sailfish%2Fsailfish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-sailfish%2Fsailfish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-sailfish%2Fsailfish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rust-sailfish","download_url":"https://codeload.github.com/rust-sailfish/sailfish/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-sailfish%2Fsailfish/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30226247,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T18:12:09.766Z","status":"ssl_error","status_checked_at":"2026-03-07T18:11:58.786Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust","template-engine"],"created_at":"2024-08-02T09:01:26.663Z","updated_at":"2026-03-07T18:32:46.437Z","avatar_url":"https://github.com/rust-sailfish.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\n![SailFish](./resources/logo.png)\n\nSimple, small, and extremely fast template engine for Rust\n\n[![Tests](https://github.com/rust-sailfish/sailfish/workflows/Tests/badge.svg)](https://github.com/rust-sailfish/sailfish/actions?query=workflow%3ATests)\n[![Version](https://img.shields.io/crates/v/sailfish)](https://crates.io/crates/sailfish)\n[![dependency status](https://deps.rs/repo/github/rust-sailfish/sailfish/status.svg)](https://deps.rs/repo/github/rust-sailfish/sailfish)\n[![Rust 1.60](https://img.shields.io/badge/rust-1.60+-lightgray.svg)](https://blog.rust-lang.org/2022/04/07/Rust-1.60.0.html)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/rust-sailfish/sailfish/blob/master/LICENSE)\n\n[User Guide](https://rust-sailfish.github.io/sailfish/) | [API Docs](https://docs.rs/sailfish) | [Examples](./examples)\n\n\u003c/div\u003e\n\n## ✨ Features\n\n- Simple and intuitive syntax inspired by [EJS](https://ejs.co/)\n- Include another template file inside template\n- Built-in filters\n- Minimal dependencies (\u003c15 crates in total)\n- Extremely fast (See [benchmarks](https://github.com/djc/template-benchmarks-rs))\n- Better error message\n- Syntax highlighting support ([vscode](./syntax/vscode), [vim](./syntax/vim))\n- Works on Rust 1.60 or later\n\n## 🐟 Example\n\nDependencies:\n\n```toml\n[dependencies]\nsailfish = \"0.9.0-beta\"\n```\n\nYou can choose to use `TemplateSimple` to access fields directly:\n\n\u003e Template file (templates/hello.stpl):\n\u003e \n\u003e ```erb\n\u003e \u003chtml\u003e\n\u003e   \u003cbody\u003e\n\u003e     \u003c% for msg in messages { %\u003e\n\u003e       \u003cdiv\u003e\u003c%= msg %\u003e\u003c/div\u003e\n\u003e     \u003c% } %\u003e\n\u003e   \u003c/body\u003e\n\u003e \u003c/html\u003e\n\u003e ```\n\u003e \n\u003e Code:\n\u003e \n\u003e ```rust\n\u003e use sailfish::TemplateSimple;\n\u003e \n\u003e #[derive(TemplateSimple)]\n\u003e #[template(path = \"hello.stpl\")]\n\u003e struct HelloTemplate {\n\u003e     messages: Vec\u003cString\u003e\n\u003e }\n\u003e \n\u003e fn main() {\n\u003e     let ctx = HelloTemplate {\n\u003e         messages: vec![String::from(\"foo\"), String::from(\"bar\")],\n\u003e     };\n\u003e     println!(\"{}\", ctx.render_once().unwrap());\n\u003e }\n\u003e ```\n\nOr use the more powerful `Template/TemplateMut/TemplateOnce`:\n\n\u003e Template file (templates/hello.stpl):\n\u003e \n\u003e ```erb\n\u003e \u003chtml\u003e\n\u003e   \u003cbody\u003e\n\u003e     \u003c% for msg in \u0026self.messages { %\u003e\n\u003e       \u003cdiv\u003e\u003c%= msg %\u003e\u003c/div\u003e\n\u003e     \u003c% } %\u003e\n\u003e     \u003cdiv\u003e\u003c%= self.say_hello() %\u003e\u003c/div\u003e\n\u003e   \u003c/body\u003e\n\u003e \u003c/html\u003e\n\u003e ```\n\u003e \n\u003e Code:\n\u003e \n\u003e ```rust\n\u003e use sailfish::Template;\n\u003e \n\u003e #[derive(Template)]\n\u003e #[template(path = \"hello.stpl\")]\n\u003e struct HelloTemplate {\n\u003e     messages: Vec\u003cString\u003e\n\u003e }\n\u003e\n\u003e impl HelloTemplate {\n\u003e     fn say_hello(\u0026self) -\u003e String {\n\u003e         String::from(\"Hello!\")\n\u003e     }\n\u003e }\n\u003e \n\u003e fn main() {\n\u003e     let ctx = HelloTemplate {\n\u003e         messages: vec![String::from(\"foo\"), String::from(\"bar\")],\n\u003e     };\n\u003e     println!(\"{}\", ctx.render().unwrap());\n\u003e }\n\u003e ```\n\nYou can find more examples in [examples](./examples) directory.\n\n## 🐾 Roadmap\n\n- `Template` trait ([RFC](https://github.com/rust-sailfish/sailfish/issues/3))\n- Template inheritance (block, partials, etc.)\n\n## 👤 Author\n\n🇯🇵 **Ryohei Machida**\n\n* GitHub: [@Kogia-sima](https://github.com/Kogia-sima)\n\n## 🤝 Contributing\n\nContributions, issues and feature requests are welcome!\n\nSince sailfish is an immature library, there are many [planned features](https://github.com/rust-sailfish/sailfish/labels/Type%3A%20RFC) that is on a stage of RFC. Please leave a comment if you have an idea about its design!\n\nAlso I welcome any pull requests to improve sailfish! Find issues with [Status: PR Welcome](https://github.com/rust-sailfish/sailfish/issues?q=is%3Aissue+is%3Aopen+label%3A%22Status%3A+PR+Welcome%22) label, and [let's create a new pull request](https://github.com/rust-sailfish/sailfish/pulls)!\n\n## Show your support\n\nGive a ⭐️ if this project helped you!\n\n## 📝 License\n\nCopyright © 2020 [Ryohei Machida](https://github.com/Kogia-sima).\n\nThis project is [MIT](https://github.com/rust-sailfish/sailfish/blob/master/LICENSE) licensed.\n\n***\n_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_\n","funding_links":[],"categories":["Rust","rust","Libraries"],"sub_categories":["Web"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-sailfish%2Fsailfish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frust-sailfish%2Fsailfish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-sailfish%2Fsailfish/lists"}