{"id":13837991,"url":"https://github.com/rizo/helix","last_synced_at":"2025-09-19T06:19:44.227Z","repository":{"id":65914997,"uuid":"601260835","full_name":"rizo/helix","owner":"rizo","description":"Build reactive web interfaces in OCaml.","archived":false,"fork":false,"pushed_at":"2025-03-21T13:36:29.000Z","size":1108,"stargazers_count":73,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-06T06:12:17.482Z","etag":null,"topics":["javascript","jsoo","ocaml","reactive","web"],"latest_commit_sha":null,"homepage":"https://rizo.github.io/helix/","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rizo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2023-02-13T17:42:38.000Z","updated_at":"2025-04-04T10:32:48.000Z","dependencies_parsed_at":"2024-01-13T17:12:07.098Z","dependency_job_id":"1bd66d09-28aa-4864-8f38-724d430135a9","html_url":"https://github.com/rizo/helix","commit_stats":null,"previous_names":["rizo/helix"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizo%2Fhelix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizo%2Fhelix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizo%2Fhelix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizo%2Fhelix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rizo","download_url":"https://codeload.github.com/rizo/helix/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248703195,"owners_count":21148116,"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":["javascript","jsoo","ocaml","reactive","web"],"created_at":"2024-08-04T15:01:32.803Z","updated_at":"2025-09-19T06:19:39.141Z","avatar_url":"https://github.com/rizo.png","language":"OCaml","funding_links":[],"categories":["OCaml"],"sub_categories":[],"readme":"# Helix\n\n**Build reactive web interfaces in OCaml.**\n\n\u003e Note: this project is experimental. The core functionality is stable but the\n\u003e API may break before the official release.\n\n[**API Docs**](https://rizo.github.io/helix/helix/Helix/index.html) • [**Examples**](https://github.com/rizo/helix/tree/master/examples) • [**Starter Project**](https://github.com/rizo/helix-starter)\n\n## Features\n\n- Reactive signals with\n  [`signal`](https://github.com/rizo/signal): signals represent values that change over time and can be used to model any dynamic state in your application.\n- Declarative HTML with [`Helix.Html`](https://rizo.github.io/helix/html/Html/index.html): write your HTML templates directly in OCaml.\n- Fine-grained reactivity without Virtual DOM using\n  [show/bind](https://rizo.github.io/helix/helix/Helix/index.html#reactive-views): updates are directly applied to the DOM tree based on values emited by reactive signals.\n- Js-compatibility library [`jx`](https://rizo.github.io/helix/jx/Jx/index.html): write bindings to interact withe the JavaScript ecosystem.\n\n\n## Example\n\n```ocaml\nopen Helix\n\nlet counter () =\n  let count = Signal.make 0 in\n  let open Html in\n  div\n    [ style_list [ (\"border\", \"1px solid #eee\"); (\"padding\", \"1em\") ] ]\n    [\n      h2 [] [ text \"Counter\" ];\n      div [] [ text \"Compute a count.\" ];\n      div []\n        [\n          button\n            [ on_click (fun () -\u003e Signal.update (fun n -\u003e n + 1) count) ]\n            [ text \"+\" ];\n          button\n            [ on_click (fun () -\u003e Signal.update (fun n -\u003e n - 1) count) ]\n            [ text \"-\" ];\n          button [ on_click (fun () -\u003e Signal.emit 0 count) ] [ text \"Reset\" ];\n          div\n            [\n              style_list [ (\"font-size\", \"32px\") ];\n              bind\n                (fun n -\u003e style_list [ (\"color\", if n \u003c 0 then \"red\" else \"blue\") ])\n                count;\n            ]\n            [ show (fun n -\u003e text (string_of_int n)) count ];\n        ];\n    ]\n\nlet () =\n  match Stdweb.Dom.Document.get_element_by_id \"root\" with\n  | Some root -\u003e Html.mount root (counter ())\n  | None -\u003e failwith \"No #root element found\"\n```\n\n\n## Acknowledgements\n\nThis library is based on ideas found in other libraries and projects such as:\n[Elm](https://elm-lang.org/), [Ur/Web](http://www.impredicative.com/ur/),\n[SolidJS](https://www.solidjs.com/),\n[petite-vue](https://github.com/vuejs/petite-vue),\n[Surplus](https://github.com/adamhaile/surplus),\n[Brr](https://erratique.ch/software/brr) and [ReactJS](https://reactjs.org/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frizo%2Fhelix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frizo%2Fhelix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frizo%2Fhelix/lists"}