Learn Reagent

Learn simple, clean, and robust way to build SPA (Single-Page Applications) with ClojureScript & Reagent. Build GIGGIN an app that shows local gigs. Step-by-step, component-by-component we'll learn how to build SPAs with ClojureScript. We'll work with remote API. Learn how easy it is to interop with JS and npm and much more … . This video course will take you from zero to deployment in a few afternoons.

Why ClojureScript and Reagent?


Remove complexities from your code.

CLJS ⁝ Reagent
  (ns counter
    (:require [reagent.core :as r]))

  (def click-count (r/atom 0))

  (defn counting-component
      "The state has a value: " @click-count
       {:type "button"
        :value "Click me!"
        :on-click #(swap! click-count inc)}]])
JS ⁝ React
  import React, { Component } from 'react'

  class Counter extends Component {
    constructor(props) {
      this.state = { clickCount: 0 };
      this.incCounter = this.incCounter.bind(this);

    incCounter() {
      this.setState(prevState => ({
        clickCount: prevState.clickCount + 1

    render() {
      const { clickCount } = this.state
      return (
          The state has a value: {clickCount}
            value="Click me!"

  export default Counter


Effortless integration via shadow-cljs
with JavaScript and npm.

  npm install --save firebase
  (ns fb.init
    (:require ["firebase/app" :as firebase]))

  (defn firebase-init
      #js {:apiKey      "your-api-key"
           :authDomain  "your-auth-domain"
           :databaseURL "your-database-url"
           :projectId   "your-project-id"}))
  import firebase from 'firebase/app';

  const firebaseInit = firebase.initializeApp({
    apiKey:      'your-api-key',
    authDomain:  'your-auth-domain',
    databaseURL: 'your-database-url',
    projectId:   'your-project-id'
  export default firebaseInit;


Sturdy build tools.
ClojureScript uses Google Closure Tools
for code minification and tree shaking.
Who else uses Closure Library?


Clear and in detail error messages with shadow-cljs,
leaving no room for confusion or doubt.

error messages in shadow-cljs


Convenient plugins for all major editors.


Free 0 €

Get the Free Course
First 12 HD videos
Source code for each video
Project setup with shadow-cljs, GitHub …
Application overview
Reagent components
Immutable Data Structures
Building app structure
Higher order functions: map, reduce …
List comprehension
Reagent events

Pro 129 €

Get the Pro Course
Everything in Free plus additional 16 HD videos
Threading macros
Working with modals
AJAX requests in ClojureScript
Transforming data structures
Working with forms
Using npm packages
JavaScript interop
Configuring Firebase
Using Realtime Database
Setting up Authentication
Production Build
And much more …


What will I learn?

The focus is on ClojureScript and Reagent. We'll not touch any CSS nor create any endpoints, everything is taken care of.

Are these courses right for my skill level?

If you have any experience with Web Development (HTML, CSS, JS) you won't have any problems picking up ClojureScript with Reagent. You will be surprised how much simpler, in setup and use, it is compared to JavaScript.

How long do I have access to the course?

How does lifetime access sound? After enrolling, you have unlimited access to this course for as long as you like - across any and all devices you own.

What if I am unsatisfied with the course?

We believe that after watching some of the Free videos you will get pretty good feel about the course. That said, if you are unsatisfied with your purchase, get in touch—we are able to provide full refund within a short time after your purchase.

How long are the courses?

Free is 1h 07m and Pro is 3h 14m minutes.

How is this course different?

Where most of the courses focus on some parts of a language or a library, this course is presented in the form of building an app. We focus on building and shipping things—learning by doing.

Does this course support Open Source?

Yes! By buying this course you are supporting Open Source Projects. 10% of profits will be transferred to Clojurists Together to fund critical Clojure and ClojureScript open source projects.

Is it best practice?

Yes! The content of the course has been reviewed by experts: Juho Teperi (GitHubTwitter), Thomas Heller (GitHubTwitter), and Daniel Compton (GitHubTwitter).

Who created this course?

Jacek Schae (GitHubTwitter) is a software developer based in Switzerland. During his quest to write better software he found Clojure and ... was puzzled. How come such a small amount of people in Web Dev talks about it? Since then he couldn't stop thinking how he could support the Clojure community to spread the word about all sublime ideas in Clojure.

I have another question …

Please get in touch!


What people are saying about the course?

I watched the first 6 videos now and I'm really liking it. Your explanations are very good, and I like how you show multiple ways of doing things (map vs list comprehension)

Up until this point no Clojure experience is necessary as every thing introduced is explained. I even went for the pro package :)

Shidima source: reddit

Had a brief look at @JacekSchae's free course on ClojureScript and Reagent, quality materials there. Go see it now https://www.jacekschae.com/learn-reagent-free … Cool thing is that part of the Pro course price goes to support OSS projects in @cljtogether org

Roman Liutikov source: twitter

… Thanks for a great course. I have toyed with clojurescript but needed a bit more guidance around best practice before actually using it in anger.

In particular, I would not have known shadow-cljs was such a great choice over lein.

Connecting with firebase sealed the deal for me. Already got a real app underway. …

Rory C. source: email

… Helped a non-frontend person like me get up to speed in the world of frontend apps.

Thanks for putting together a great set of video tutorials to get started with Reagent and wow audiences with the power of React! …

Avram A. source: email

I finished the course a couple of days ago. Just wanted to say I found it awesome.

One thing I would have liked to see is more of the workflow using the repl. On the one hand I really appreciated how straight forward it seemed you getting to every point, but on the other hand I'd like to see the 'experimentation' on the repl while evolving an app.

Thanks for the great experience.

Diego R. Q. source: email

Awesome course on Reagent/ClojureScript https://www.jacekschae.com/learn-reagent-free … following this surprised me, with new knowledge, easy & cool ways I can approach ReactJS with functional clojurescript magic.

Kudos @JacekSchae #reactjs + #Clojure = Wonders

Dan Jay source: twitter