{"id":13566527,"url":"https://github.com/outwatch/outwatch","last_synced_at":"2026-01-11T16:57:08.019Z","repository":{"id":12807354,"uuid":"72870054","full_name":"outwatch/outwatch","owner":"outwatch","description":"The Functional and Reactive Web-Frontend Library for Scala.js","archived":false,"fork":false,"pushed_at":"2024-12-04T10:10:09.000Z","size":2184,"stargazers_count":468,"open_issues_count":54,"forks_count":42,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-27T06:53:23.907Z","etag":null,"topics":["frp","functional-programming","reactive","rx","sbt","scala","scalajs","virtualdom"],"latest_commit_sha":null,"homepage":"http://outwatch.github.io","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/outwatch.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":"2016-11-04T17:26:16.000Z","updated_at":"2025-03-16T12:01:15.000Z","dependencies_parsed_at":"2023-01-14T12:30:17.926Z","dependency_job_id":"a905c8f9-4ea0-48e4-af8d-7205c564dbd8","html_url":"https://github.com/outwatch/outwatch","commit_stats":{"total_commits":874,"total_committers":29,"mean_commits":"30.137931034482758","dds":0.6052631578947368,"last_synced_commit":"6a562b52f2d6517e6a3e718763f3b67ed79110cd"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outwatch%2Foutwatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outwatch%2Foutwatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outwatch%2Foutwatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outwatch%2Foutwatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/outwatch","download_url":"https://codeload.github.com/outwatch/outwatch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247103306,"owners_count":20884023,"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":["frp","functional-programming","reactive","rx","sbt","scala","scalajs","virtualdom"],"created_at":"2024-08-01T13:02:11.345Z","updated_at":"2026-01-11T16:57:07.982Z","avatar_url":"https://github.com/outwatch.png","language":"Scala","funding_links":[],"categories":["Scala"],"sub_categories":[],"readme":"# Outwatch\nThe Functional and Reactive Web-Frontend Library for Scala.js\n\n[![Typelevel incubator](https://img.shields.io/badge/typelevel-incubator-F51C2B.svg)](http://typelevel.org)\n[![codecov](https://codecov.io/gh/outwatch/outwatch/branch/master/graph/badge.svg?token=TGCcxBnOHi)](https://codecov.io/gh/outwatch/outwatch)\n[![Discord](https://img.shields.io/discord/632277896739946517.svg?label=\u0026logo=discord\u0026logoColor=ffffff\u0026color=404244\u0026labelColor=6A7EC2)](https://discord.gg/9V8FZTVZ9R)\n[![outwatch Scala version support](https://index.scala-lang.org/outwatch/outwatch/outwatch/latest-by-scala-version.svg?platform=sjs1)](https://index.scala-lang.org/outwatch/outwatch/outwatch)\n\n\n```scala\nimport outwatch._\nimport outwatch.dsl._\nimport colibri._\nimport cats.effect.{IO, IOApp}\n\nobject Main extends IOApp.Simple {\n  override def run = {\n    val counter = Subject.behavior(0)\n    val myComponent = div(\n      button(\"+\", onClick(counter.map(_ + 1)) --\u003e counter),\n      counter,\n    )\n\n    Outwatch.renderReplace[IO](\"#app\", myComponent)\n  }\n}\n```\nIn Outwatch, you can describe your whole web application without doing any side effect - you only run your application when rendering it.\n\n* Write UI-components using pure functions\n* Manage state in a referentially transparent way using [cats-effect](https://github.com/typelevel/cats-effect)\n* Built-in lightweight `Observable` and `Subject` types from [colibri](http://github.com/cornerman/colibri)\n* Seamlessly works with existing reactive programming libraries: [ZIO](https://github.com/zio/zio), [fs2](https://github.com/typelevel/fs2), [Airstream](https://github.com/raquo/airstream), [scala.rx](https://github.com/lihaoyi/scala.rx)\n* Low-boilerplate, many convenient helper functions\n* Built on top of [snabbdom](https://github.com/snabbdom/snabbdom), a virtual dom library\n\nYou will find interactive examples and explanations in our [documentation](https://outwatch.github.io/docs/readme.html).\n\n## [Documentation](https://outwatch.github.io/docs/readme.html)\n\n## Bugs and Feedback\nFor bugs, questions and discussions please use [GitHub Issues](https://github.com/outwatch/outwatch/issues).\n\n\n## Community\nWe adopted the [Scala Code of Conduct](https://www.scala-lang.org/conduct/). People are expected to follow it when discussing Outwatch on the Github page, Gitter channel, or other venues.\n\n## LICENSE\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n\u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foutwatch%2Foutwatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foutwatch%2Foutwatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foutwatch%2Foutwatch/lists"}