Sei sulla pagina 1di 5

Started: August 2017, by David Goldfarb <deg@degel.

com>
Authors: David Goldfarb <deg@degel.com>, ...

Usage

This document is freely editable, in the hope that the community will add value. I realize
that the Internet is a big place, and this may have been a stupid decision, so I reserve
the right to edit or delete any changes that I find offensive, disturbing, wrong, or
annoying; for any time, and for any reason. I also reserve the right to change access to
this document in the future.

If you don't like my decisions, you are free to make your copy at any time, and to use
it for any purpose, private or commercial.

readers, with respect.

Overview

Each time I start a new Clojure web project, I look around for the best framework. This
ecosystem is changing incredibly fast (which is good), but it makes it very difficult to
choose the right tools.

I started this Google Sheet to summarize the different frameworks. I'm starting with
information available in the README's of each project, but hope that:
1. Putting all this information in one place will already add value.
2. This sheet will grow with time and contributors to contain much more information.

Please add to this document, including more frameworks; useful information that I
omitted; and corrections of any mistakes or typos.

Frameworks

This section is an overview of each Framework. Detailed feature comparisons


can be found in the next tab. (Framework maintainers are encouraged to add info!)

Chestnut https://github.com/plexus/chestnut

Chestnut is an application template for Clojure/ClojureScript applications. It


automatically includes support for a REPL-driven workflow; dev/prod/test
builds; Figwheel integration; and basic test support.

It includes backend Compojure setup, and a front-end based on a choice of


React wrappers. It is also well-integrated with Lighttable and Emacs/Cider.

Chestnut's general philosophy is minimalistic, with just enough support to


help beginners get started and to give a reasonable configuration for experienced
developers too. It tries not to be too opinionated.

Duct https://github.com/duct-framework/duct

Luminus https://github.com/luminus-framework/luminus-template

Luminus is a Clojure micro-framework based on a large set of lightweight libraries.


It aims to provide a robust, scalable, and easy-to-use platform.

Luminus does not offer a strong philosophy in any particular direction. Rather,
it focuses on packaging many of the best libraries from the Clojure ecosystem and
bringing them together in easy-to-use packaging.

[meta]

[meta] is an attempt at building the fastest path from idea to startup.


It provides both an App Stack as well as a App Framework.
Declarative and Generative applications can be built which enable reuse of features across deployments of [meta].

Including Commercial Support + Automated Builds available from Degree9.

Mies
Minimal ClojureScript template.

Pedestal https://github.com/pedestal/pedestal

Pedestal is a set of libraries that focuses primarily on the server side of client/server
applications.

Released by Cognitect, Pedestal very strongly shows the philosophy of "simple" vs.
"easy", with a strong focus on features that help create enterprise-level server
products.

Many best-practice speed and security decisions are built-in.


Much of the system is data-driven.

Reagent https://github.com/reagent-project/reagent-template

Full-featured and opinionated template for client/server apps based on Reagent.


Always includes a rich set of libraries, including devcards, Reagent forms, etc.

Reagent-Figwheel https://github.com/gadfly361/reagent-figwheel

Library based on Reagent and Figwheel, with support for high-level


components like Firebase, Keechma, and Petrol.

Reagent Frontend https://github.com/reagent-project/reagent-frontend-template

Simple template for a front-end-only (no server) Reagent project

Reagent-Seed 2

Emacs-based development

Re-frame https://github.com/Day8/re-frame-template

While re-frame is a library supported by some of the other frameworks, it is also


packaged as a framework itself.

The re-frame framework is focused on creating mostly-client re-frame-based React


ClojureScript applications. It supports mixing in several other relevant libraries useful
for this kind of project.

Tenzing https://github.com/martinklepsch/tenzing
Minimalist clojurescript single page application template. Tenzing uses Boot instead of
Leiningen to provide a figwheel like auto-compilation workflow. You can use flags to
set Tenzing up with om, rum, or reagent for your rendering needs. It offers the option
to use different css styling frameworks like sass, less, or garden. Optional testing
environment and integration to chrome devtools or dirac.

Vase https://github.com/cognitect-labs/vase

Vase is a data-driven way to describe HTTP APIs backed by Datomic. It runs on top
of Pedestal.

Fulcro https://fulcrologic.github.io/fulcro
Age 2.5 years
Active? Yes Over 400 commits in first 8 months of 2017
Support? Slack
(previously known as Untangled)
Fulcro is an ecosystem of libraries that provide a one-stop solution for full-stack web development with Clojure and Clojurescript.
Built on top of Om Next, it provides a complete solution for reactive, single-page, full-stack, data-driven web applications, including:
co-located UI queries that can drive server interactions, full-stack mutations that encapsulate abstract changes for the client
and server, gettext-based i18n with (optional) dynamic locale loading, and tools for UI (i.e. HTML5) routing. It also includes Twitter Bootstrap wrappers and forms support
that provides easy integration with back-ends, can generate minimal submission deltas, has extensible validation, and custom form-field support (anything you can imagine can be a form-field).
The new enhanced code-splitting support in Clojurescript is already leveraged via dynamic UI routing that can auto-load modules of your application on demand.
The Om Next basis means that the query language is a subset of Datomic pull syntax, which is easy to understand and process, but has the added advantage of being
directly usable against a Datomic database.
Server-side rendering is supported, and clearly demonstrated with HTML5 routing in the fulcro-template. The concrete state management makes it
tractable (often trivial) to pregenerate any client-side state on the server and pre-render it (imagine pre-rendering a complex input form for a logged-in user).
It works with stock React components written in Javascript, so it is possible to integrate with 3rd-party react component libraries; however,
server-side rendering is limited to components written in CLJC, which is related to limitations of the JVM. It is possible to code palceholders for external components as a workaround.
It provides both quick-start and modular server components that enable getting running quickly, while also being fully extensible and pluggable for 3rd party module developers. The coding model
on the server matches the model on the client, dramatically simplifying development tasks. The data model for the client is a fully-normalized
immutable database that enables time-travel, an included support VCR viewer, and clear loading semantics. The documentation includes
a detailed interactive developer's guide, tutorial videos, reference materials, a full-stack template, and live demos.

Precept https://github.com/CoNarrative/precept

Precept is a framework for creating reactive web applications using a rules engine, declarative logic, and relational data modeling.

Edge https://github.com/juxt/edge
Features of Clojure/ClojureScript Web Frameworks
Arachne Chestnut Duct Luminus Mies Pedestal Reagent Reagent-Figwheel Reagent-Frontend Reagent-Seed Re-frame Tenzing Untangled Vase Ratatouille

License Eclipse Public MIT MIT Eclipse Public Eclipse Public MIT MIT MIT MIT MIT Eclipse Public MIT Eclipse Public Eclipse Public
Maintainer Arne Brasseur James Reeves Dmitri Sotnikov
David Nolen Cognitect Inc. Dmitri Sotnikov Mathew Jaoudi Dmitri Sotnikov Mathew Jaoudi Mathew Jaoudi Martin Klepsch Cognitect Inc. Vincent Cantin
URL http://arachne-framework.org
https://github.com/plexus/chestnut
https://github.com/duct-framework/duct
https://github.com/luminus-framework/luminus-template
https://github.com/swannodette/mies
https://github.com/pedestal/pedestal
https://github.com/reagent-project/reagent-template
https://github.com/gadfly361/reagent-figwheel
https://github.com/reagent-project/reagent-frontend-template
https://github.com/gadfly361/reagent-seed
https://github.com/Day8/re-frame-template
https://github.com/martinklepsch/tenzing
https://github.com/untangled-web/untangled-template
https://github.com/cognitect-labs/vase
https://github.com/green-coder/ratatouille
Leiningen or Boot? Leiningen Leiningen Leiningen Leiningen Leiningen Leiningen Boot or Leiningen Leiningen

Features (note: blank fields may reflect gaps in my knowledge, rather than missing features)
Category Name Details
auth 伙伴 Dep / auth中间件 “+ AUTH
auth 好友+玩过 Dep/auth middleware + auth-play
auth OAuth的 OAuth support “+的OAuth
config 流血边缘的libs Use latest libs, even snapshots +bleeding-edge
config 靴 引导而不是莱宁根 +boot
config Latest libs Use latest stable/alpha/beta libs +edge
CSS Garden Garden CSS generation +garden +garden (default) +garden +garden +garden
CSS Less Less CSS generation +less +less +less +less +less
CSS SASS/SCSS SASS CSS generation +sass +sassc +sass +sass
database Datomic +datomic (default)
database Firebase Matchbox lib for Firebase 2.4.1 +firebase
database H2 +h2
database MongoDB Popular noSQL DB +mongodb
database MySQL/MariaDB +mysql
database PostgresSQL +postgres
deploy Docker Generate/use Docker instances (default)
deploy Heroku Deploy to Heroku (default) (default) (default)
deploy +war
dev/test Cider Emacs CIDER nREPL plug-in +cider +cider +cider (default) +cider
dev/test Cljs-devtools Chrome console integration +devtools (default) (default) +devtools
dev/test dirac Featureful fork of Chrome devtools +dirac
dev/test cljs-test Boot-based testing library +test
dev/test conduct code Code of Conduct +coc
dev/test Cucumber “+黄瓜
dev/test Devcards CLJS interactive visual REPL +devcards +devcards (default) +devcards
dev/test Figwheel Live coding in browser (default) +cljs (default) (default) (default) (default) (default) (default)
dev/test Kibit Static code analyzer +kibit
dev/test Re-frisk Real-time view of React data +re-frisk +re-frisk
dev/test speclj Testing support +spec
dev/test Test and Doo Testing support +test +test (default) +test
docs Swagger API documentation/access +swagger
docs Add swagger, remove static assets +service
framework WAR archives for Tomcat (default)
framework Keechma Web-app framework +keechma
framework Luminus CLJ/CLJS micro-framework (default)
framework Pedestal Pedestal client/server framework (default) (default)
framework Petrol Web-app framework +petrol
front-end Accountant Secretary extensions for SPAs (default)
front-end ClojureScript (default) +cljs (default) (default) (default) (default) (default) (default) +cljs
front-end Hoplon CLJS dataflow and RPC +hoplon
front-end Secretary Client-side routing (default) +routes (default) +routes
front-end Template for CLJS+db +site
React no library Don't include any React lib +vanilla (default)
React Om Opinionated React (default) +om
React Om Next Opinionated React +om-next
React Re-com React UI widget set +re-com
React re-frame Opinionated React +re-frame +re-frame (default) +re-frame
React Reagent CLJS React +reagent +reagent (default) (default) (default) (default) +reagent +reagent
React Reagent forms Reagent data binding (default)
React Reagent utils Reagent sessions, cookies, etc. (default)
React Rum Opinionated React +rum +rum
server Aleph +aleph
server Compojure Server-side routing (default) (default) (default) +handler
server CORS support security support (default)
server hiccup Server-side HTML templating (default)
server HTTP Kit Alternative server +http-kit +http-kit
server Jetty Alternative server +jetty (default)
server prone Ring exception reporting (default)
server ring HTTP interface (default)
server site-middleware Session, CSRF +site-middleware (default)
Discussion/random/unsorted page
Please use this page for questions and comments that don't really belong anyplace else yet

See Also
Guide to back-end web frameworks:
https://lemonteaa.github.io/misc/2017/09/14/a-quick-note-on-the-clojure-backend-web-space.html

Potrebbero piacerti anche