Projects
Currently Funded Projects
Long-term (USD 1.5k/month)
Bozhidar Batsov
Michiel Borkent
Toby Crawley
Thomas Heller
Kira McLean
Nikita Prokopov
Tommi Reiman
Peter Taoussanis
USD 9k
Clojure Goes Fast
Address a backlog of improvements for Clojure Goes Fast tools including a brand new web application for clj-async-profilerthat will allow users to host and share the generated flamegraphs. Adding a new dynamic transforms for clj-async-rpofiler, improve aesthetics and the UX. For clj-java-decompiler, expanding the preprocessing abilities to present clearer results to the user. I also want to eventually integrate it more tightly with established Clojure IDEs like CIDER and Calva, which requires some groundwork.Malli
This project aims to drastically improve the expressivity of Malli schemas to help address current user feedback and enable future extensions. The basic idea is to add a constraint language to each schema to express fine-grained invariants and then make this constraint language compatible with validators/explainers/generators/etc so that Malli users can write high-level, precise schemas without resorting to partial workarounds.Scicloj
Stabilize the Noj v2 project: https://scicloj.github.io/noj Noj is an entry point for the main data and science libraries. Help with the documentation effort of Fastmath, develop current branches of Metamorph.ml., help with issues in Tablecloth (dataset processing). Stabilize and extend the API of Hanamicloth. Improve Noj documentation. Coordinate the Scicloj open-source mentoring program: https://scicloj.github.io/docs/community/groups/open-source-mentoring/USD 2k
Clj-nix, nixpkgs
An alternative builder for Nix that uses Babashka / SCI instead of Bash. It provides a way for constructing complex Nix derivations using Babashka/SCI entirely, eliminating the need to write any Bash code. Add a Babashka writer to nixpkgs. Nixpkgs supports creating self-contained scripts, called “nix writers.” Traditionally written in Bash, recent versions of nixpkgs include the ability to write these scripts in Python, Ruby, or Rust.Jank
Build out jank’s nREPL server, which involves implementing bencode support,clojure.test
, improving native interop, supporting pre-compiled binary modules, and ultimately adding AOT compilation support.
Kushi
Continued development of Kushi, a foundation for building web UI with ClojureScript. Work during the Q3 funding cycle will focus on finishing the new css transpilation pipeline, significant build system performance upgrades, and implementing a reimagined theming system.Standard Clojure Style
Development of a Standard Clojure Style which is a “no config, runs everywhere, follows simple rules” formatter for Clojure code. More information about the genesis of the project can be found on IssuePreviously Funded Projects
Q2 2024
clj-kondo, Babashka, Squint/Cherry
Clj-kondo - support Clojure 1.12, other Clojure dialects, most wanted open tickets. Babashka - Support new Clojure 1.12 (interop) features, better error messages. Squint/Cherry - source map support, better nREPL support, better CLJS compatibilityCompojure-api
Compojure-api was a popular and actively maintained library used for web projects around 2014-2018. While its creators have moved on to reitit, there are many existing/legacy commercial projects that rely on compojure-api. This project will deploy the first new releases since 2019 (and include compojure-api 1.x, 2.0.0-alpha branch, ring-swagger), compojure-api/reitet migration tools, and Swagger 3.0Jank
Jank has over 80% syntax parity with Clojure. Library parity with clojure.core is around 20%. The next step is to fill out the language to make it feel more like Clojure. There are just a few things remaining which show up in every Clojure program that will be addressed - Lazy sequences, Loop/recur, Destructuring, Symbol interning, and for and doseq macros.clj-merge tool
Clojure syntax and style tend to create unnecessary merge conflicts due to bunching of ))) on single line for non-local changes. Manual resolution is often not performed by same person that wrote it and may not be well understood or (re)tested after merge - resulting in errors such as moving a form in or out of a else or block changing the code behavior. This project will focus on developing a git diff and merge tool for edn and clojure code with the aim of creating a git mergetool that can be used as a replacement for git’s default merge tool for clj(s) and edn files.Enjure
This project will focus on MVP for the Enjure CLI tool and providing the ability to create new projects and view/controller templates as well as delete templates.Lost in Lambduhhs
Rejuvenate and streamline production of the “Lost In Lambduhhs Podcast,” an interview-style technology show for engineers and people working in tech. Through free-form conversational style questions the audience gets the opportunity to “meet the person behind the Github”. The goal of each episode is to illuminate the personal narratives and insights of tech luminaries, giving them a platform to share their perspectives while promoting their library or tool.Plexus
Development of a solid modelling library called Plexus, as well as dependent libraries that bring the full power of Manifold (a state-of-the-art CSG modelling library written in c++) to the Java and, most importantly, Clojure ecosystems. Plexus is an effort to define a declarative data model for solid modeling on top of a robust CSG foundation and combine that with the unmatched interactive development experience that Clojure provides.Q1 2024
CIDER
Work will be based on CIDER’s issue trackers (cider, cider-nrepl, orchard). Some of the larger themes will be:cider-inspector-mode refinements, cider-log-mode refinements, and refactoring our Java parsing machinery.Clojure-lsp
Focus on clojure-lsp and related ones like lein-clojure-lsp, lsp4clj, and clojure-lsp- intellij. This project will include adding missing LSP features, options to create clojure project from scratch for fast onboarding, better performance and stability.Instaparse
Focus on evaluating and incorporating pull requests for instaparse and possibly new features requested by the community (and updating documentation along the way)Scicloj
Develop a clojure-data-scrapbook - a community space for documenting data analysis workflows - similar to the clojure-data-cookbook, but less curated and more community-driven. Convene a real-world-data study group where individuals will bring their own data problems and collaborate on common practices. This is in addition to maintaining the Scicloj website and running the existing dev and study groups.Jank
Closing in on crucial missing pieces in jank which have been getting in the way of reaching parity with Clojure. Support thread locality or the stack-based nature of dynamic vars. Add syntax quoting, unquoting, or splicing. If time permits, support ^:foo or ^{:foo true} meta hints on forms and normalize interpolation syntax.Sitefox
Bring Sitefox dependencies up to date, tidy up the key-value database module & write basic tests, improve the end-to-end tests to ensure greater reliability under change, and Improve error handling by making errors more verbose. Improve support by making two concise how-to videos showing people how to build simple sites and apps with Sitefox.UnifyBio
Converting the CANDELBio ecosystem created at the Parker Institute for Cancer Immunotherapy from its open source, but semi-abandoned state to UnifyBio, a world class data harmonization platform - Clojure-first and permissively open source (Apache 2.0).Wolframite
There is an existing library for wolfram<>clojure interop but it’s lack of documentation, reliability and usability mean that it is not widely used or known. We hope to fix all of these issues and so bring wolfram interop up to the standards of similar bridges like clojisr and libpython-clj.Q3 2023
Bosquet
Bosquet’s goal is to make AI/LLM-based application building simple and productive.Emmy
This round will focus on a build-out of Google Docs-style experience for interactive documents with sophisticated mathematical visualizations, where multiple users can work together on the same page, save and share the work they’ve created and build on existing mathematical play and exploration.Neanderthal
The goal of this round is to polish the current Uncomplicate libraries (mainly Neanderthal, Deep Diamond, ClojureCUDA, ClojureCL, ClojureCPP). Work will include a thorough re-visiting of existing code, writing more tests for edge cases, discovering and fixing bugs while improving code, and improving documentation.Quil
Quil is a wrapper around the Processing computer graphics system that’s used by artists and teachers around the world. It has been moribund for the last years, does not work with the latest version of Processing, nor on JVMs >1.8, nor on Apple arm processors. We would like to fix all of that, improve the quality of the codebase (maintainability, testing, &c), and update the examples/playground website.Biff
Write and post how-to articles and background essays that will help Biff to bring more people into the Clojure Community. This includes “Biff from scratch,” - a series of guides that will show how to put together a web app in the style of Biff without actually using any Biff code.Deps-try
The plan is to add a possibility to deps-try (a CLI to start a rebel-readline powered REPL with libraries you want to try) to load recipes. A recipe (i.e. a local or remote Clojure file) essentially seeds the REPL-history which would make it easy for someone to ‘step through’ some code. E.g. library authors could add such a recipe-file to their repositories to demonstrate how to use a library.Project GDL
The goal of GDL is to connect two things that are not connected: game development and clojure. Near-term goals are to integrate the component system in cyber Dungeon Quest and make all the hard-coded values configurable and save most of the game state in only one place, and then build a ui to easily edit the domain objects. Next, tackle a way to reduce the amount of Side effects by using some kind of transaction system that is close in spirit to datomic architecture.Jank
Focus on implementing clojure.core/require and everything involved. Right now, jank compiles everything from one file (and re-compiles clojure.core every time it starts); the runtime/compiler understand namespaces, but there is no compilation cache, no class paths for looking up modules, no dependency loading, etc. After this work is done, jank will be in a position to integrate with leiningen and actually be used for multi-project files.Q2 2023
Clj-kondo, babashka, cherry, SCI, nbb
A linter for Clojure code that sparks joy.Clojure Camp
Free learning community to help new developers of all backgrounds build a secure foundation for professional programming success - with this project focusing on a study group matchmaking service and a metacircular project incubator.Emmy
Work to make SICMUtils computer algebra system into a best-in-class, modular set of tools for doing serious work and exploration in math and physics, and sharing that work in the browser.Neanderthal,Clojure CUDA, Deep Diamond
Implement ports of Neanderthal’s MKL engines to JavaCPP, ClojureCUDA to JavaCPP’s CUDA, and Neanderthal’s GPU matrix engine to new, JavaCPP-based ClojureCUDA. Update Deep Diamond to use new infrastructure.clj-Nix
Refactor the CLI to be more granular about the dependencies used at build timeJank
Provide REPL support, better native interop, smaller binaries, and faster compilation times for native executablesLucene Grep
Separate the lucene-grep project into several reusable idiomatic Clojure libraries/tools/tutorials that will help the Clojure community to leverage the Apache Lucene library.Portfolio
Improve Portfolio’s error handling and the experience for new users by adding self-hosted documentation to guide users via its UI once set up.Q1 2023
Aleph/Manifold
Squash bugs and keep dependencies up to date. Improvements in HTTP/2 support and refactor error-handling code.
Clerk
Clerk takes a Clojure namespace and turns it into a notebook
Clojure-ts-mode
Reimplement clojure-mode’s functionality to work with the tree-sitter integration that is being released with the upcoming version of Emacs (version 29).
Donut
Get Donut, a full-stack framework for building an online business, release-ready. Release and put the tools and resources in place to support community involvement.
Doxa
A fully functional version and documentation of Doxa with examples of how to use with re-frame
and reagent
Exercism
Expand the Exercism track syllabus by teaching additional concepts, and improve the automated analysis tooling to provide better feedback.Uncomplicate Neanderthal
Implement and provide a full range of documentation for Sparse Matrix support in Neanderthal, a Clojure library for fast matrix computations.Q3 2022
Biff
A Clojure web framework for solo developers.clj-kondo, babashka, SCI, nbb, scittle and related
Clj-kondo is a static analyzer and linter for Clojure code that sparks joycljfx
Declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frameClojupedia
Community knowledge graph of the Clojure ecosystemClojureDart
A port of Clojure that compiles to DartClojure Data Cookbook
A book about how to do common data manipulation, analysis, and visualization tasks in ClojureExo (unreleased)
ClojureScript library for fetching and caching data using EQLkaocha and related
Full featured next gen Clojure test runnermaria.cloud
a coding environment for beginnersmathbox-cljs
Clojurescript extensions and utilities for Mathbox.portal
A clojure tool to navigate through your data.Q1 2022
Clj-kondo, babashka, and other related projects
A linter for Clojure code that sparks joy.
Firefox Developer Tools
A myriad of tools
Conjure
Interactive evaluation for Neovim (Clojure, Fennel, Janet, Racket, Hy, MIT Scheme, Guile).Reveal
Reveal is a Clojure-oriented data inspection toolbox that aims to remove the barrier between you and objects in your VM.Overtone Playground
Overtone Playground is a library that opens the door for learning and exploring music with Clojure and Overtone.Biff
A simple and easy web framework for Clojure.Orchard
A fertile ground for Clojure tooling.Typed Clojure
An optional type system for Clojure.Q3 2021
Shadow CLJS
ClojureScript compilation made easyclojure-lsp
Clojure & ClojureScript Language Server (LSP) implementationMalli
Data-Driven Schemas for Clojure/Script.Clojurians-log-v2
Capturing, conserving, and making this discourse of Clojurians slack community complete, easily accessible, and searchable.PCP
Clojure Processor – A Clojure replacement for PHPHoly Lambda
The extraordinary simple, performant, and extensible custom AWS Lambda runtime for Clojure.Dependabot Core
The core logic behind Dependabot’s update PR creation.Typed Clojure
An optional type system for ClojurePolylith
A tool used to develop Polylith based architectures in Clojure.Q4 2020
O’Doyle Rules
Clojure needs another good rules engine. Clara is great but the lack of ability to update facts makes it difficult to use outside of “pure” logic problems. O’Doyle implements the same RETE algorithm but makes it more useful for general purpose “messy” use cases like managing the state of a frontend app or a game.clj-kondo/babashka/sci
Clj-kondo is a Clojure linter that is used by a wide variety of individual users and companies.
Babashka is a scripting environment that can execute a significant subset of JVM Clojure programs with instant startup. It is used by individual users and companies. It is currently my project with the most stars on Github.
Sci is the Clojure interpreter powering babashka and several other projects.
ClojisR
The purpose of this project is to take an active part in improving Clojure’s data science stack, especially in aspects of usability, user-facing features, and documentation.
A large part of that effort is happening in the Scicloj community with which this project is associated.
The work that we’ll be doing with this funding will enable us to get closer to our goal of making Clojure a beginner-friendly solution for data science, thereby allowing us to expose the Clojure ecosystem to a different culture and to more diverse groups of users/programmers - starting with new developers and data scientists studying R as their main language.
Calva
We’ve seen that Calva helps new Clojurists get up and running with Clojure without having to worry so much about tooling. Perhaps more importantly, VS Code has become such a major platform for developers and it’s important to have Clojure(Script) support in the developers' editor of choice.Q3 2020
clj-kondo/babashka/sci
Clj-kondo is a Clojure linter that is used by a wide variety of individual users and companies.
Babashka is a scripting environment that can execute a significant subset of JVM Clojure programs with instant startup. It is used by individual users and companies. It is currently my project with the most stars on Github.
Sci is the Clojure interpreter powering babashka and several other projects:
- Bootleg: An HTML templating CLI
- Clj-kondo: Clojure linter
- Chlorine: Atom editor plugin for Clojure
- Malli: Plain data Schemas for Clojure/Script
- Spire: Pragmatic provisioning using Clojure.
Datahike
Within the Clojure Datalog database world Datahike provides a persistent open source solution for medium-sized projects with a relatively small and extensible code base. It supports a variety of persistent storages like JDBC or Redis. Additionally Datahike supports parts of the well-known Datomic API to better adapt to its functionality.
By adding ClojureScript support in the future, Datahike goes beyond the backend market with a vision of a distributed cross-platform system environment that speaks Datalog everywhere. With two commercial projects in progress, Datahike becomes more battle-tested in production environments.
Malli
Clojure is a data-oriented language and we should have a solid fully data-driven schema library too! Besides validation and value transformations, we should be able transform, persist, generate and infer schemas just like normal data. Malli tries to be develop-friedly library to companion to other data-driven libs like EQL, Bidi, HoneySQL, Hiccup, Integrant, Reagent and Reitit.
Malli has an open development model, design decions are discussed in slack (#malli) and in GitHub issues. Not a top goal, but eventually, Malli should be spec-compatible.
Practicalli
Practicalli helps the community to grow by providing quality content for people to learn, share and help others more readily discover the joy of Clojure.Q2 2020
re-frame
re-frame is one of the most widely used ClojureScript projects with 4.3k stars on GitHub and 1.1 million downloads on Clojars. This work will do some spring cleaning and TLC for the project, reviewing open issues and PRs. Also, creating an EP, and doing work on related re-frame projects.Practicalli
High quality and up to date information helps any developer using Clojure find the help they need, whether they are experienced or new to Clojure. Finding the time to teach developers how to work with Clojure is time consuming for developers, so a reliable source of information speeds up on-boarding and skilling-up of developers.CIDER/nREPL/Orchard
CIDER’s the most popular IDE in the Clojure community, and nREPL and CIDER’s Orchard are at the heart of most other tools that exist out there.Figwheel
lein-figwheel has 1.1 million downloads on clojars and figwheel-main has 100k downloads. They are widely used and influential in the ClojureScript and wider programming communities.Q1 2020
Ring
Ring is the most commonly used HTTP abstraction layer for Clojure. Clojurists Together funded James Reeves, Ring’s maintainer to build out a draft spec and experimental alpha for Ring 2.0. This will add better support for asynchronous HTTP connections, and pave the way to support HTTP/2 and HTTP/3 in future. As a secondary objective, he is also working on removing the provided dependency on Java servlets from Ring coreReagent
Based on Clojars downloads Reagent is the most used ClojureScript React wrapper. Reagent is also one of the most popular ClojureScript projects on GitHub with 3.7k stars. Juho Tepieri is a maintainer of Reagent and will be working on supporting React Hooks, and a configurable Reagent Hiccup compiler.Calva
Calva is a Clojure IDE plugin for VS Code. Calva helps new Clojurists get up and running with Clojure without having to worry so much about tooling. VS Code has become a major platform for developers and its important to have Clojure(Script) support in the developers' editor of choice. We funded Brandon Ringe, a Calva maintainer to work on supporting large data sets and Clojure debugging support.fireplace.vim
Tim Pope is the maintainer of Fireplace.vim, a Clojure plugin for Vim. In the most recent Clojure survey it was used by 10% of respondents. We funded Tim to work on: Leveraging Vim’s recently added asynchronous APIs for user facing features, providing better automatic configuration for projects, notably Shadow CLJS, and working on outstanding feature requests.Q4 2019
Expound
Expound is a widely used tool for helping developers more quickly understand spec error messages. Expound is maintained by Ben Brinckerhoff.Deep Diamond
Deep Diamond is a lean, high performance, infrastructure for working with tensors in Clojure, with an emphasis on Deep Learning. Dragan Djuric is the maintainer of Deep Diamond.Oz
While ClojureScript offers a first class front-end development experience, data visualization specifically has long been an under-served need in both Clojure & ClojureScript. Oz gives ClojureScript developers the ability to leverage Vega-Lite and Vega, with their Clojuresque data-driven/declarative design, and close this gap. Oz is maintained by Chistopher Small.Q3 2019
CIDER
CIDER is a very popular programming environment and its infrastructure (nREPL, cider-nrepl, piggieback and orchard) powers many of the other tools out there (e.g. vim-fireplace, vim-iced, calva, etc). Improvements to CIDER and its foundational pieces generally benefits most of the Clojure community. It is maintained by Bozhidar Batsov.Meander
Meander provides a uniquely transparent way of performing data manipulation that aims to be declarative, performant, and safe. These properties are important because they enable Clojure developers to write correct data manipulation code using a common language which encourages collaboration and thoughtful design without sacrificing dynamism. And because Meander has been designed with both transparency and accuracy in mind, Clojure code written with it can be an asset to a development team and, thus, a business. It is maintained by Joel Holdbrooks.Calva
VS Code is the editor of choice for many developers and having good Clojure and ClojureScript support on the platform helps newcomers find the joy of Clojure faster. VS Code also is easier to use than many other development environments, and by leveraging this, Calva can make Clojure more accessible generally. It is maintained by Peter Strömberg.Q2 2019
fireplace.vim
Fireplace is a vim plugin for Clojure. It adds REPL integration and was used by 10% of Clojure developers in the most recent Clojure survey. It is the most popular Clojure REPL integration for vim. Tim Pope is going to work on cleaning up the issue tracker, implementing support for Vim 8 and Neovim job support, looking at ClojureScript improvements, and various other fixes and improvements to fireplace.vim and sibling projects like salve.vimQ1 2019
Neanderthal
Neanderthal is a fast native-speed matrix and linear algebra library written in Clojure. Matrices and linear algebra are the infrastructure for high performance scientific software, including machine learning. Dragan Djuric is going to be working on adding higher-level tutorials that give people the bigger picture and shows them good practices.Aleph
Aleph is one the best options for creating high-performance communication systems in Clojure, including but not limited to HTTP & websocket clients & servers. It is based on Netty, a high performance network application framework.
Development of Aleph also has an impact on the entire server-side libraries ecosystem, including direct influence by backporting bug fixes to such projects like clj-http (Clojure), Netty (Java) and potentially Ring (Clojure); and indirect influence by pushing boundaries and expending interest in the field.