{"id":34694615,"url":"https://github.com/codebeige/circus","last_synced_at":"2026-05-28T14:31:42.042Z","repository":{"id":329184190,"uuid":"1096433098","full_name":"codebeige/circus","owner":"codebeige","description":"Functional UI in pure Clojure(Script).","archived":false,"fork":false,"pushed_at":"2026-01-10T12:45:07.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T03:56:40.371Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codebeige.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-14T12:20:49.000Z","updated_at":"2026-01-06T06:09:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/codebeige/circus","commit_stats":null,"previous_names":["codebeige/circus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codebeige/circus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebeige%2Fcircus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebeige%2Fcircus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebeige%2Fcircus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebeige%2Fcircus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codebeige","download_url":"https://codeload.github.com/codebeige/circus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebeige%2Fcircus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33613431,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-12-24T22:30:51.000Z","updated_at":"2026-05-28T14:31:42.024Z","avatar_url":"https://github.com/codebeige.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e ⚠️ This software project is in the earliest planning and exploration stage.\n\u003e\n\u003e The goal is to create a brain dump outlining my thoughts on flexible,\n\u003e scalable, and idiomatic patterns for web application development using\n\u003e ClojureScript and Clojure. I’m still exploring initial ideas and strategies,\n\u003e drawing partly from my previous work with the Moira library [^2]. Inspired by\n\u003e David Nolan’s Clojure Conj 2025 talk [^1], this project aims for a simpler, more\n\u003e functional mental model with minimal reliance on the JavaScript ecosystem\n\u003e (e.g., React).\n\n# 🎪 Circus\n\nFunctional UI in pure Clojure(Script).\n\n## Rationale\n\nThe React and JavaScript ecosystem is bloated and highly opinionated, imposing\nthe use of specific build tools and prescriptive development styles on\nprogrammers. This approach introduces hidden layers of complexity that create\nfriction when paired with Clojure’s expressive minimalism and REPL-driven\nworkflows. [^1]\n\nCircus is a minimalist and flexible framework for building user interfaces of\nany complexity. It provides developers with a solid foundation that aligns well\nwith the core principles and philosophy of Clojure and ClojureScript.\n\n## Architecture Ideas\n\n* 🎩 Event-driven architecture based on a unified application log [^2]\n* 🤡 Unidirectional data flow and shared rendering between client and server\n* 🦁 Data-driven system lifecycle management and dependency injection\n* 🐘 Local-first state management \u0026 synchronisation\n* 🤹🏻‍♂️ Embrace namespaces as basic unit of composition\n\n## Development\n\n### Prerequisites\n\n* [Clojure](https://clojure.org)\n* [Node.js](https://nodejs.org)\n* [Babashka](https://babashka.org)\n\n### Setup\n\n```sh\nbb dev:init\n```\n\n### Start\n\nFor Clojure development, simply start the nREPL server with:\n\n```sh\nbb dev\n```\n\nTo spawn a complete ClojureScript development environment, the following will\n\n* watch and compile an example project available at [localhost:9000](http://localhost:9000)\n* watch and compile the test runner available at [localhost:8000](http://localhost:8000)\n* watch and compile CSS\n\n```sh\nbb dev:cljs\n```\n\nSee [Shadow CLJS help](https://shadow-cljs.github.io/docs/UsersGuide.html#_editor_integration)\nfor details on how to select the respective ClojureScript build inside your\neditor of choice.\n\n```clj\n(shadow/select :dev)\n```\n\n### Test\n\nRun all tests once on Clojure with\n\n```sh\nbb test\n```\n\nTo watch and compile all tests for ClojureScript, start the test runner and\nopen it in a browser at[localhost:8000](http://localhost:8000).\n\n```sh\nbb test:cljs\n```\n\nThis can also be used for a more minimal ClojureScript development setup, where\nyou connect to the build of the ClojureScript test runner:\n\n```clj\n(shadow/select :test)\n```\n\n[^1]: [A ClojureScript Survival Kit](https://github.com/swannodette/conj-2025-talk)\n[^2]: [Moira](https://github.com/pitch-io/moira)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebeige%2Fcircus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodebeige%2Fcircus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebeige%2Fcircus/lists"}