From 361a6679e83d1389f8fdf7a3e0ebb86b1a32b2ec Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 6 Jan 2021 01:59:12 +0100 Subject: [PATCH 01/41] added green-coder/minimallist, green-coder/vrac --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 73485cb..5a3714e 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [QikLiang/GraphQL-format.clj](https://github.com/QikLiang/GraphQL-format.clj): For building GraphQL queries and transforming the output data in a declaritive format in the style of [Meander](https://github.com/noprompt/meander). * [plumatic/schema](https://github.com/plumatic/schema): A Clojure(Script) library for declarative data description and validation. * [metosin/malli](https://github.com/metosin/malli): Data-driven Schemas for Clojure/Script. +* [green-coder/minimallist](https://github.com/green-coder/minimallist): A minimalist data driven data model library, inspired by Clojure Spec and Malli. * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. * [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. @@ -114,6 +115,12 @@ Miscellaneous * [agentbellnorm/dativity](https://github.com/agentbellnorm/dativity): Dativity is a stateless, data driven workflow engine library for Clojure and ClojureScript. * [clojure-lsp/clojure-lsp](https://github.com/clojure-lsp/clojure-lsp): A Language Server for Clojure. Taking a Cursive-like approach of statically analyzing code. +Work-in-progress +---------------- +Some projects are both actively developed and interesting enough to include on this list, but aren't quite ready yet. + +* [green-coder/vrac](https://github.com/green-coder/vrac): Declarative html template library from the future. + Articles/videos --------------- * [Growing a DSL with Clojure](http://clojure-doc.org/articles/tutorials/growing_a_dsl_with_clojure.html) From 43ee6a8e7265813ce6f2855ca5786caf97539de4 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:05:52 +0100 Subject: [PATCH 02/41] added lspector/Clojush --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5a3714e..1addda4 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Yet another pattern matching library for Clojure(Script). * [ctford/leipzig](https://github.com/ctford/leipzig): A music composition library for Clojure and Clojurescript. - [ctford/klangmeister](https://github.com/ctford/klangmeister): A musical scratchpad. Klangmeister uses Leipzig for all of its music composition. * [cerner/clara-rules](https://github.com/cerner/clara-rules): Clara is a forward-chaining rules engine written in Clojure(Script) with Java interoperability. +* [lspector/Clojush](https://github.com/lspector/Clojush): The Push programming language and the PushGP genetic programming system implemented in Clojure. ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. From 87917fe4e320b97d308d780cfc5ba86a8f134770 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:09:18 +0100 Subject: [PATCH 03/41] added zen-lang/zen --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1addda4..db24b84 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. * [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. +* [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. * **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. ### Data matching/transformation DSLs From 73f474a0275442c9a8b71dcee7411f48e85b4ddb Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:20:18 +0100 Subject: [PATCH 04/41] added adam-james-v/svg-clj --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index db24b84..f9faf27 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Yet another pattern matching library for Clojure(Script). - [ctford/klangmeister](https://github.com/ctford/klangmeister): A musical scratchpad. Klangmeister uses Leipzig for all of its music composition. * [cerner/clara-rules](https://github.com/cerner/clara-rules): Clara is a forward-chaining rules engine written in Clojure(Script) with Java interoperability. * [lspector/Clojush](https://github.com/lspector/Clojush): The Push programming language and the PushGP genetic programming system implemented in Clojure. +* [adam-james-v/svg-clj](https://github.com/adam-james-v/svg-clj): DSL for compiling SVG elements with Clojure(script). ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. From 9852773e810b99806ee73540764c3518ed504632 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:22:02 +0100 Subject: [PATCH 05/41] added frankiesardo/minikusari --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f9faf27..7bc7fd1 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [green-coder/minimallist](https://github.com/green-coder/minimallist): A minimalist data driven data model library, inspired by Clojure Spec and Malli. * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. * [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. +* [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike). * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. * **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. From 9383f96aa086222fec5b927625bdae20ede955af Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:27:36 +0100 Subject: [PATCH 06/41] added google/clojure-turtle --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7bc7fd1..3997c68 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ Yet another pattern matching library for Clojure(Script). * [cerner/clara-rules](https://github.com/cerner/clara-rules): Clara is a forward-chaining rules engine written in Clojure(Script) with Java interoperability. * [lspector/Clojush](https://github.com/lspector/Clojush): The Push programming language and the PushGP genetic programming system implemented in Clojure. * [adam-james-v/svg-clj](https://github.com/adam-james-v/svg-clj): DSL for compiling SVG elements with Clojure(script). +* [google/clojure-turtle](https://github.com/google/clojure-turtle): A Clojure library that implements the Logo programming language in a Clojure context. ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. From 7646e81351351ed7a401a6b5e7f0b53ef91d27a3 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 10:30:49 +0100 Subject: [PATCH 07/41] added oakes/odoyle-rum --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3997c68..5bfbcbe 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [green-coder/minimallist](https://github.com/green-coder/minimallist): A minimalist data driven data model library, inspired by Clojure Spec and Malli. * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. * [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. + - [oakes/odoyle-rum](https://github.com/oakes/odoyle-rum): What if we used a rules engine to manage all the state of a frontend UI? Can a rules engine replace reframe? * [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike). * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. From 4964329a7a0b0a32cd5cae1c4b07188b95efca53 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 13:36:07 +0100 Subject: [PATCH 08/41] added clyfe/clara-eav --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5bfbcbe..e196d0c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Yet another pattern matching library for Clojure(Script). * [ctford/leipzig](https://github.com/ctford/leipzig): A music composition library for Clojure and Clojurescript. - [ctford/klangmeister](https://github.com/ctford/klangmeister): A musical scratchpad. Klangmeister uses Leipzig for all of its music composition. * [cerner/clara-rules](https://github.com/cerner/clara-rules): Clara is a forward-chaining rules engine written in Clojure(Script) with Java interoperability. + - [clyfe/clara-eav](https://github.com/clyfe/clara-eav): ClaraEAV is a thin layer over Clara-Rules API that simplifies working with EAV triplets. * [lspector/Clojush](https://github.com/lspector/Clojush): The Push programming language and the PushGP genetic programming system implemented in Clojure. * [adam-james-v/svg-clj](https://github.com/adam-james-v/svg-clj): DSL for compiling SVG elements with Clojure(script). * [google/clojure-turtle](https://github.com/google/clojure-turtle): A Clojure library that implements the Logo programming language in a Clojure context. From b5f20bc92a117c24c7995db4a84e20c7b59d4f3e Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 13:47:16 +0100 Subject: [PATCH 09/41] added TristeFigure/derrida --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e196d0c..689d6bc 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve * [redplanetlabs/specter](https://github.com/redplanetlabs/specter): Specter rejects Clojure's restrictive approach to immutable data structure manipulation, instead exposing an elegant API to allow any sort of manipulation imaginable. * [xapix-io/matchete](https://github.com/xapix-io/matchete): Yet another pattern matching library for Clojure(Script). +* [TristeFigure/derrida](https://github.com/TristeFigure/derrida): Destructuring "Destructuring". ### Traditional Lisp DSLs * [clojure/core.logic](https://github.com/clojure/core.logic): Offers Prolog-like relational programming, constraint logic programming, and nominal logic programming for Clojure. From 53259f870538d8467333042cd60737daab703a01 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 13:50:16 +0100 Subject: [PATCH 10/41] added kwrooijen/gungnir --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 689d6bc..cbd995f 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [plumatic/schema](https://github.com/plumatic/schema): A Clojure(Script) library for declarative data description and validation. * [metosin/malli](https://github.com/metosin/malli): Data-driven Schemas for Clojure/Script. * [green-coder/minimallist](https://github.com/green-coder/minimallist): A minimalist data driven data model library, inspired by Clojure Spec and Malli. +* [kwrooijen/gungnir](https://github.com/kwrooijen/gungnir): A fully featured, data-driven database library for Clojure. * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. * [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. - [oakes/odoyle-rum](https://github.com/oakes/odoyle-rum): What if we used a rules engine to manage all the state of a frontend UI? Can a rules engine replace reframe? From fc58c629a6e7fa44672588cb3511cb901e2e00de Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Wed, 17 Mar 2021 14:02:31 +0100 Subject: [PATCH 11/41] added echeran/kalai --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cbd995f..1ea80c4 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ Not _technically_ DSLs, but included here to complete the parsing section. - See [oakes/html-soup]( https://github.com/oakes/html-soup) for an example of a library that uses parinferish as a parser. * [carocad/parcera](https://github.com/carocad/parcera): Grammar-based Clojure(script) parser. +* [echeran/kalai](https://github.com/echeran/kalai): A source-to-source transpiler to convert Clojure to multiple target languages (Rust, C++, Java, ...). Miscellaneous ------------- From 06ada93f696068529b7b5543605756d73628c37b Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 10 Jun 2021 17:44:01 +0200 Subject: [PATCH 12/41] added farrellm/scad-clj --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1ea80c4..d01e4d9 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Yet another pattern matching library for Clojure(Script). * [lspector/Clojush](https://github.com/lspector/Clojush): The Push programming language and the PushGP genetic programming system implemented in Clojure. * [adam-james-v/svg-clj](https://github.com/adam-james-v/svg-clj): DSL for compiling SVG elements with Clojure(script). * [google/clojure-turtle](https://github.com/google/clojure-turtle): A Clojure library that implements the Logo programming language in a Clojure context. +* [farrellm/scad-clj](https://github.com/farrellm/scad-clj): OpenSCAD DSL in Clojure. ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. From 681b28d453a51398972f32e4e4a8e9ee685be888 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Fri, 11 Jun 2021 08:33:51 +0200 Subject: [PATCH 13/41] added kiranshila/cybermonday --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d01e4d9..7fe5f61 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Parsing ### Artificial languages * [davidsantiago/hickory](https://github.com/davidsantiago/hickory): Hickory parses HTML into Clojure data structures, so you can analyze, transform, and output back to HTML. * [yogthos/markdown-clj](https://github.com/yogthos/markdown-clj): A markdown parser that compiles to both Clojure and ClojureScript. +* [kiranshila/cybermonday](https://github.com/kiranshila/cybermonday): Cybermonday provides a Clojure(Script) interface to working with markdown as a hiccup AST. * [bnbeckwith/orgmode](https://github.com/bnbeckwith/orgmode): A Clojure library designed to parse mode files into clojure data structures. * [russellwhitaker/uap-clj](https://github.com/russellwhitaker/uap-clj): A Clojure library for extracting browser, operating system, and device information from a raw useragent string. * [alumbra/alumbra.parser](https://github.com/alumbra/alumbra.parser): An ANTLR4-based GraphQL parser for Clojure. From 4bbba3789b4464e9d322c82b1a78eacfa71f500a Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 26 Aug 2021 08:01:39 +0200 Subject: [PATCH 14/41] added bsless/impedance --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7fe5f61..b12b232 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve * [redplanetlabs/specter](https://github.com/redplanetlabs/specter): Specter rejects Clojure's restrictive approach to immutable data structure manipulation, instead exposing an elegant API to allow any sort of manipulation imaginable. * [xapix-io/matchete](https://github.com/xapix-io/matchete): Yet another pattern matching library for Clojure(Script). +* [bsless/impedance](https://github.com/bsless/impedance): Fast, declarative Clojure map transforms to solve impedance mismatch. * [TristeFigure/derrida](https://github.com/TristeFigure/derrida): Destructuring "Destructuring". ### Traditional Lisp DSLs From 44a3f70127f64bb77045accc70887e375416935f Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 26 Aug 2021 08:04:14 +0200 Subject: [PATCH 15/41] added athos/JiSE --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b12b232..5ece5ee 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ Yet another pattern matching library for Clojure(Script). * [adam-james-v/svg-clj](https://github.com/adam-james-v/svg-clj): DSL for compiling SVG elements with Clojure(script). * [google/clojure-turtle](https://github.com/google/clojure-turtle): A Clojure library that implements the Logo programming language in a Clojure context. * [farrellm/scad-clj](https://github.com/farrellm/scad-clj): OpenSCAD DSL in Clojure. +* [athos/JiSE](https://github.com/athos/JiSE): JiSE is a Clojure DSL library that compiles a Java-like language into JVM bytecode at macroexpansion time. ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. From bdd6564bf9f32985473a91f72436b431c0c36093 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 26 Aug 2021 08:07:07 +0200 Subject: [PATCH 16/41] updated daveyarwood/alda-clj --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ece5ee..bde2b52 100644 --- a/README.md +++ b/README.md @@ -55,12 +55,11 @@ Yet another pattern matching library for Clojure(Script). * [google/clojure-turtle](https://github.com/google/clojure-turtle): A Clojure library that implements the Logo programming language in a Clojure context. * [farrellm/scad-clj](https://github.com/farrellm/scad-clj): OpenSCAD DSL in Clojure. * [athos/JiSE](https://github.com/athos/JiSE): JiSE is a Clojure DSL library that compiles a Java-like language into JVM bytecode at macroexpansion time. +* [daveyarwood/alda-clj](https://github.com/daveyarwood/alda-clj): A Clojure library for live-coding music with Alda. ### Text-based DSLs Some DSLs are implemented in Clojure, but compiled or interpreted from text. -* [alda-lang/alda](https://github.com/alda-lang/alda): Alda is a text-based programming language for music composition. - - [daveyarwood/alda-clj](https://github.com/daveyarwood/alda-clj): A Clojure library for live-coding music with Alda. * [borkdude/sci](https://github.com/borkdude/sci): Configurable Clojure interpreter suitable for scripting and Clojure DSLs. Data-oriented configuration From 204e1e4662e002a5fcbd0060cc60938913b47ccf Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 26 Aug 2021 08:10:01 +0200 Subject: [PATCH 17/41] added sbocq/cronit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bde2b52..ec4e3c9 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike). * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. +* [sbocq/cronit](https://github.com/sbocq/cronit): A Clojure library to iterate over time points defined by a cron like expression. * **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. ### Data matching/transformation DSLs From 82e1c5bc8eaa29ea50b3fb6dd9e5c44f7610fe7c Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 26 Aug 2021 08:15:07 +0200 Subject: [PATCH 18/41] added mauricioszabo/spock --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ec4e3c9..7fcefdb 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. * [sbocq/cronit](https://github.com/sbocq/cronit): A Clojure library to iterate over time points defined by a cron like expression. +* [mauricioszabo/spock](https://github.com/mauricioszabo/spock): Wrappers of SWI and TuProlog in Clojure. * **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. ### Data matching/transformation DSLs From f63c331d40f0bc56085c65417e19133fd49393be Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 18 Nov 2021 15:04:09 +0100 Subject: [PATCH 19/41] added stathissideris/dali --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7fcefdb..aebae20 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c ### Data-based DSLs * [weavejester/hiccup](https://github.com/weavejester/hiccup): Hiccup is a library for representing HTML in Clojure. * [noprompt/garden](https://github.com/noprompt/garden): Garden is a library for rendering CSS in Clojure and ClojureScript. +* [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. * [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame From 0024c7ee591adb169f69e9fe0b5e777deaabb2d2 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 18 Nov 2021 15:06:18 +0100 Subject: [PATCH 20/41] added AbhinavOmprakash/luna --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index aebae20..3681816 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. * [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame * [lambdaisland/regal](https://github.com/lambdaisland/regal): Regal lets you manipulate regular expressions as data. +* [AbhinavOmprakash/luna](https://github.com/AbhinavOmprakash/luna): Wield the power of regex with the readability of English. * [riverford/datagrep](https://github.com/riverford/datagrep): grep for data, for quick and dirty filtering at the repl. * [QikLiang/GraphQL-format.clj](https://github.com/QikLiang/GraphQL-format.clj): For building GraphQL queries and transforming the output data in a declaritive format in the style of [Meander](https://github.com/noprompt/meander). * [plumatic/schema](https://github.com/plumatic/schema): A Clojure(Script) library for declarative data description and validation. From 759dcb9d00f2ccbf33e1a789f24d7aa421279665 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 18 Nov 2021 15:12:28 +0100 Subject: [PATCH 21/41] added lambdaisland/hiccup --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3681816..3dfc319 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c ### Data-based DSLs * [weavejester/hiccup](https://github.com/weavejester/hiccup): Hiccup is a library for representing HTML in Clojure. + - [lambdaisland/hiccup](https://github.com/lambdaisland/hiccup): Enlive-backed Hiccup implementation; behaves closer to how Hiccup works in Reagent. * [noprompt/garden](https://github.com/noprompt/garden): Garden is a library for rendering CSS in Clojure and ClojureScript. * [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. From 259abf4884c3f7188b4c93b8190710a1476241eb Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 18 Nov 2021 15:18:37 +0100 Subject: [PATCH 22/41] added BrianChevalier/radiant --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3dfc319..5c3d413 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [weavejester/hiccup](https://github.com/weavejester/hiccup): Hiccup is a library for representing HTML in Clojure. - [lambdaisland/hiccup](https://github.com/lambdaisland/hiccup): Enlive-backed Hiccup implementation; behaves closer to how Hiccup works in Reagent. * [noprompt/garden](https://github.com/noprompt/garden): Garden is a library for rendering CSS in Clojure and ClojureScript. +* [BrianChevalier/radiant](https://github.com/BrianChevalier/radiant): Write full featured CSS as Clojure data structures, inline. * [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. From e6482cec15d1b5165e8df083aa142b2b6147aea5 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 19:56:02 +0200 Subject: [PATCH 23/41] added escherize/tracks --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5c3d413..2e5d426 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve * [juji-io/editscript](https://github.com/juji-io/editscript): A library designed to diff and patch Clojure data structures. * [disalvjn/faconne](https://github.com/disalvjn/faconne): Data Restructuring DSL. * [HealthSamurai/ironhide](https://github.com/HealthSamurai/ironhide): A runtime agnostic bidirectional data-driven transformation domain-specific language for fun and profit. +* [escherize/tracks](https://github.com/escherize/tracks): Allows the user to create transformations declaratively. * [redplanetlabs/specter](https://github.com/redplanetlabs/specter): Specter rejects Clojure's restrictive approach to immutable data structure manipulation, instead exposing an elegant API to allow any sort of manipulation imaginable. * [xapix-io/matchete](https://github.com/xapix-io/matchete): Yet another pattern matching library for Clojure(Script). From 3c22065a41338aae49c986b0c7d973d5b1d376a3 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 20:15:32 +0200 Subject: [PATCH 24/41] added askonomm/clarktown --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2e5d426..b76bb70 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ Parsing ### Artificial languages * [davidsantiago/hickory](https://github.com/davidsantiago/hickory): Hickory parses HTML into Clojure data structures, so you can analyze, transform, and output back to HTML. * [yogthos/markdown-clj](https://github.com/yogthos/markdown-clj): A markdown parser that compiles to both Clojure and ClojureScript. +* [askonomm/clarktown](https://github.com/askonomm/clarktown): A zero-dependency Markdown parser. * [kiranshila/cybermonday](https://github.com/kiranshila/cybermonday): Cybermonday provides a Clojure(Script) interface to working with markdown as a hiccup AST. * [bnbeckwith/orgmode](https://github.com/bnbeckwith/orgmode): A Clojure library designed to parse mode files into clojure data structures. * [russellwhitaker/uap-clj](https://github.com/russellwhitaker/uap-clj): A Clojure library for extracting browser, operating system, and device information from a raw useragent string. From b2fc787f821b56725db5545606da8d4bdd5f5696 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 20:20:25 +0200 Subject: [PATCH 25/41] added green-coder/html-to-hiccup, removed vrac --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index b76bb70..785275a 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ Parsing ### Artificial languages * [davidsantiago/hickory](https://github.com/davidsantiago/hickory): Hickory parses HTML into Clojure data structures, so you can analyze, transform, and output back to HTML. +* [green-coder/html-to-hiccup](https://github.com/green-coder/html-to-hiccup): An html->hiccup conversion function in pure CLJC. * [yogthos/markdown-clj](https://github.com/yogthos/markdown-clj): A markdown parser that compiles to both Clojure and ClojureScript. * [askonomm/clarktown](https://github.com/askonomm/clarktown): A zero-dependency Markdown parser. * [kiranshila/cybermonday](https://github.com/kiranshila/cybermonday): Cybermonday provides a Clojure(Script) interface to working with markdown as a hiccup AST. @@ -136,12 +137,6 @@ Miscellaneous * [agentbellnorm/dativity](https://github.com/agentbellnorm/dativity): Dativity is a stateless, data driven workflow engine library for Clojure and ClojureScript. * [clojure-lsp/clojure-lsp](https://github.com/clojure-lsp/clojure-lsp): A Language Server for Clojure. Taking a Cursive-like approach of statically analyzing code. -Work-in-progress ----------------- -Some projects are both actively developed and interesting enough to include on this list, but aren't quite ready yet. - -* [green-coder/vrac](https://github.com/green-coder/vrac): Declarative html template library from the future. - Articles/videos --------------- * [Growing a DSL with Clojure](http://clojure-doc.org/articles/tutorials/growing_a_dsl_with_clojure.html) From 5d46c81f3e70b9bda63193a95465d9fb3185ffd4 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 20:30:09 +0200 Subject: [PATCH 26/41] added gga/json-path --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 785275a..51476f7 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve Yet another pattern matching library for Clojure(Script). * [bsless/impedance](https://github.com/bsless/impedance): Fast, declarative Clojure map transforms to solve impedance mismatch. * [TristeFigure/derrida](https://github.com/TristeFigure/derrida): Destructuring "Destructuring". +* [gga/json-path](https://github.com/gga/json-path): An implementation of the JsonPath spec for Clojure. ### Traditional Lisp DSLs * [clojure/core.logic](https://github.com/clojure/core.logic): Offers Prolog-like relational programming, constraint logic programming, and nominal logic programming for Clojure. From 2682cd2462f6e83706418015bc3a5d4e1d8eafa9 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 21:15:26 +0200 Subject: [PATCH 27/41] added yetanalytics/flint --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 51476f7..f3e1e3d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. +* [yetanalytics/flint](https://github.com/yetanalytics/flint): A Clojure(Script) DSL for creating SPARQL query and update strings. * [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame * [lambdaisland/regal](https://github.com/lambdaisland/regal): Regal lets you manipulate regular expressions as data. * [AbhinavOmprakash/luna](https://github.com/AbhinavOmprakash/luna): Wield the power of regex with the readability of English. From 4474d0e7b54ecc3e482a65174627d196feb4faec Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 21:23:56 +0200 Subject: [PATCH 28/41] added clj-holmes/shape-shifter + moved others --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f3e1e3d..8d87b93 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ Most of these could also be considered data-based DSLs, but I think they deserve Yet another pattern matching library for Clojure(Script). * [bsless/impedance](https://github.com/bsless/impedance): Fast, declarative Clojure map transforms to solve impedance mismatch. * [TristeFigure/derrida](https://github.com/TristeFigure/derrida): Destructuring "Destructuring". -* [gga/json-path](https://github.com/gga/json-path): An implementation of the JsonPath spec for Clojure. ### Traditional Lisp DSLs * [clojure/core.logic](https://github.com/clojure/core.logic): Offers Prolog-like relational programming, constraint logic programming, and nominal logic programming for Clojure. @@ -67,9 +66,10 @@ Yet another pattern matching library for Clojure(Script). * [daveyarwood/alda-clj](https://github.com/daveyarwood/alda-clj): A Clojure library for live-coding music with Alda. ### Text-based DSLs -Some DSLs are implemented in Clojure, but compiled or interpreted from text. +Some DSLs are based on text, but work on Clojure data. -* [borkdude/sci](https://github.com/borkdude/sci): Configurable Clojure interpreter suitable for scripting and Clojure DSLs. +* [clj-holmes/shape-shifter](https://github.com/clj-holmes/shape-shifter): Transforms a string pattern into clojure spec. +* [gga/json-path](https://github.com/gga/json-path): An implementation of the JsonPath spec for Clojure. Data-oriented configuration --------------------------- @@ -119,6 +119,7 @@ Not _technically_ DSLs, but included here to complete the parsing section. * [ekoontz/menard](https://github.com/ekoontz/menard): A Clojure library for generation and parsing expressions from grammars and lexicons. ### Clojure code +* [borkdude/sci](https://github.com/borkdude/sci): Configurable Clojure interpreter suitable for scripting and Clojure DSLs. * [clojure/tools.reader](https://github.com/clojure/tools.reader): A complete Clojure reader and an EDN-only reader. * [clojure/tools.analyzer](https://github.com/clojure/tools.analyzer): An analyzer for host agnostic Clojure code, written in Clojure and producing AST in EDN. * [borkdude/edamame](https://github.com/borkdude/edamame): Configurable EDN/Clojure parser with location metadata. From f4ddbf56fb84d8e6c58366a4f97a9bd56c8828df Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 21:26:55 +0200 Subject: [PATCH 29/41] added erdos/uclj --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8d87b93..a63b1ab 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ Not _technically_ DSLs, but included here to complete the parsing section. ### Clojure code * [borkdude/sci](https://github.com/borkdude/sci): Configurable Clojure interpreter suitable for scripting and Clojure DSLs. +* [erdos/uclj](https://github.com/erdos/uclj): A small, quick-starting, native Clojure interpreter. * [clojure/tools.reader](https://github.com/clojure/tools.reader): A complete Clojure reader and an EDN-only reader. * [clojure/tools.analyzer](https://github.com/clojure/tools.analyzer): An analyzer for host agnostic Clojure code, written in Clojure and producing AST in EDN. * [borkdude/edamame](https://github.com/borkdude/edamame): Configurable EDN/Clojure parser with location metadata. From 29cdc40ccc58172d6ba32033b52d182e7684d98d Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 21:34:45 +0200 Subject: [PATCH 30/41] added latte-central/LaTTe --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a63b1ab..f56e5e3 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Yet another pattern matching library for Clojure(Script). * [farrellm/scad-clj](https://github.com/farrellm/scad-clj): OpenSCAD DSL in Clojure. * [athos/JiSE](https://github.com/athos/JiSE): JiSE is a Clojure DSL library that compiles a Java-like language into JVM bytecode at macroexpansion time. * [daveyarwood/alda-clj](https://github.com/daveyarwood/alda-clj): A Clojure library for live-coding music with Alda. +* [latte-central/LaTTe](https://github.com/latte-central/LaTTe): LaTTe is a proof assistant library based on type theory. ### Text-based DSLs Some DSLs are based on text, but work on Clojure data. From ca8f46cbf5ff20f10f2c9b6dc950e2adb8e78359 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 21:39:06 +0200 Subject: [PATCH 31/41] added lambdaforge/datalog-parser --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f56e5e3..7eb05be 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ Parsing * [zsau/id3](https://github.com/zsau/id3): A simple ID3v2 parser, written in Clojure. * [l3nz/cli-matic](https://github.com/l3nz/cli-matic): Compact, hands-free [sub]command line parsing library for Clojure. * [smee/binary](https://github.com/smee/binary): This library is a high performance binary parser combinator. +* [lambdaforge/datalog-parser](https://github.com/lambdaforge/datalog-parser): This parser is used by Datahike and follows the Datalog dialect of Datomic. ### Natural languages Not _technically_ DSLs, but included here to complete the parsing section. From 8c9e55a80d2ab98b68fa47dd633c32056871eee8 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 22:20:46 +0200 Subject: [PATCH 32/41] added thlack/surfs --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7eb05be..e2ccbe5 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. * [yetanalytics/flint](https://github.com/yetanalytics/flint): A Clojure(Script) DSL for creating SPARQL query and update strings. -* [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame +* [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame. +* [thlack/surfs](https://github.com/thlack/surfs): Surfs renders Slack blocks, elements, and composition objects from vectors. * [lambdaisland/regal](https://github.com/lambdaisland/regal): Regal lets you manipulate regular expressions as data. * [AbhinavOmprakash/luna](https://github.com/AbhinavOmprakash/luna): Wield the power of regex with the readability of English. * [riverford/datagrep](https://github.com/riverford/datagrep): grep for data, for quick and dirty filtering at the repl. From d8713202bd2798c4efcf83ea65e1d127b3de69e7 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 23 May 2022 22:32:32 +0200 Subject: [PATCH 33/41] added wotbrew/relic --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e2ccbe5..eef40c2 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. * [yetanalytics/flint](https://github.com/yetanalytics/flint): A Clojure(Script) DSL for creating SPARQL query and update strings. +* [wotbrew/relic](https://github.com/wotbrew/relic): Functional relational programming for Clojure(Script). * [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame. * [thlack/surfs](https://github.com/thlack/surfs): Surfs renders Slack blocks, elements, and composition objects from vectors. * [lambdaisland/regal](https://github.com/lambdaisland/regal): Regal lets you manipulate regular expressions as data. From 2ea5e00466aa6eacbce68563791e456f97c18745 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Tue, 24 May 2022 14:13:00 +0200 Subject: [PATCH 34/41] fix link to #parsers --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eef40c2..50bdf55 100644 --- a/README.md +++ b/README.md @@ -158,4 +158,4 @@ Articles/videos Community --------- * [Clojurians Slack](https://clojurians.slack.com/messages): Where Clojure's most active users seem to hang out. - - [#parsers](https://clojurians.slack.com/archives/C01BMKFSL14) + - [#parsers](https://clojurians.slack.com/archives/CEJ641W0P) From d7418ecdcb37a4bfddb99583f466f6ca789a0eaf Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 16 Jun 2022 09:24:29 +0200 Subject: [PATCH 35/41] added clojurewerkz/balagan --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 50bdf55..cda75c5 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve * [disalvjn/faconne](https://github.com/disalvjn/faconne): Data Restructuring DSL. * [HealthSamurai/ironhide](https://github.com/HealthSamurai/ironhide): A runtime agnostic bidirectional data-driven transformation domain-specific language for fun and profit. * [escherize/tracks](https://github.com/escherize/tracks): Allows the user to create transformations declaratively. +* [clojurewerkz/balagan](https://github.com/clojurewerkz/balagan): A tiny library for data structure transformation inspired by [Enlive](https://github.com/cgrand/enlive). * [redplanetlabs/specter](https://github.com/redplanetlabs/specter): Specter rejects Clojure's restrictive approach to immutable data structure manipulation, instead exposing an elegant API to allow any sort of manipulation imaginable. * [xapix-io/matchete](https://github.com/xapix-io/matchete): Yet another pattern matching library for Clojure(Script). From 439cde9d661cb050ad0b48b8a4baef6673e23077 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Thu, 16 Jun 2022 20:52:38 +0200 Subject: [PATCH 36/41] added esuomi/muotti --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cda75c5..8a8bee3 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Most of these could also be considered data-based DSLs, but I think they deserve Yet another pattern matching library for Clojure(Script). * [bsless/impedance](https://github.com/bsless/impedance): Fast, declarative Clojure map transforms to solve impedance mismatch. * [TristeFigure/derrida](https://github.com/TristeFigure/derrida): Destructuring "Destructuring". +* [esuomi/muotti](https://github.com/esuomi/muotti): A graph-based value transformer library. ### Traditional Lisp DSLs * [clojure/core.logic](https://github.com/clojure/core.logic): Offers Prolog-like relational programming, constraint logic programming, and nominal logic programming for Clojure. From 3585d1d9437865570ceafe5251a561c2f65f830b Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 13 May 2024 11:25:19 +0200 Subject: [PATCH 37/41] added tatut/clj-prolog --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8a8bee3..d0e5c25 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Lisp dialects traditionally make heavy use of macros to rewrite source code at c * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. * [sbocq/cronit](https://github.com/sbocq/cronit): A Clojure library to iterate over time points defined by a cron like expression. * [mauricioszabo/spock](https://github.com/mauricioszabo/spock): Wrappers of SWI and TuProlog in Clojure. +* [tatut/clj-prolog](https://github.com/tatut/clj-prolog): Use Prolog from Clojure via Projog. * **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. ### Data matching/transformation DSLs From b8093a6fed433d422e28fb28878942daca440134 Mon Sep 17 00:00:00 2001 From: Simon Gray Date: Mon, 13 May 2024 11:39:31 +0200 Subject: [PATCH 38/41] Split data-based DSLs section into multiple categories --- README.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d0e5c25..26a1f66 100644 --- a/README.md +++ b/README.md @@ -6,38 +6,48 @@ This is a curated list of mostly mature and/or actively developed Clojure resour Domain-specific languages ------------------------- -Lisp dialects traditionally make heavy use of macros to rewrite source code at compile time, opening the DSL floodgates. Somewhat unique to Clojure is a strong emphasis on using the core data literals to form DSLs. In either case, a supposed DSL could just as easily be considered a creative use of existing language features or a particularly well-designed API. ### Data-based DSLs +Lisp dialects traditionally make heavy use of macros to rewrite source code at compile time, opening the DSL floodgates. Somewhat unique to Clojure is a strong emphasis on using the core data literals to form DSLs. In either case, a supposed DSL could just as easily be considered a creative use of existing language features or a particularly well-designed API. + +#### Web development * [weavejester/hiccup](https://github.com/weavejester/hiccup): Hiccup is a library for representing HTML in Clojure. - [lambdaisland/hiccup](https://github.com/lambdaisland/hiccup): Enlive-backed Hiccup implementation; behaves closer to how Hiccup works in Reagent. * [noprompt/garden](https://github.com/noprompt/garden): Garden is a library for rendering CSS in Clojure and ClojureScript. * [BrianChevalier/radiant](https://github.com/BrianChevalier/radiant): Write full featured CSS as Clojure data structures, inline. -* [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. * [cgrand/enlive](https://github.com/cgrand/enlive): A selector-based (à la CSS) templating and transformation system for Clojure. +* [stathissideris/dali](https://github.com/stathissideris/dali): Build SVG graphics using a Hiccup-like DSL. + +#### Data schemas +* [plumatic/schema](https://github.com/plumatic/schema): A Clojure(Script) library for declarative data description and validation. +* [metosin/malli](https://github.com/metosin/malli): Data-driven Schemas for Clojure/Script. + +#### Database access * [seancorfield/honeysql](https://github.com/seancorfield/honeysql): SQL as Clojure data structures. * [yetanalytics/flint](https://github.com/yetanalytics/flint): A Clojure(Script) DSL for creating SPARQL query and update strings. * [wotbrew/relic](https://github.com/wotbrew/relic): Functional relational programming for Clojure(Script). +* [QikLiang/GraphQL-format.clj](https://github.com/QikLiang/GraphQL-format.clj): For building GraphQL queries and transforming the output data in a declaritive format in the style of [Meander](https://github.com/noprompt/meander). +* [kwrooijen/gungnir](https://github.com/kwrooijen/gungnir): A fully featured, data-driven database library for Clojure. + +#### Logic/rules +* [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. + - [oakes/odoyle-rum](https://github.com/oakes/odoyle-rum): What if we used a rules engine to manage all the state of a frontend UI? Can a rules engine replace reframe? +* [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike). +* [mauricioszabo/spock](https://github.com/mauricioszabo/spock): Wrappers of SWI and TuProlog in Clojure. +* [tatut/clj-prolog](https://github.com/tatut/clj-prolog): Use Prolog from Clojure via Projog. +* **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. + +#### Other data-based DSLs * [cljfx/cljfx](https://github.com/cljfx/cljfx): Declarative, functional, extensible wrapper of JavaFX inspired by the better parts of react and re-frame. * [thlack/surfs](https://github.com/thlack/surfs): Surfs renders Slack blocks, elements, and composition objects from vectors. * [lambdaisland/regal](https://github.com/lambdaisland/regal): Regal lets you manipulate regular expressions as data. * [AbhinavOmprakash/luna](https://github.com/AbhinavOmprakash/luna): Wield the power of regex with the readability of English. * [riverford/datagrep](https://github.com/riverford/datagrep): grep for data, for quick and dirty filtering at the repl. -* [QikLiang/GraphQL-format.clj](https://github.com/QikLiang/GraphQL-format.clj): For building GraphQL queries and transforming the output data in a declaritive format in the style of [Meander](https://github.com/noprompt/meander). -* [plumatic/schema](https://github.com/plumatic/schema): A Clojure(Script) library for declarative data description and validation. -* [metosin/malli](https://github.com/metosin/malli): Data-driven Schemas for Clojure/Script. * [green-coder/minimallist](https://github.com/green-coder/minimallist): A minimalist data driven data model library, inspired by Clojure Spec and Malli. -* [kwrooijen/gungnir](https://github.com/kwrooijen/gungnir): A fully featured, data-driven database library for Clojure. * [oakes/edna](https://github.com/oakes/edna): A Clojure library for making music with edn data. -* [oakes/odoyle-rules](https://github.com/oakes/odoyle-rules): A rules engine for Clojure and ClojureScript. - - [oakes/odoyle-rum](https://github.com/oakes/odoyle-rum): What if we used a rules engine to manage all the state of a frontend UI? Can a rules engine replace reframe? -* [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike). * [yonatane/bytegeist](https://github.com/yonatane/bytegeist): Define binary encoding using plain data. * [zen-lang/zen](https://github.com/zen-lang/zen): Zen is a framework to unify Data DSLs, make them composable and take model driven design to the next level. * [sbocq/cronit](https://github.com/sbocq/cronit): A Clojure library to iterate over time points defined by a cron like expression. -* [mauricioszabo/spock](https://github.com/mauricioszabo/spock): Wrappers of SWI and TuProlog in Clojure. -* [tatut/clj-prolog](https://github.com/tatut/clj-prolog): Use Prolog from Clojure via Projog. -* **datalog**: See the relevant section in [simongray/clojure-graph-resources](https://github.com/simongray/clojure-graph-resources#datalog) for a list of libraries. ### Data matching/transformation DSLs Most of these could also be considered data-based DSLs, but I think they deserve a category of their own. @@ -56,6 +66,8 @@ Yet another pattern matching library for Clojure(Script). * [esuomi/muotti](https://github.com/esuomi/muotti): A graph-based value transformer library. ### Traditional Lisp DSLs +Macro-heavy code that transforms your programming language. + * [clojure/core.logic](https://github.com/clojure/core.logic): Offers Prolog-like relational programming, constraint logic programming, and nominal logic programming for Clojure. * [quil/quil](https://github.com/quil/quil): Clojure/ClojureScript library for creating interactive drawings and animations. * [overtone/overtone](https://github.com/overtone/overtone): Overtone is an Open Source toolkit for designing synthesizers and collaborating with music. From 33a50f19077d79dfa494729d7846b22e70567dc9 Mon Sep 17 00:00:00 2001 From: Tripp Lilley Date: Sun, 28 Jul 2024 18:00:40 +0800 Subject: [PATCH 39/41] Replace dead gist link with archive.org link The article "Constructing Clojure private DSLs on top of functions and function combinators." is no longer available as a GitHub gist, as the author has apparently deleted their GitHub account. The article _was_ captured by archive.org, though, here: https://web.archive.org/web/20221001144803/https://gist.github.com/TristeFigure/20dd01b0d3415f34075cfc02a1918106 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26a1f66..f1a0d9b 100644 --- a/README.md +++ b/README.md @@ -168,7 +168,7 @@ Articles/videos * [The Art of Tree Shaping with Clojure Zippers](https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip) * [Building trees with and without zippers](https://vincent.404.taipei/clojure/building-trees-with-and-without-zippers/) * [Writing Parser Combinator Library in Clojure](http://troydm.github.io/blog/2016/04/11/writing-parser-combinator-library-in-clojure/) -* [Constructing Clojure private DSLs on top of functions and function combinators](https://gist.github.com/TristeFigure/20dd01b0d3415f34075cfc02a1918106) +* [Constructing Clojure private DSLs on top of functions and function combinators](https://web.archive.org/web/20221001144803/https://gist.github.com/TristeFigure/20dd01b0d3415f34075cfc02a1918106) Community --------- From 930d88e8763aadb5ff3c836462bb207926efd6fa Mon Sep 17 00:00:00 2001 From: Tripp Lilley Date: Sun, 28 Jul 2024 18:04:16 +0800 Subject: [PATCH 40/41] Update link to clojure-doc.org article Some reorg at clojure-doc.org moved the article "Parsing XML in Clojure", so this fixes the link. I've double-checked that it's the same content by looking at archive.org. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26a1f66..5e0f804 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ Miscellaneous Articles/videos --------------- * [Growing a DSL with Clojure](http://clojure-doc.org/articles/tutorials/growing_a_dsl_with_clojure.html) -* [Parsing XML in Clojure](http://clojure-doc.org/articles/tutorials/parsing_xml_with_zippers.html) +* [Parsing XML in Clojure](https://clojure-doc.org/articles/cookbooks/parsing_xml_with_zippers/) * [Clojure Macros and Metaprogramming](http://clojure-doc.org/articles/language/macros.html) * [The Art of Tree Shaping with Clojure Zippers](https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip) * [Building trees with and without zippers](https://vincent.404.taipei/clojure/building-trees-with-and-without-zippers/) From 162a7530370346309cd64898c91a730666627697 Mon Sep 17 00:00:00 2001 From: Tripp Lilley Date: Sun, 28 Jul 2024 18:09:42 +0800 Subject: [PATCH 41/41] Update link and title to clojure-doc.org Macros article More fixes from the clojure-doc reorg. This one also changed the title, but the content is the same (topic). --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5e0f804..5e9ec5c 100644 --- a/README.md +++ b/README.md @@ -162,9 +162,9 @@ Miscellaneous Articles/videos --------------- -* [Growing a DSL with Clojure](http://clojure-doc.org/articles/tutorials/growing_a_dsl_with_clojure.html) +* [Growing a DSL with Clojure](https://clojure-doc.org/articles/cookbooks/growing_a_dsl_with_clojure/) * [Parsing XML in Clojure](https://clojure-doc.org/articles/cookbooks/parsing_xml_with_zippers/) -* [Clojure Macros and Metaprogramming](http://clojure-doc.org/articles/language/macros.html) +* [Clojure Language: Macros](https://clojure-doc.org/articles/language/macros/) * [The Art of Tree Shaping with Clojure Zippers](https://lambdaisland.com/blog/2018-11-26-art-tree-shaping-clojure-zip) * [Building trees with and without zippers](https://vincent.404.taipei/clojure/building-trees-with-and-without-zippers/) * [Writing Parser Combinator Library in Clojure](http://troydm.github.io/blog/2016/04/11/writing-parser-combinator-library-in-clojure/)