{"id":13708719,"url":"https://github.com/HumbleUI/HumbleUI","last_synced_at":"2025-05-06T15:31:04.256Z","repository":{"id":37433010,"uuid":"422717633","full_name":"HumbleUI/HumbleUI","owner":"HumbleUI","description":"Clojure Desktop UI framework","archived":false,"fork":false,"pushed_at":"2025-01-02T14:28:13.000Z","size":4245,"stargazers_count":1602,"open_issues_count":32,"forks_count":55,"subscribers_count":49,"default_branch":"main","last_synced_at":"2025-04-12T13:57:31.596Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HumbleUI.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":"2021-10-29T21:30:52.000Z","updated_at":"2025-04-11T10:43:30.000Z","dependencies_parsed_at":"2024-07-23T15:47:26.197Z","dependency_job_id":"a05e938f-5a53-43e3-ac54-60fa52c6157e","html_url":"https://github.com/HumbleUI/HumbleUI","commit_stats":{"total_commits":384,"total_committers":16,"mean_commits":24.0,"dds":0.09635416666666663,"last_synced_commit":"03f30f8e832899b35e807f2e02efcdedfab5401d"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FHumbleUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FHumbleUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FHumbleUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FHumbleUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HumbleUI","download_url":"https://codeload.github.com/HumbleUI/HumbleUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252712847,"owners_count":21792380,"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":[],"created_at":"2024-08-02T23:00:31.507Z","updated_at":"2025-05-06T15:31:04.249Z","avatar_url":"https://github.com/HumbleUI.png","language":"Clojure","funding_links":[],"categories":["Clojure"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./extras/logo.png\" height=\"400\"\u003e\n\u003c/p\u003e\n\n\u003e “When you design a new user interface, you have to start off humbly”\n\n_— Steve Jobs presenting Aqua_\n\nHumble UI is a desktop UI framework for Clojure. No Electron. No JavaScript. Only JVM and native code.\n\n## Goal\n\n- A way to build high-quality desktop UIs\n- Build better apps that’s possible with web now, while staying cross-platform\n- Build them faster in Clojure\n\n## Motivation\n\n- Create desktop apps in Clojure\n- Electron is a great landmark\n    - People prefer native apps to web apps\n        - Normal shortcuts, icon, its own window, file system access, notifications, OS integrations\n    - Developing real native apps is expensive\n    - JavaScript + Chrome have huge overhead, can be slow\n- Java has “UI curse”\n    - Previous attempts were cumbersome for user\n    - Mimicking native look and feel didn’t work\n    - Looked bad\n- Time of declarative UIs is now\n    - React\n    - Flutter\n    - SwiftUI\n    - Jetpack Compose\n- Web + Electron cleared the way for non-native look and feel\n    - Write once, run everywhere is no longer rejected by users\n    - Even native apps have many custom UI elements\n- Flutter proved new UI stack is a feasible task\n- Clojure is the best language for UI development\n    - Performant enough to not noticeably lag\n    - Access to full power of your computer (multithreaded)\n    - REPL + interactive development == instant feedback loop\n    - Proven itself great in CLJS world, can do the same on desktop\n\n## How is it going to be different\n\n- No goal to look native, aim for web look (write once, run everywhere)\n- Embrace platform differences in OS integration\n- Declarative UI API is much more pleasant to work with (+plays well with FP)\n- Expose low-level APIs along with high-level API\n    - People can solve non-trivial problems in their own way, without hacks\n- Superpowers of Clojure\n\n## Architecture\n\n- Leverage Skia via [Skija](https://github.com/HumbleUI/Skija) for high-performance GPU-accelerated graphics\n- [JWM](https://github.com/HumbleUI/JWM) (Java Window Manager) for OS integration (simple, common ground, embrace the differences)\n\n## Status\n\nWork in progress. No docs, and everything changes every day.\n\n## Resources\n\nSlack:\n\n- #humbleui on Clojurians Slack ([invite here](http://clojurians.net/))\n\nPosts:\n\n- [Thoughts on Clojure UI framework](https://tonsky.me/blog/clojure-ui/)\n- [Humble Chronicles: Decomposition](https://tonsky.me/blog/humble-decomposition/)\n- [Humble Chronicles: The Layout](https://tonsky.me/blog/humble-layout/)\n- [Humble Chronicles: Developer Experience](https://tonsky.me/blog/humble-dx/)\n\nVideos:\n\n- [Wordle in Clojure with Humble UI](https://www.youtube.com/watch?v=qSswvHrVnvo)\n\nSample apps:\n\n- [tonsky/humble-ants](https://github.com/tonsky/humble-ants)\n- [tonsky/humble-deck](https://github.com/tonsky/humble-deck)\n- [lilactown/humble-starter](https://github.com/lilactown/humble-starter)\n- [oakmac/humble-mondrian](https://github.com/oakmac/humble-mondrian)\n- [oakmac/humble-modal-example](https://github.com/oakmac/humble-modal-example)\n- [oakmac/humble-animations](https://github.com/oakmac/humble-animations)\n- [LuisThiamNye/humbleui-explorations](https://github.com/LuisThiamNye/humbleui-explorations)\n- [Folcon/FE-7drl-2022](https://github.com/Folcon/FE-7drl-2022)\n\n## Development\n\nRun REPL server:\n\n```\n./script/repl.py\n```\n\nTo reload demo app using `clj-reload`, evaluate:\n\n```\n(user/reload)\n```\n\n## Examples\n\n|![](extras/screenshot_button.png)|![](extras/screenshot_container.png)|\n|---|---|\n|![](extras/screenshot_calculator.png)|![](extras/screenshot_wordle.png)|\n\n```clj\n(require '[io.github.humbleui.ui :as ui])\n\n(ui/defcomp app []\n  [ui/center\n   [ui/label \"Hello, world\"]])\n  \n(defn -main [\u0026 args]\n  (ui/start-app!\n    (ui/window #'app)))\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHumbleUI%2FHumbleUI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHumbleUI%2FHumbleUI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHumbleUI%2FHumbleUI/lists"}