{"id":15650227,"url":"https://github.com/buntec/ff4s","last_synced_at":"2025-07-05T04:33:37.344Z","repository":{"id":39659939,"uuid":"444429324","full_name":"buntec/ff4s","owner":"buntec","description":"A purely functional web UI library for Scala.js","archived":false,"fork":false,"pushed_at":"2025-01-03T14:17:09.000Z","size":44711,"stargazers_count":45,"open_issues_count":11,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T02:13:25.270Z","etag":null,"topics":["cats-effect","frontend","functional-programming","scala","scalajs"],"latest_commit_sha":null,"homepage":"https://buntec.github.io/ff4s/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buntec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2022-01-04T13:28:26.000Z","updated_at":"2025-04-10T12:32:12.000Z","dependencies_parsed_at":"2023-02-18T17:15:58.413Z","dependency_job_id":"23d33931-93b7-4e62-9eab-a2b929858e74","html_url":"https://github.com/buntec/ff4s","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buntec%2Fff4s","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buntec%2Fff4s/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buntec%2Fff4s/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buntec%2Fff4s/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buntec","download_url":"https://codeload.github.com/buntec/ff4s/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248654095,"owners_count":21140236,"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":["cats-effect","frontend","functional-programming","scala","scalajs"],"created_at":"2024-10-03T12:34:06.287Z","updated_at":"2025-04-13T02:19:41.396Z","avatar_url":"https://github.com/buntec.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ff4s\n\n![Maven Central](https://img.shields.io/maven-central/v/io.github.buntec/ff4s_sjs1_2.13)\n\nCheck out the [microsite](https://buntec.github.io/ff4s/) and [Scaladocs](https://www.javadoc.io/doc/io.github.buntec/ff4s_sjs1_3/latest/index.html).\n\nSee the `examples` folder for commented code examples.\nTry them out by running `examples/fastLinkJS` in sbt and serving\nthe `index.html` using something like [Live Server](https://www.npmjs.com/package/live-server).\n\nFor good measure, there is an implementation of [todomvc](https://github.com/tastejs/todomvc)\nin the `todo-mvc` folder.\n\nArtifacts are published to Maven Central for Scala 2.13 and Scala 3.\n\n```scala\nlibraryDependencies += \"io.github.buntec\" %%% \"ff4s\" % \"0.24.0\"\n```\n\n## Companion libraries\n\n- [ff4s-canvas](https://github.com/buntec/ff4s-canvas)\n- [ff4s-shoelace](https://github.com/buntec/ff4s-shoelace)\n- [ff4s-heroicons](https://github.com/buntec/ff4s-heroicons)\n\n## (Breaking) changes\n\n### 0.24.0\n\n- The store constructor is simplified to `(Action, State) =\u003e (State, F[Unit])`.\n  To migrate replace all occurrences of `None` with `Applicative[F].unit` (see microsite and examples).\n\n### 0.23.0\n\n- Adds `withClass` extension method to the `V` type that allows overriding the `class` attribute of the underlying node.\n  This turns out to be useful for `literal`s, e.g., setting the class on an SVG icon.\n\n### 0.22.0\n\n- `Dsl[F, State, Action]` becomes `Dsl[State, Action]`. The `F` parameter was merely an implementation detail leaking out.\n- `ff4s.App` no longer has an implicit `Dsl` member. A better pattern for organizing components is to use a `Dsl[State, Action]` self-type (see the examples),\n  which obviates the need for passing a `Dsl` parameter to every component.\n\n### 0.21.0\n\n- Adds a debug mode for inspecting the state from the browser console.\n- Improves support for web components by adding a `WebComponent` base trait and a `Slot` modifier (see [ff4s-shoelace](https://github.com/buntec/ff4s-shoelace) for usage examples).\n\n### 0.20.0\n\n- Bug fix: map reflected attributes to attributes instead of props. Properties typically cannot be deleted so things like `id`, once set, couldn't be removed.\n\n### 0.18.0\n\n- Adds caching for `literal`s. This can significantly improve performance, e.g., when displaying a large number of SVG icon literals.\n\n## Debugging\n\nYou can query the state of your ff4s app in the Browser console by defining/declaring the\nfollowing global variables (e.g., by adding an inline script to your `index.html`):\n\n```javascript\nvar process = {\n  env: {\n    FF4S_DEBUG: \"TRUE\",\n  },\n};\nvar ff4s_state;\n```\n\nThe current state can then be retrieved from the `ff4s_state` variable. In particular,\nyou can call `ff4s_state.toString()` (and `toString` can be customized in your Scala code).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuntec%2Fff4s","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuntec%2Fff4s","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuntec%2Fff4s/lists"}