Try Clojure

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • babashka

    Native, fast starting Clojure interpreter for scripting

  • If you are new to Clojure and would like to experiment with it in a way that is immediately useful, I highly recommend the Babashka runtime for scripting [0]. It's very fun, approachable, and one of the more polished parts of the Clojure ecosystem.

    It's a particularly good entry point because unlike full-JVM Clojure it has a very fast startup time. Newcomers can use any file-watching /reloading tools (e.g. nodemon) that they're already familiar with to work with it interactively.

    Hopefully, a enthusiastic user will graduate to using a REPL connection in their editor for a fully interactive setup. But newcomers tend not to do this... its an unfamiliar workflow to most, and can be pretty cumbersome to setup.

    [0]: https://babashka.org

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • shadow-cljs

    ClojureScript compilation made easy

  • Here is where I'd start for the path of least resistance while still using the most modern libraries:

    - Dependency management: https://clojure.org/guides/deps_and_cli

    - Clojure->JS compiler: https://github.com/thheller/shadow-cljs

    - React integration: https://github.com/reagent-project/reagent

    - State management (optional): https://github.com/day8/re-frame

    You might also want a CSS framework. There are some options to write CSS in ClojureScript, but I prefer TailwindCSS which isn't a Clojure-specific thing as it works fine out-of-the-box with `.cljs` files.

  • biff

    A Clojure web framework for solo developers.

  • https://biffweb.com/p/how-to-use-postgres-with-biff/

    People don't really use ORMs in Clojure, they just write SQL directly and abstract the details from consumers using functions. That said, HoneySQL is a common alternative to writing SQL that makes it a lot less painful (and composable!):

  • jank

    A Clojure dialect hosted on LLVM with native C++ interop

  • There's an ongoing effort to create a Clang/LLVM implementation of Clojure's runtime with hot reloading and other very interesting features. You can take a look at it at https://jank-lang.org/. It still hasn't reached feature parity with full blown JVM Clojure but we've paying close attention to its development.

  • clojure

    The Clojure programming language

  • Along the same lines with the docs, I also find it frustrating that a lot of the very most core basic abstractions and interfaces are left totally undefined in terms of documentation. Take `ISeq`'s definition. Surely, a candidate for the single most core interface.

    https://github.com/clojure/clojure/blob/master/src/jvm/cloju...

    But like, where is the javadoc? What exactly is supposed to be the contract of these methods `first`, `next`, `more`, `cons`? What's the difference between `next` and `more`?

    I really just don't like that. Are we just supposed to pick up the core contracts/abstractions through oral teachings and slack channel messages?

  • reagent

    A minimalistic ClojureScript interface to React.js

  • Here is where I'd start for the path of least resistance while still using the most modern libraries:

    - Dependency management: https://clojure.org/guides/deps_and_cli

    - Clojure->JS compiler: https://github.com/thheller/shadow-cljs

    - React integration: https://github.com/reagent-project/reagent

    - State management (optional): https://github.com/day8/re-frame

    You might also want a CSS framework. There are some options to write CSS in ClojureScript, but I prefer TailwindCSS which isn't a Clojure-specific thing as it works fine out-of-the-box with `.cljs` files.

  • re-frame

    A ClojureScript framework for building user interfaces, leveraging React

  • Reagent is nice and has been around for about a decade now, but I moved away from it towards very thin wrappers around React[1], because I felt like it was adding too much additional complexity on top of React, which is already quite complex on its own. I wanted a clearer view at what is going on and a simpler way to interop with native React components.

    Although it seems to catch up with experimental support of React 18 now, Reagent has fallen behind the latest developments in React and may not benefit from all of its performance optimizations. It is still using class components instead of hooks and there have been concerns that the runtime conversion of Hiccup may drag down performance. I guess in most cases it is not really an issue or in any way noticable, so if you’re not doing any fancy stuff it should be fine. I may even come back to Reagent at some point, since I have to admit that I miss the UI-as-data model with Hiccup.

    What I highly recommend, however, is using re-frame[2] for state management. It has also been around for a long time (2014, around the same time Reagent came along) and pioneered some popular ideas in that area. It may seem a bit overwhelming at first, but the docs provide a great introduction and I find the model very clear once you wrap your head around it. At the moment it depends on Reagent, but there are ways around that. [3]

    [1]: see Helix (https://github.com/lilactown/helix) or UIx (https://github.com/pitch-io/uix)

    [2]: https://day8.github.io/re-frame/

    [3]: refx (https://github.com/ferdinand-beyer/refx) is an almost drop-in replacement without the Reagent dependency, but hasn’t been updated in a while. Alternatively, re-frame can be integrated with UIx/Helix by adding some interop code https://github.com/pitch-io/uix/blob/master/docs/interop-wit...

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • clojure-lsp

    Clojure & ClojureScript Language Server (LSP) implementation

  • clojure-lsp for any editor is excellent.

    https://github.com/clojure-lsp/clojure-lsp

    clj-kondo is also excellent with multiple editors supported.

    https://github.com/clj-kondo/clj-kondo

    I've always used (Neo)Vim with Clojure.

  • clj-kondo

    Static analyzer and linter for Clojure code that sparks joy

  • clojure-lsp for any editor is excellent.

    https://github.com/clojure-lsp/clojure-lsp

    clj-kondo is also excellent with multiple editors supported.

    https://github.com/clj-kondo/clj-kondo

    I've always used (Neo)Vim with Clojure.

  • ClojureCLR

    A port of Clojure to the CLR, part of the Clojure project

  • hy

    A dialect of Lisp that's embedded in Python

  • basilisp

    A Clojure-compatible(-ish) Lisp dialect targeting Python 3.8+

  • helix

    A post-modern modal text editor.

  • I use Helix [0] myself, which has tree-sitter based commands for moving + selecting up/down/forward/back by expressions. These are built-in and require no configuration.

    It's surprisingly excellent! Sure, the "language" of paredit features more powerful text manipulation that just simple movement... but combined with the new "jumping" in the latest Helix release [1], it makes for a very impressive keyboard-based navigation system.

    [0]: https://helix-editor.com

  • ring-jetty9-adapter

    An enhanced version of jetty adapter for ring, with additional features like websockets, http/2 and http/3

  • never used an ORM, but happily used HugSQL for making composable queries[3].

    [0]https://github.com/sunng87/ring-jetty9-adapter

  • reitit

    A fast data-driven routing library for Clojure/Script

  • hiccup

    Fast library for rendering HTML in Clojure

  • libpython-clj

    Python bindings for Clojure

  • rn-rf-shadow

    An example project to get you started with React Native using shadow-cljs in 3 minutes

  • The CLJS + RN route is doable. [0] Not familiar with the other approach.

    [0] https://github.com/PEZ/rn-rf-shadow

  • tryclojure

    Clojure live REPL tutorial

  • SDKMan

    The SDKMAN! Command Line Interface

  • I use https://sdkman.io/ to manage JVM versions, have you tried that? I haven't used Cursive, maybe it does something weird, but in general IntelliJ seems to accept it just fine in my everyday work.

  • simple-website-with-posts

    A simple Clojure implemented website that lets you write posts and see them.

  • In Clojure you'll have to write the queries yourself unfortunately. People always ask, where is the fully fledged web framework in Clojure? There isn't one. Why there isn't one is hard to answer, but it's partially because the people who could write one, don't find they need one themselves.

    There's definitely a preference in Clojure for not relying of frameworks, because the current people in the community like to be in control, know what's going on, or do it their own way.

    That said, the whole code still ends up being relatively small. So, you kind of end up with a similar amount of total code, but you're much more in control. And if certain things you find too repetitive, you can remove the repetition yourself through many of Clojure's facilities, specifically where they annoyed you.

    See: https://github.com/didibus/simple-website-with-posts where I implemented the small website you were talking about, creating posts and seeing them. The whole code is here (minus the CSS): https://github.com/didibus/simple-website-with-posts/blob/ma...

    It's 95 loc and that includes the templates. There's no framework.

  • ClojureDart

    Clojure dialect for Flutter and Dart

  • helix

    A simple, easy to use library for React development in ClojureScript. (by lilactown)

  • Reagent is nice and has been around for about a decade now, but I moved away from it towards very thin wrappers around React[1], because I felt like it was adding too much additional complexity on top of React, which is already quite complex on its own. I wanted a clearer view at what is going on and a simpler way to interop with native React components.

    Although it seems to catch up with experimental support of React 18 now, Reagent has fallen behind the latest developments in React and may not benefit from all of its performance optimizations. It is still using class components instead of hooks and there have been concerns that the runtime conversion of Hiccup may drag down performance. I guess in most cases it is not really an issue or in any way noticable, so if you’re not doing any fancy stuff it should be fine. I may even come back to Reagent at some point, since I have to admit that I miss the UI-as-data model with Hiccup.

    What I highly recommend, however, is using re-frame[2] for state management. It has also been around for a long time (2014, around the same time Reagent came along) and pioneered some popular ideas in that area. It may seem a bit overwhelming at first, but the docs provide a great introduction and I find the model very clear once you wrap your head around it. At the moment it depends on Reagent, but there are ways around that. [3]

    [1]: see Helix (https://github.com/lilactown/helix) or UIx (https://github.com/pitch-io/uix)

    [2]: https://day8.github.io/re-frame/

    [3]: refx (https://github.com/ferdinand-beyer/refx) is an almost drop-in replacement without the Reagent dependency, but hasn’t been updated in a while. Alternatively, re-frame can be integrated with UIx/Helix by adding some interop code https://github.com/pitch-io/uix/blob/master/docs/interop-wit...

  • uix

    Idiomatic ClojureScript interface to modern React.js (by pitch-io)

  • Reagent is nice and has been around for about a decade now, but I moved away from it towards very thin wrappers around React[1], because I felt like it was adding too much additional complexity on top of React, which is already quite complex on its own. I wanted a clearer view at what is going on and a simpler way to interop with native React components.

    Although it seems to catch up with experimental support of React 18 now, Reagent has fallen behind the latest developments in React and may not benefit from all of its performance optimizations. It is still using class components instead of hooks and there have been concerns that the runtime conversion of Hiccup may drag down performance. I guess in most cases it is not really an issue or in any way noticable, so if you’re not doing any fancy stuff it should be fine. I may even come back to Reagent at some point, since I have to admit that I miss the UI-as-data model with Hiccup.

    What I highly recommend, however, is using re-frame[2] for state management. It has also been around for a long time (2014, around the same time Reagent came along) and pioneered some popular ideas in that area. It may seem a bit overwhelming at first, but the docs provide a great introduction and I find the model very clear once you wrap your head around it. At the moment it depends on Reagent, but there are ways around that. [3]

    [1]: see Helix (https://github.com/lilactown/helix) or UIx (https://github.com/pitch-io/uix)

    [2]: https://day8.github.io/re-frame/

    [3]: refx (https://github.com/ferdinand-beyer/refx) is an almost drop-in replacement without the Reagent dependency, but hasn’t been updated in a while. Alternatively, re-frame can be integrated with UIx/Helix by adding some interop code https://github.com/pitch-io/uix/blob/master/docs/interop-wit...

  • refx

    re-frame without Reagent

  • Reagent is nice and has been around for about a decade now, but I moved away from it towards very thin wrappers around React[1], because I felt like it was adding too much additional complexity on top of React, which is already quite complex on its own. I wanted a clearer view at what is going on and a simpler way to interop with native React components.

    Although it seems to catch up with experimental support of React 18 now, Reagent has fallen behind the latest developments in React and may not benefit from all of its performance optimizations. It is still using class components instead of hooks and there have been concerns that the runtime conversion of Hiccup may drag down performance. I guess in most cases it is not really an issue or in any way noticable, so if you’re not doing any fancy stuff it should be fine. I may even come back to Reagent at some point, since I have to admit that I miss the UI-as-data model with Hiccup.

    What I highly recommend, however, is using re-frame[2] for state management. It has also been around for a long time (2014, around the same time Reagent came along) and pioneered some popular ideas in that area. It may seem a bit overwhelming at first, but the docs provide a great introduction and I find the model very clear once you wrap your head around it. At the moment it depends on Reagent, but there are ways around that. [3]

    [1]: see Helix (https://github.com/lilactown/helix) or UIx (https://github.com/pitch-io/uix)

    [2]: https://day8.github.io/re-frame/

    [3]: refx (https://github.com/ferdinand-beyer/refx) is an almost drop-in replacement without the Reagent dependency, but hasn’t been updated in a while. Alternatively, re-frame can be integrated with UIx/Helix by adding some interop code https://github.com/pitch-io/uix/blob/master/docs/interop-wit...

  • framework

    Our framework (by Flexiana)

  • The closest to this (MVC framework with all features including migrations, API building, auth...) is Xiana https://github.com/Flexiana/framework/

  • calva-paredit

    Discontinued Paredit extension for Visual Studio Code

  • i'm pretty sure this is the thread i saw, but at the time it hadn't been closed yet: https://github.com/BetterThanTomorrow/calva-paredit/issues/1...

    if there's now a way to disable paredit entirely then i might check it out again some time in the bear future

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts