Skip to content

luminus-framework/luminus-template

Repository files navigation

Luminus-Template

Clojars Project

A Leiningen template for projects using Luminus.

The template initializes a base Luminus application.

Requirements

Luminus requires Leiningen version 2.5.3+

Usage

The Luminus template ships out of the box with your latest Leiningen. Run the following command to create a new Luminus project which uses the default profile template:

lein new luminus <your project name>

However, if you would like to attach further functionality to your template you can append profile hints for these extended features:

Profile Category Description Compare
+aleph server adds the Aleph server diff
+http-kit server adds the fast HTTP Kit web server to the project diff
+immutant server adds the immutant web server to the project. Note: this project is no longer funded/maintained diff
+jetty server adds the jetty web server to the project diff
+undertow server adds the ring-undertow server. This is a default server. diff
+h2 database adds db.core namespace and H2 database dependencies diff
+postgres database adds db.core namespace and PostgreSQL database dependencies diff
+mysql database adds db.core namespace and MySQL/MariaDB database dependencies diff
+mongodb database adds support for MongoDB using the Monger library diff
+datomic database adds support for the Datomic database diff
+sqlite database adds support for the SQLite database diff
+xtdb database adds support for the XTDB database diff
+graphql service API adds GraphQL support using Lacinia diff
+swagger service API adds support for Swagger-UI diff
+service service API removes static assets and the layout, adds Swagger support diff
+cljs ClojureScript adds ClojureScript support to the project diff
+reagent ClojureScript adds ClojureScript support with Reagent to the project along with an example diff
+re-frame ClojureScript adds ClojureScript support with re-frame to the project along with an example diff
+kee-frame ClojureScript adds kee-frame to the project diff
+shadow-cljs ClojureScript adds shadow-cljs support to the project, replacing the default cljsbuild and figwheel setup diff
+boot misc causes the project to run with Boot instead of Leiningen diff
+auth misc adds Buddy dependency and authentication middleware diff
+auth-jwe misc adds Buddy dependency with the JWE backend diff
+oauth misc adds OAuth dependency diff
+hoplon misc adds ClojureScript support with Hoplon to the project diff
+cucumber misc adds support for browser based UI testing with Cucumber and clj-webdriver diff
+sassc misc adds support for SASS/SCSS files using SassC command line compiler diff
+war misc adds support of building WAR archives for deployment to servers such as Apache Tomcat (should NOT be used for Immutant apps running on WildFly) diff
+site misc creates template for site using the specified database (H2 by default) and ClojureScript diff
+kibit misc adds lein-kibit plugin diff
+servlet misc adds middleware for handling Servlet context diff
+basic misc generates a bare bones luminus project diff
+async misc support for async (= 3 argument) ring handlers

To add a profile simply pass it as an argument after your application name, e.g.:

lein new luminus myapp +cljs

You can also mix multiple profiles when creating the application, e.g.:

lein new luminus myapp +auth +postgres

To build as a executable Java ARchive (JAR) standalone, run the following command:

lein uberjar

Or if using the +boot profile:

boot uberjar

To run the resulting standalone executable .jar file, do as you would with any other:

user$ java -jar target/myapp.jar
15-Sep-14 16:06:21 APc47d.4f39.65e6.uhn.ca INFO [myapp.handler] -
-=[myapp started successfully]=-
16:06:21.685 INFO  [org.projectodd.wunderboss.web.Web] (main) Registered web context /
15-Sep-14 16:06:21 APc47d.4f39.65e6.uhn.ca INFO [myapp.core] - server started on port: 3002

Performance Testing

The app can be stress tested by running the Apache benchmark command:

ab -c 10 -n 1000 http://127.0.0.1:3000/

The memory and CPU usage can be inspected by running either jconsole or jvisualvm and attaching them to a running Luminus server.

Async Ring Handlers

Using async ring handlers is possible but adds another layer of complexity. If things go wrong you'll see a blank screen, possibly without any error message.

The server (undertow, jetty, servlet) and every middleware in the chain has to support async request handling.

To enable: add :async? true to your config maps.

Tested combinations:

Other Templates

There is also a public comparison chart of the common templates.

License

Copyright © 2016 Dmitri Sotnikov

Distributed under the MIT License.