{"id":13491403,"url":"https://github.com/Tensegritics/ClojureDart","last_synced_at":"2025-03-28T08:33:11.066Z","repository":{"id":37004435,"uuid":"332686695","full_name":"Tensegritics/ClojureDart","owner":"Tensegritics","description":"Clojure dialect for Flutter and Dart","archived":false,"fork":false,"pushed_at":"2025-03-21T16:57:39.000Z","size":8342,"stargazers_count":1487,"open_issues_count":107,"forks_count":99,"subscribers_count":63,"default_branch":"main","last_synced_at":"2025-03-21T17:46:50.410Z","etag":null,"topics":["clojure","dart","flutter","native","ui"],"latest_commit_sha":null,"homepage":"","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/Tensegritics.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["cgrand","dupuchba"]}},"created_at":"2021-01-25T09:00:10.000Z","updated_at":"2025-03-21T16:57:42.000Z","dependencies_parsed_at":"2023-10-03T18:27:12.169Z","dependency_job_id":"a6813f88-73fd-4230-b7de-7d7c8c1064fd","html_url":"https://github.com/Tensegritics/ClojureDart","commit_stats":{"total_commits":1586,"total_committers":34,"mean_commits":46.64705882352941,"dds":"0.44829760403530894","last_synced_commit":"4149decae18d7eecb3ada24974c0bfb2600d56d4"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tensegritics%2FClojureDart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tensegritics%2FClojureDart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tensegritics%2FClojureDart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tensegritics%2FClojureDart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tensegritics","download_url":"https://codeload.github.com/Tensegritics/ClojureDart/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245996636,"owners_count":20707281,"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":["clojure","dart","flutter","native","ui"],"created_at":"2024-07-31T19:00:56.732Z","updated_at":"2025-03-28T08:33:11.060Z","avatar_url":"https://github.com/Tensegritics.png","language":"Clojure","readme":"\u003cimg src=\"logo1024.png\" width=\"100%\"\u003e\n\n# What is ClojureDart?\nClojureDart is a recent Clojure dialect to make native mobile and desktop apps using Flutter and the Dart ecosystem.\n\nIt's production-ready: applications are being built with it.\n\n# Funding and Support\nClojureDart is developed by [Baptiste Dupuch](https://github.com/dupuchba)[🐦](https://twitter.com/BaptisteDupuch) and [Christophe Grand](https://github.com/cgrand)[🐦](https://twitter.com/cgrand) by taking time off of their consultancy -- it's grueling at times.\n\nHow can you help?\n\n* **Sponsor us** (individual sponsorship is nice but corporate sponshorship is great). You can sponsor any of us or both, it doesn't matter, we split ([:heart: Baptiste](https://github.com/sponsors/dupuchba)  [:heart: Christophe](https://github.com/sponsors/cgrand)).\n* **Contract us** for assistance, training, consulting or dev (can be as mundane as requesting to port a clj/cljs lib to cljd)\n\n# Cheatsheet\n\nWe have a [cheatsheet](doc/ClojureDart%20Cheatsheet.pdf) covering ClojureDart specifics on one side and Flutter programming on the other side.\n\n# Conj 2023 talk and demo\n\nWant to see what's the workflow like? Our talk at Clojure/Conj 2023 is mostly a live-coding session, starting from scratch and assuming no prior knowledge of Dart or Flutter! [Click here or on the image 👇](https://www.youtube.com/watch?v=wbUBb09bUnk)\n\n[\u003cimg src=\"https://i.ytimg.com/vi/wbUBb09bUnk/maxresdefault.jpg\" width=\"80%\"\u003e](https://www.youtube.com/watch?v=wbUBb09bUnk \"ClojureDart demo at Conj 2023\")\n\n# Where to find help?\nStop by the [Clojurians #ClojureDart channel](https://clojurians.slack.com/app_redirect?channel=clojuredart) or open an issue.\n\n# Completeness Status\nThe two missing big features are:\n- no REPL yet (WIP), but we have excellent hot-reload during UI work to get instant feedback\n- multi-method (WIP)\n\n# Links dump\n\n[Slack](https://clojurians.slack.com/app_redirect?channel=clojuredart)\n[YouTube](https://www.youtube.com/channel/UCCkvOkh6pXzYqkFKDgoyWRg)\n[Twitter](https://twitter.com/clojuredart)\n\nDon't forget to subscribe to [Curiosities -- our newsletter on ClojureDart and more](https://buttondown.email/tensegritics-curiosities)!\n\n# Your first app!\n\nPrerequisites: Clojure and Flutter installed and on your path.\n\nCreate a project directory with its `deps.edn`\n``` shell\nmkdir hello\ncd hello\ncat \u003c\u003c EOF \u003e deps.edn\n{:paths [\"src\"] ; where your cljd files are\n :deps {tensegritics/clojuredart\n        {:git/url \"https://github.com/tensegritics/ClojureDart.git\"\n         :sha \"3d132b2b147b8e9a5e77068af69d39f27f2414a6\"}}\n :aliases {:cljd {:main-opts [\"-m\" \"cljd.build\"]}}\n :cljd/opts {:kind :flutter\n             :main acme.main}}\nEOF\n```\n\n(To update an existing project to the latest ClojureDart, just do `clj -M:cljd upgrade`)\n\nInitialize project:\n\n``` shell\nclj -M:cljd init\n```\n\nAdd some source code:\n\n``` shell\nmkdir -p src/acme\ncat \u003c\u003c EOF \u003e src/acme/main.cljd\n(ns acme.main\n  (:require [\"package:flutter/material.dart\" :as m]\n            [cljd.flutter :as f]))\n\n(defn main []\n  (f/run\n    (m/MaterialApp\n      .title \"Welcome to Flutter\"\n      .theme (m/ThemeData .primarySwatch m.Colors/pink))\n    .home\n    (m/Scaffold\n      .appBar (m/AppBar\n                .title (m/Text \"Welcome to ClojureDart\")))\n    .body\n    m/Center\n    (m/Text \"Let's get coding!\"\n       .style (m/TextStyle\n                .color m.Colors/red\n                .fontSize 32.0))))\nEOF\n```\n\nCompile, watch and run:\n\n```\nclj -M:cljd flutter\n```\n\nIn most environments this will spawn a desktop app.\n\nMore details [there](doc/flutter-quick-start.md)\n\n# Quick starts\n\n- [For Flutter](doc/flutter-quick-start.md) to build GUIs\n- [For Plain Dart](doc/quick-start.md) to build CLI apps.\n\n# Examples\n\nIn the [samples directory](samples/), you'll find original sample code and ports of [Flutter recipes](https://docs.flutter.dev/cookbook).\n\n## How to run a sample project\n\nClone the ClojureDart repo.\n\n```shell\ngit clone https://github.com/Tensegritics/ClojureDart.git\n```\n\nGo to the sample you want to try, let's say `fab`:\n\n```shell\ncd ClojureDart/samples/fab\n```\n\nInit the project:\n\n```shell\nclj -M:cljd init\n```\n\nThen launch the watcher:\n```shell\nclj -M:cljd flutter\n```\n\nYou should get the sample running either in Chrome or as a desktop app.\n\nTo specify your exact target you must run `flutter devices` which outputs something like:\n\n```shell\n3 connected devices:\niPhone 6s (mobile) • D6707352-78D2-46BB-AB95-87355283FC82 • ios            •\ncom.apple.CoreSimulator.SimRuntime.iOS-15-5 (simulator)\nmacOS (desktop)    • macos                                • darwin-arm64   •\nmacOS 12.4 21F79 darwin-arm\nChrome (web)       • chrome                               • web-javascript •\nGoogle Chrome 103.0.5060.114\n```\n\nThe second column is the id of the target (here `D6707352-78D2-46BB-AB95-87355283FC82`, `macos` or `chrome`) that you pass to the watcher:\n\n```shell\nclj -M:cljd flutter -d D6707352-78D2-46BB-AB95-87355283FC82\n```\n\nEnjoy! 🧃\n\n# `cljd.flutter`\n`cljd.flutter` is an utility namespace to remove Flutter boilerplate and integrate more nicely with Clojure.\n\n# `cljd.flutter.alpha`\n\nDeprecated, use `cljd.flutter`.\n\n# `cljd.flutter.alpha2`\n\nGot out of alpha status and lives a happy life as `cljd.flutter`.\n\n# Thanks!\n\nTo all individuals who blindly believed in our endeavor and sponsored our work.\n\nTo NuBank who approached us very early for sponsorship.\n\nTo Roam Research who bet their mobile apps development (now in the App Store and Play Store) on ClojureDart and allowed us to make steady progress since Summer 2021.\n\nIf you want to sponsor our work, you can sponsor either of us, we'll balance sponsorship. If you are a company you can also contact us directly.\n","funding_links":["https://github.com/sponsors/cgrand","https://github.com/sponsors/dupuchba"],"categories":["Clojure","Languages"],"sub_categories":["Dart"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTensegritics%2FClojureDart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTensegritics%2FClojureDart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTensegritics%2FClojureDart/lists"}