{"id":13726726,"url":"https://github.com/briskml/brisk-reconciler","last_synced_at":"2025-05-07T22:30:33.541Z","repository":{"id":55985114,"uuid":"166043053","full_name":"briskml/brisk-reconciler","owner":"briskml","description":"React.js-like reconciler implemented in OCaml","archived":false,"fork":false,"pushed_at":"2025-03-06T16:05:42.000Z","size":763,"stargazers_count":133,"open_issues_count":18,"forks_count":17,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-06T16:39:10.222Z","etag":null,"topics":["brisk","ocaml","reason-react","reasonml","revery"],"latest_commit_sha":null,"homepage":"","language":"OCaml","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/briskml.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"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}},"created_at":"2019-01-16T13:16:06.000Z","updated_at":"2025-03-06T15:55:50.000Z","dependencies_parsed_at":"2025-03-06T16:41:25.043Z","dependency_job_id":null,"html_url":"https://github.com/briskml/brisk-reconciler","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briskml%2Fbrisk-reconciler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briskml%2Fbrisk-reconciler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briskml%2Fbrisk-reconciler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briskml%2Fbrisk-reconciler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/briskml","download_url":"https://codeload.github.com/briskml/brisk-reconciler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252965074,"owners_count":21832817,"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":["brisk","ocaml","reason-react","reasonml","revery"],"created_at":"2024-08-03T01:03:17.882Z","updated_at":"2025-05-07T22:30:33.529Z","avatar_url":"https://github.com/briskml.png","language":"OCaml","funding_links":[],"categories":["Reason","OCaml"],"sub_categories":[],"readme":"[![Build Status](https://dev.azure.com/briskml/brisk-reconciler/_apis/build/status/briskml.brisk-reconciler?branchName=master)](https://dev.azure.com/briskml/brisk-reconciler/_build/latest?definitionId=2\u0026branchName=master)\n\n# brisk-reconciler\n\n### An easy way to model any `tree-shaped state` with simple `stateful functions`\n\n#### Definitions:\n- `tree-shaped state`: Any tree shaped-state like the DOM tree, app navigation state, or even rich text document!\n- `stateful functions`: Functions that maintain state over time. Imagine that you can take any variable in your function and manage its value over the function's invocation. Now, imagine that any function invocation really creates its own \"instance\" of the function which will track this state separately from other invocations of this function.\n\n## Why?\n\nWe want to provide expressive and powerful abstractions to build and update trees of dynamic data. We built it with UIs in mind but this library is generally applicable.\n\nWe encourage you to experiment with this abstraction for different types of outputs. Thanks to `OutputTree`-agnostic Hooks (the mechanism which makes functions stateful), different types of outputs can use the same internal logic for updates or side effects.\n\nOne example of this is Brisk and Revery, where we have two vastly different approaches to building UIs. However, thanks to the shared layer, we envision that it'll be very simple to use the two at the same time.\n\n## Projects which use brisk-reconciler\n\n- [Brisk](https://github.com/briskml/brisk)\n- [Revery](https://github.com/revery-ui/revery)\n\n### Examples\n\n- [Lambda_term](example/lambda-term/lambda_term.mlx)\n  - `make run-lambda-term`\n\n- [Web_reconciler](example/web-reconciler/web_reconciler.mlx)\n  - `make`\n  - `open _build/default/example/web-reconciler/index.html`\n\n## Contributing\n\n### Install [esy](https://esy.sh/)\n\n```\nnpm install -g esy\n```\n\n### Installation using opam\n\nCreate local opam switch (optional):\n\n```\nopam switch create ./ --deps-only\n```\n\n```\nopam install . --with-dev-setup --with-test --with-doc\n```\n\n### Development workflow\n\nTake a look at our [issues](https://github.com/briskml/brisk-reconciler/issues) if you'd like to get an idea where to start.\n\n- build: `make`\n- test: `make test`\n\n### Community\n\nJoin us on `reason native ui` discord server [here](https://discord.gg/5ANq4EZ).\n\n## License\n\nThis project is provided under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbriskml%2Fbrisk-reconciler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbriskml%2Fbrisk-reconciler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbriskml%2Fbrisk-reconciler/lists"}