{"id":23553385,"url":"https://github.com/geofmureithi/hirola","last_synced_at":"2025-04-28T14:07:18.159Z","repository":{"id":50589862,"uuid":"519558580","full_name":"geofmureithi/hirola","owner":"geofmureithi","description":"Hirola is a no vdom rust frontend framework that is focused on simplicity and predictability.","archived":false,"fork":false,"pushed_at":"2025-04-26T22:13:31.000Z","size":687,"stargazers_count":62,"open_issues_count":12,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-26T23:19:48.494Z","etag":null,"topics":["framework","no-vdom","rust","wasm"],"latest_commit_sha":null,"homepage":"https://hirola-docs.vercel.app/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geofmureithi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-07-30T15:53:57.000Z","updated_at":"2025-04-12T11:55:07.000Z","dependencies_parsed_at":"2024-05-03T14:21:06.092Z","dependency_job_id":"26cb1301-1c3e-43f1-8c75-fff089124217","html_url":"https://github.com/geofmureithi/hirola","commit_stats":{"total_commits":69,"total_committers":2,"mean_commits":34.5,"dds":0.01449275362318836,"last_synced_commit":"e31f1f065c5422af0448df5c4832e793d101365b"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geofmureithi%2Fhirola","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geofmureithi%2Fhirola/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geofmureithi%2Fhirola/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geofmureithi%2Fhirola/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geofmureithi","download_url":"https://codeload.github.com/geofmureithi/hirola/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251065189,"owners_count":21531060,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["framework","no-vdom","rust","wasm"],"created_at":"2024-12-26T11:15:03.415Z","updated_at":"2025-04-28T14:07:18.138Z","avatar_url":"https://github.com/geofmureithi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hirola\n\n[![Latest Version](https://img.shields.io/crates/v/hirola.svg)](https://crates.io/crates/hirola)\n[![Browser Tests](https://github.com/geofmureithi/hirola/actions/workflows/browser.yml/badge.svg)](https://github.com/geofmureithi/hirola/actions/workflows/browser.yml)\n[![Unit Tests](https://github.com/geofmureithi/hirola/actions/workflows/unit.yml/badge.svg)](https://github.com/geofmureithi/hirola/actions/workflows/unit.yml)\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\n**Hirola** is a declarative frontend framework that is focused on simplicity and reactivity.\n\n## Goals\n\n1. KISS: A simple and declarative way to build frontend UIs in rust.\n2. Make it easy to read, extend and share code.\n3. Frp signals allowing fine-grained reactivity.\n4. Familiarity: Uses rsx which is very similar to jsx.\n\n## Example\n\nWe are going to create a simple counter program.\n\n```bash\ncargo new counter\n```\n\nWith a new project, we need to create an index file which is the entry point and required by trunk\n\n```bash\ncd counter\n```\n\nCreate an `index.html` in the root of counter. Add the contents below\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n    \u003cmeta charset=\"UTF-8\" /\u003e\n    \u003ctitle\u003eHirola Counter\u003c/title\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\u003c/body\u003e\n\u003c/html\u003e\n```\n\nLets add some code to `src/main.rs`\n\n```rust,no_run\nuse hirola::prelude::*;\nuse hirola::dom::*;\n\nfn counter() -\u003e Dom {\n    let count = Mutable::new(0i32);\n    let decrement = count.callback(|s| *s.lock_mut() -= 1);\n    let increment = count.callback(|s| *s.lock_mut() += 1);\n    html! {\n        \u003c\u003e\n            \u003cbutton on:click=decrement\u003e\"-\"\u003c/button\u003e\n            \u003cspan\u003e{count}\u003c/span\u003e\n            \u003cbutton on:click=increment\u003e\"+\"\u003c/button\u003e\n        \u003c/\u003e\n    }\n}\nfn main() {\n    hirola::dom::mount(counter()).unwrap();\n}\n```\n\nNow lets run our project\n\n```bash\ntrunk serve\n```\n\n## Ecosystem\n\nCheck out [Hirola Docs](https://hirola-docs.vercel.app/basics/getting-started) written with Hirola itself!\n\nHere are some extensions for hirola:\n\n1. [Form](https://hirola-docs.vercel.app/plugins/form)\n2. [Router](https://hirola-docs.vercel.app/plugins/router)\n3. [State](https://hirola-docs.vercel.app/plugins/state)\n4. [Markdown](https://hirola-docs.vercel.app/plugins/mdx)\n\n### Milestones\n\n| Status | Goal                               | Labels    |\n| :----: | :--------------------------------- | --------- |\n|   ✔    | Basic templating with rust and rsx | `ready`   |\n|   ✔    | Extend functionality with mixins   | `ready`   |\n|   ✔    | Components                         | `ready`   |\n|   ✔    | SSR                                | `ready`   |\n|   ✔    | Signals                            | `ready`   |\n|   🚧   | Form management                    | `started` |\n|   ⏳   | Markdown templating                | `pending` |\n|   🚧   | Styling                            | `started` |\n|   ⏳   | SSG                                | `pending` |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeofmureithi%2Fhirola","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeofmureithi%2Fhirola","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeofmureithi%2Fhirola/lists"}