{"id":13540704,"url":"https://github.com/ajnsit/concur","last_synced_at":"2026-02-21T17:04:37.261Z","repository":{"id":41063332,"uuid":"96962908","full_name":"ajnsit/concur","owner":"ajnsit","description":"An unusual Web UI Framework for Haskell","archived":false,"fork":false,"pushed_at":"2020-10-21T05:57:08.000Z","size":4132,"stargazers_count":305,"open_issues_count":11,"forks_count":20,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-12-07T21:37:46.860Z","etag":null,"topics":["concur","elm-architecture","frp","haskell","ui","user-interface","web"],"latest_commit_sha":null,"homepage":"https://ajnsit.github.io/concur/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ajnsit.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}},"created_at":"2017-07-12T03:50:16.000Z","updated_at":"2025-08-26T04:33:50.000Z","dependencies_parsed_at":"2022-09-01T11:30:54.026Z","dependency_job_id":null,"html_url":"https://github.com/ajnsit/concur","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ajnsit/concur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajnsit%2Fconcur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajnsit%2Fconcur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajnsit%2Fconcur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajnsit%2Fconcur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ajnsit","download_url":"https://codeload.github.com/ajnsit/concur/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajnsit%2Fconcur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29688218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T15:51:39.154Z","status":"ssl_error","status_checked_at":"2026-02-21T15:49:03.425Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["concur","elm-architecture","frp","haskell","ui","user-interface","web"],"created_at":"2024-08-01T10:00:29.472Z","updated_at":"2026-02-21T17:04:37.245Z","avatar_url":"https://github.com/ajnsit.png","language":"JavaScript","readme":"\u003ch1 align=\"center\"\u003e\n    Concur\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"docs/logo.png\" height=\"100\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://gitter.im/concurhaskell\" rel=\"nofollow\"\u003e\n      \u003cimg src=\"https://camo.githubusercontent.com/9fb4e2dde684214e7454d930a369f97190d1ecf2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6769747465722d6a6f696e253230636861742532302545322538362541332d626c75652e737667\" alt=\"Join the chat at https://gitter.im/concurhaskell\" data-canonical-src=\"https://img.shields.io/badge/gitter-join%20chat%20%E2%86%A3-blue.svg\" style=\"max-width:100%;\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://www.reddit.com/r/concurhaskell/\" rel=\"nofollow\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/reddit-join%20the%20discussion%20%E2%86%A3-1158c2.svg\" alt=\"Join the chat at https://gitter.im/concurhaskell\" style=\"max-width:100%;\"\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\nA brand new client side Web UI framework for Haskell that explores an entirely new paradigm. It does not follow FRP (think Reflex or Reactive Banana), or Elm architecture, but aims to combine the best parts of both.\n\n## Documentation\n\nWork in progress tutorials are published in the [Concur Documentation site](https://github.com/ajnsit/concur-documentation/blob/master/README.md)\n\n## Installation\n\nIt has three backends -\n\n1. [React](https://github.com/facebook/react) based, called [concur-react](concur-react). You can use the [Concur-React Quickstart Template](https://github.com/concurhaskell/concur-react-starter) to quickly get started.\n\n    An example of using Native React Widgets is here - [Drag Drop Sortable List Widget (React)](https://github.com/concurhaskell/concur-react-sortable-tree/blob/master/src/Main.hs) - [Demo](https://ajnsit.github.io/concur/examples/sortable-tree-example.jsexe/index.html) - Demonstrates Concur binding to [React-Sortable-Tree](https://github.com/fritz-c/react-sortable-tree).\n\n2. [Virtual-Dom](https://github.com/Matt-Esch/virtual-dom) based, called [concur-vdom](concur-vdom). (**Bitrotten**). You can use the [Concur-Vdom Quickstart Template](https://github.com/concurhaskell/concur-vdom-starter) to quickly get started.\n\n3. [Replica](https://github.com/pkamenarsky/replica) (i.e. remote virtual-dom) based, called [concur-replica](https://github.com/pkamenarsky/concur-replica). Created and maintained by [pkamenarsky](https://github.com/pkamenarsky). Head to its [project page](https://github.com/pkamenarsky/concur-replica) for more information.\n\n## Performance\n\nAccess some performance benchmarks here - https://ajnsit.github.io/concur-benchmarks/\n\n\n## Ports to other languages\n\nConcur's model translates well to other platforms.\n\n1. [Concur for Purescript](https://github.com/ajnsit/purescript-concur) - An official port to Purescript which is well maintained.\n2. [Concur for Javascript](https://github.com/ajnsit/concur-js) - An official but experimental port to Javascript.\n3. [Concur for Python](https://github.com/potocpav/python-concur) - An unofficial and experimental port to Python. Uses ImgUI for graphics. Created and Maintained by [potocpav](https://github.com/potocpav).\n\n## Examples\n\n1. [Click Counting Example](https://github.com/ajnsit/concur/blob/master/concur-vdom/examples/ClickCounter.hs) - [Demo](https://ajnsit.github.io/concur/examples/clickCounter.jsexe/index.html) - Count total number of clicks on the page, with a button that increments the click count by 10, and also autoincrement clicks every second.\n2. [TodoMVC Example](https://github.com/ajnsit/concur/blob/master/concur-vdom/examples/Todos.hs) - [Demo](https://ajnsit.github.io/concur/examples/todos.jsexe/index.html) - The canonical TodoMVC example, with views modeled after the one in Elm.\n3. [Mario Example](https://github.com/ajnsit/concur/blob/master/concur-vdom/examples/Mario.hs) - [Demo](https://ajnsit.github.io/concur/examples/mario.jsexe/index.html) - Port of the Mario example from Elm.\n4. [High/Low Game (Virtual-dom)](https://github.com/ajnsit/concur/blob/master/concur-vdom/examples/HiLo.hs) - [Demo](https://ajnsit.github.io/concur/examples/hilo.jsexe/index.html) - An extremely simple number guessing game in 15 lines of code.\n5. [High/Low Game (React)](https://github.com/ajnsit/concur/blob/master/concur-react/examples/HiLo.hs) - [Demo](https://ajnsit.github.io/concur/examples/concur-react-hilo.jsexe/index.html) - The same HiLo game, using the React backend.\n6. [Kirby Super Star Ultra Splits Timer GUI Challange](https://github.com/ajnsit/concur/blob/master/concur-vdom/examples/KirbySuperStarUltra.hs) - [Demo](https://ajnsit.github.io/concur/examples/kssu.jsexe/index.html) - Concur implementation of the [KSSU Splits Timer GUI Challenge](https://gist.github.com/lexi-lambda/701f1f1282401059f13a4220e8178ba4). Shows a moderately complex UI that's not a todolist!\n7. [Menu Widget (React)](https://github.com/ajnsit/concur/blob/master/concur-react/examples/Menu.hs) - [Demo](https://ajnsit.github.io/concur/examples/concur-react-menu.jsexe/index.html) - Builds a generic menu widget in 10 lines of code.\n8. [Drag Drop Sortable List Widget (React)](https://github.com/concurhaskell/concur-react-sortable-tree/blob/master/src/Main.hs) - [Demo](https://ajnsit.github.io/concur/examples/sortable-tree-example.jsexe/index.html) - Demonstrates Concur binding to [React-Sortable-Tree](https://github.com/fritz-c/react-sortable-tree). A good example of reusing existing React components in Concur.\n9. [Your first 8 Concur Pipes Widgets (React)](https://github.com/concurhaskell/concur-react-examples/blob/master/src/PipeWidgets.hs) - [Demo](https://concurhaskell.github.io/concur-react-examples/pipes.jsexe/index.html) - Your first 8 Concur Pipe programs! Inspired from the mighty Fudgets' - http://www.altocumulus.org/Fudgets/Intro/\n","funding_links":[],"categories":["JavaScript","Integrations","Awesome dashboards"],"sub_categories":["Free dashboards list for you to use in your projects"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajnsit%2Fconcur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajnsit%2Fconcur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajnsit%2Fconcur/lists"}