Clojure needs a Rails, but not for the reason you think

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

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • kit

    Lightweight, modular framework for scalable web development in Clojure (by kit-clj)

  • I totally respect that, and Clojure could invest more in offering frameworks or even no-code platforms or such features, but the truth is it doesn't. The language very much targets the software/information engineer category in my opinion, where by that I mean, the people who are interested in not just the functional requirements, but also the non-functional requirements of performance, scale, architectural runway, future extensibility, operations, maintainability, correctness, re-usability, etc. Especially, Clojure targets those who believe a balance between all these and functional requirements is the holy grail. That's why it won't be the most correct, the most performant, the most productive, but a pragmatic balance of all these in almost equal parts.

    Maybe it should also embrace the people looking to get a product out by simply using a framework, and I'd say there's more of that in Clojure today than ever before, but the community I think is more composed of the former people that I describe, which is why you don't see any attempted framework take hold in the community, because most current members are not in the group that "just want to build the product using an established framework".

    I think the community has settled, ounce again, on a bit of a balanced approach, Kit (https://github.com/kit-clj/kit) and Edge (https://github.com/juxt/edge) are such hybrids. And some more direct viable frameworks have come along like Biff (https://biffweb.com/) and Fulcro (https://fulcro.fulcrologic.com/).

    That said, since the community is more composed of people like me, you don't see a mass move of every Clojurian switching to one of those.

    So it creates some questions?

    1. Is it a problem that the language targets engineers more interested in a balance between non-functional and functional?

    2. Should it be mutually exclusive, or can Clojure equally serve both niche? And if so, should it, why?

    3. Is the claim that you can be as productive and it is just as easy to build a product without using a framework in Clojure true? Does this apply to everyone, or only certain personalities or people with certain amount of lower level knowledge?

    4. Is Clojure's marketing misleading? Are people looking to just "build the product using an established framework" mislead in thinking Clojure will offer them salvation?

    5. Where do most developer fall in, if they don't fall in the category Clojure currently targets, than does that mean Clojure cannot become mainstream? To go mainstream does it mean you have to target frameworks because there are more developers looking to just make a product using a framework?

    I don't have answers to these, I'm just trying to define the current state and what the problem with it might be, or if it even is a problem.

  • stripe-python

    Python library for the Stripe API.

  • > Every time a new language comes out we have to recreate millions of baseline libraries and it just sucks. As a dev I want to be able to make use of great libraries oblivious to what they are created with.

    Technically this tool mostly does exist already with the OpenAPI specification if we're talking about REST APIs. If you put in the leg work to create a very detailed specification which is a YAML file, you can generate programming language specific SDKs out of it.

    Stripe has publicly mentioned[0] they mostly use this spec to generate their SDKs (even as of a few years ago), even so auto-generated code still requires developer time and there's a level of "hey we're dedicated to internally supporting this". It's a huge deal having a provider internally support your language's SDK.

    [0]: https://github.com/stripe/stripe-python/issues/694#issuecomm...

  • 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
  • schema

    Clojure(Script) library for declarative data description and validation (by plumatic)

  • malli

    High-performance data-driven data specification library for Clojure/Script.

  • bidi

    Bidirectional URI routing

  • reitit

    A fast data-driven routing library for Clojure/Script

  • yada

    A powerful Clojure web library, full HTTP, full async - see https://juxt.pro/yada/index.html

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • muuntaja

    Clojure library for fast http api format negotiation, encoding and decoding.

  • lein-figwheel

    Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding!

  • shadow-cljs

    ClojureScript compilation made easy

  • leiningen

    Moved to Codeberg; this is a convenience mirror

  • clojure-cli-config

    User aliases and Clojure CLI configuration for deps.edn based projects

  • component

    Managed lifecycle of stateful objects in Clojure (by stuartsierra)

  • integrant

    Micro-framework for data-driven architecture

  • luminus-template

    a template project for the Luminus framework

  • ripley

    Server rendered UIs over WebSockets

  • Maybe it's because Clojure has typically attracted a demographic who are more shy about self-promoting and marketing their new ideas and tools. Photon is an exciting (and relevant) example defying that trend though: https://www.hytradboi.com/2022/uis-are-streaming-dags

    Also relevant as a Phoenix-like alternative for Clojure: https://github.com/tatut/ripley

  • paos

    Clojure SOAP client

  • Just library-driven-development.

    I used the paos library (https://github.com/xapix-io/paos). Mainly followed the quick start examples on the github page. Fetched the wsdl from the API provider, pulled out the SOAP envelope which translates into a Clojure map. The API provider has a bunch of soap services that each provide a large number of keys in the envelope but many keys in many services aren't capable of actually doing anything server-side. This was . . . documented poorly.

    We have dev and test environments for this specific API provider so I hacked around and made calls until I had everything working.

    This is a perfect example of the kind of one-off stuff I often use Clojure for. Quick prototypes to get work done. There are many groups in my larger organization and a common experience for me is to have groups tell you "X can't be done because Y." In this case, a vendor was charging 5 figure fees per data migration effort for each planned migration. The plan was to roll out by group and there are many groups. My immediate question was "can't we do this with the API and save these fees?" The answer was "no, not possible." About three days later I had a working version for this admittedly simple use case, demo'd it, rolled it into production. The cost savings will be in the low six figures. Of course, once it was working the original internal group came back to re-implement the project in another language because "bus factor" but tbh there is lots of weirdness in my larger employer organization about who gets to do what. Once I had shown we could do it relatively easily, teams come out of the woodwork to grab it so that they can add the cost savings to their yearly brag results.

    I could write for days about this type of thing . . .

  • clojure-news-feed

    evaluating various technologies by implementing a news feed micro-service

  • I have a github repo where I implement a feature identical microservice in various tech stacks. I started that repo with a Clojure version that used community provided wrappers. See https://github.com/gengstrand/clojure-news-feed/blob/master/... as an example of calling Cassandra. Recently, I added another implementation with Clojure that just called the Java drivers directly. See https://github.com/gengstrand/clojure-news-feed/blob/master/... for that version of the same call. In the end, I decided to forego wrappers and make the calls directly because you end up with fewer dependencies and are more likely to be able to use latest versions of everything.

  • slack-ruby-client

    A Ruby and command-line client for the Slack Web, Real Time Messaging and Event APIs.

  • Ah, I'm surprised Slack doesn't support Ruby, but to be fair they are pretty tight on official support with only Python, Node and Java.

    Fortunately there's https://github.com/slack-ruby/slack-ruby-client, but it's not official. Although it seems to be a good example of a community driven library coming together. I haven't used it personally (I never interfaced with Slack in a Ruby app) but at a glance it looks like it has really good docs, a decent amount of contributors, well maintained, etc.. If I were building some Rails app that used Slack I'd likely reach for this and not feel bad about it.

    Kind of a bummer on the other 2 tho. Thankfully I wouldn't be building too many apps using those tools, but I get the point you're saying. In the grand scheme of things I think this also shows at how much more popular Python is than Ruby.

  • edge

    A Clojure application foundation from JUXT (by juxt)

  • I totally respect that, and Clojure could invest more in offering frameworks or even no-code platforms or such features, but the truth is it doesn't. The language very much targets the software/information engineer category in my opinion, where by that I mean, the people who are interested in not just the functional requirements, but also the non-functional requirements of performance, scale, architectural runway, future extensibility, operations, maintainability, correctness, re-usability, etc. Especially, Clojure targets those who believe a balance between all these and functional requirements is the holy grail. That's why it won't be the most correct, the most performant, the most productive, but a pragmatic balance of all these in almost equal parts.

    Maybe it should also embrace the people looking to get a product out by simply using a framework, and I'd say there's more of that in Clojure today than ever before, but the community I think is more composed of the former people that I describe, which is why you don't see any attempted framework take hold in the community, because most current members are not in the group that "just want to build the product using an established framework".

    I think the community has settled, ounce again, on a bit of a balanced approach, Kit (https://github.com/kit-clj/kit) and Edge (https://github.com/juxt/edge) are such hybrids. And some more direct viable frameworks have come along like Biff (https://biffweb.com/) and Fulcro (https://fulcro.fulcrologic.com/).

    That said, since the community is more composed of people like me, you don't see a mass move of every Clojurian switching to one of those.

    So it creates some questions?

    1. Is it a problem that the language targets engineers more interested in a balance between non-functional and functional?

    2. Should it be mutually exclusive, or can Clojure equally serve both niche? And if so, should it, why?

    3. Is the claim that you can be as productive and it is just as easy to build a product without using a framework in Clojure true? Does this apply to everyone, or only certain personalities or people with certain amount of lower level knowledge?

    4. Is Clojure's marketing misleading? Are people looking to just "build the product using an established framework" mislead in thinking Clojure will offer them salvation?

    5. Where do most developer fall in, if they don't fall in the category Clojure currently targets, than does that mean Clojure cannot become mainstream? To go mainstream does it mean you have to target frameworks because there are more developers looking to just make a product using a framework?

    I don't have answers to these, I'm just trying to define the current state and what the problem with it might be, or if it even is a problem.

  • biff

    A Clojure web framework for solo developers.

  • I totally respect that, and Clojure could invest more in offering frameworks or even no-code platforms or such features, but the truth is it doesn't. The language very much targets the software/information engineer category in my opinion, where by that I mean, the people who are interested in not just the functional requirements, but also the non-functional requirements of performance, scale, architectural runway, future extensibility, operations, maintainability, correctness, re-usability, etc. Especially, Clojure targets those who believe a balance between all these and functional requirements is the holy grail. That's why it won't be the most correct, the most performant, the most productive, but a pragmatic balance of all these in almost equal parts.

    Maybe it should also embrace the people looking to get a product out by simply using a framework, and I'd say there's more of that in Clojure today than ever before, but the community I think is more composed of the former people that I describe, which is why you don't see any attempted framework take hold in the community, because most current members are not in the group that "just want to build the product using an established framework".

    I think the community has settled, ounce again, on a bit of a balanced approach, Kit (https://github.com/kit-clj/kit) and Edge (https://github.com/juxt/edge) are such hybrids. And some more direct viable frameworks have come along like Biff (https://biffweb.com/) and Fulcro (https://fulcro.fulcrologic.com/).

    That said, since the community is more composed of people like me, you don't see a mass move of every Clojurian switching to one of those.

    So it creates some questions?

    1. Is it a problem that the language targets engineers more interested in a balance between non-functional and functional?

    2. Should it be mutually exclusive, or can Clojure equally serve both niche? And if so, should it, why?

    3. Is the claim that you can be as productive and it is just as easy to build a product without using a framework in Clojure true? Does this apply to everyone, or only certain personalities or people with certain amount of lower level knowledge?

    4. Is Clojure's marketing misleading? Are people looking to just "build the product using an established framework" mislead in thinking Clojure will offer them salvation?

    5. Where do most developer fall in, if they don't fall in the category Clojure currently targets, than does that mean Clojure cannot become mainstream? To go mainstream does it mean you have to target frameworks because there are more developers looking to just make a product using a framework?

    I don't have answers to these, I'm just trying to define the current state and what the problem with it might be, or if it even is a problem.

  • 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