{"id":13760399,"url":"https://github.com/clj-commons/seesaw","last_synced_at":"2025-12-12T01:30:20.960Z","repository":{"id":41065563,"uuid":"1505170","full_name":"clj-commons/seesaw","owner":"clj-commons","description":"Seesaw turns the Horror of Swing into a friendly, well-documented, Clojure library","archived":false,"fork":false,"pushed_at":"2023-07-28T19:55:45.000Z","size":2371,"stargazers_count":1478,"open_issues_count":72,"forks_count":147,"subscribers_count":56,"default_branch":"master","last_synced_at":"2024-10-29T17:54:40.572Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://groups.google.com/group/seesaw-clj","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/clj-commons.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-03-21T02:44:09.000Z","updated_at":"2024-10-29T06:59:23.000Z","dependencies_parsed_at":"2024-06-18T15:23:20.075Z","dependency_job_id":null,"html_url":"https://github.com/clj-commons/seesaw","commit_stats":null,"previous_names":["daveray/seesaw"],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-commons%2Fseesaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-commons%2Fseesaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-commons%2Fseesaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-commons%2Fseesaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clj-commons","download_url":"https://codeload.github.com/clj-commons/seesaw/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247866071,"owners_count":21009239,"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-03T13:01:09.516Z","updated_at":"2025-12-12T01:30:20.925Z","avatar_url":"https://github.com/clj-commons.png","language":"Clojure","funding_links":[],"categories":["Clojure","\u003ca name=\"Clojure\"\u003e\u003c/a\u003eClojure"],"sub_categories":[],"readme":"[![Build Status](https://secure.travis-ci.org/clj-commons/seesaw.png?branch=master)](http://travis-ci.org/clj-commons/seesaw)\n\nThere's now a [Google Group](https://groups.google.com/group/seesaw-clj) for discussion and questions.\n\n[Here's a brief tutorial](https://gist.github.com/1441520) that covers some Seesaw basics. It assumes no knowledge of Swing or Java.\n\n[Here's the slides](http://darevay.com/talks/clojurewest2012/) from a Clojure/West 2012 talk on the Seesaw. Best viewed in Chrome or Safari.\n\n# Seesaw: Clojure + UI\n\n_*See [the Seesaw Wiki](https://github.com/clj-commons/seesaw/wiki) and [the Seesaw API Docs](https://clj-commons.org/seesaw/) for more detailed docs. Note that the docs in the code (use the `doc` function!) are always the most up-to-date and trustworthy.*_\n\nSeesaw is a library/DSL for constructing user interfaces in Clojure. It happens to be built on Swing, but please don't hold that against it.\n\n## Features\n\nSeesaw is compatible with Clojure 1.4, but will probably work fine with 1.3 and 1.5. Maybe even 1.2.\n\n* Swing knowledge is *not required* for many apps!\n* [Construct widgets](https://github.com/clj-commons/seesaw/wiki/Widgets) with simple functions, e.g. `(listbox :model (range 100))`\n* Support for all of Swing's built-in widgets as well as SwingX.\n* Support for all of Swing's layout managers as well as MigLayout, and JGoodies Forms\n* Convenient shortcuts for most properties. For example, `:background :blue` or `:background \"#00f\"`, or `:size [640 :by 480]`.\n* [CSS-style selectors](https://github.com/clj-commons/seesaw/wiki/Selectors) with same syntax as [Enlive](https://github.com/cgrand/enlive).\n* Unified, extensible [event API](https://github.com/clj-commons/seesaw/wiki/Handling-events)\n* Unified, extensible [selection API](https://github.com/clj-commons/seesaw/wiki/Handling-selection)\n* [Widget binding](http://blog.darevay.com/2011/07/seesaw-widget-binding/), i.e. map changes from one widget into one or more others in a more functional style. Also integrates with Clojure's reference types.\n* [Graphics](https://github.com/clj-commons/seesaw/wiki/Graphics)\n* [i18n](https://github.com/clj-commons/seesaw/wiki/Resource-bundles-and-i18n)\n* An extensive [test suite](https://github.com/clj-commons/seesaw/tree/master/test/seesaw/test)\n\n_There are numerous Seesaw examples in [test/seesaw/test/examples](https://github.com/clj-commons/seesaw/tree/master/test/seesaw/test/examples)._\n\n## TL;DR\n\nHere's how you use Seesaw with [Leiningen](https://github.com/technomancy/leiningen)\n\nInstall `lein` as described and then:\n\n    $ lein new hello-seesaw\n    $ cd hello-seesaw\n\nAdd Seesaw to `project.clj`\n\n```clojure\n(defproject hello-seesaw \"1.0.0-SNAPSHOT\"\n  :description \"FIXME: write\"\n  :dependencies [[org.clojure/clojure \"1.4.0\"]\n                [seesaw \"x.y.z\"]])\n```\n\n_Replace the Seesaw version with whatever the latest version tag is. See below!_\n\nNow edit the generated `src/hello_seesaw/core.clj` file:\n\n```clojure\n(ns hello-seesaw.core\n  (:use seesaw.core))\n\n(defn -main [\u0026 args]\n  (invoke-later\n    (-\u003e (frame :title \"Hello\",\n           :content \"Hello, Seesaw\",\n           :on-close :exit)\n     pack!\n     show!)))\n```\n\nNow run it:\n\n    $ lein run -m hello-seesaw.core\n\n*NOTE:* Here's how you can run against the bleeding edge of Seesaw:\n\n* Clone Seesaw from github. Fork if you like. *Switch to the \"develop\" branch.*\n* In your Seesaw checkout, run `lein install` to build it. *Note that Seesaw uses Leiningen 2 as of 3 NOV 2012!*\n* In your project's `project.clj` file, change the Seesaw version to `X.Y.Z-SNAPSHOT` to match whatever's in Seesaw's `project.clj`.\n* Run `lein deps` ... actually you can just start coding. `lein deps` is almost never necessary.\n* Move along\n\n## Contributors\n\n* Meikel Brandmeyer (kotarak)\n* David Brunell (Quantalume)\n* Stuart Campbell (harto)\n* Michael Frericks\n* Jonathan Fischer Friberg (odyssomay)\n* Anthony Grimes (Raynes)\n* Thomas Karolski (MHOOO)\n* Chun-wei Kuo (Domon)\n* Vladimir Matveev (dpx-infinity)\n* Jeff Rose (rosejn)\n* Simon Lundmark (simlun)\n* Jake McCrary (jakemcc)\n\n## License\n\nCopyright (C) 2012 Dave Ray\n\nDistributed under the Eclipse Public License, the same as Clojure.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclj-commons%2Fseesaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclj-commons%2Fseesaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclj-commons%2Fseesaw/lists"}