Get Started

Using ClojureScript

Note: ClojureScript is not officially supported by the Expo team, this guide was written by @tiensonqin!


If you're already convinced about ClojureScript and Expo and know what to do once you have figwheel running, you can just read this section. Otherwise, we encourage you to read the entire guide.
lein new expo your-project

cd your-project && yarn install

lein figwheel

# Now in a new tab, open the project in a simulator
expo start --ios

  • First-class immutable data structures
  • Minimizing state and side-effects
  • Practicality and pragmatism are always core values of ClojureScript
  • Lisp!
  • Great JavaScript interoperability

It all begins with a Simple Made Easy design choice: you don't write native code.
  • You only write ClojureScript or JavaScript.
  • You don't have to install or use Xcode or Android Studio or deal with any of the platform specific configuration and project files.
  • Much easier to upgrade when there is no native code involved -- React Native JavaScript APIs are relatively stable compared to the native side. Expo will take care of upgrading the native modules and React Native versions, you only need to upgrade your ClojureScript or JavaScript code.
  • You can write iOS apps on Linux or Windows (provided that you have an iPhone to test it with).
  • It's dead simple to continually share your apps. Once you published your app, you got a link. It is up to you to share the link.

# Default to use Reagent / Re-frame
lein new expo your-project

# Or Om Next
lein new expo your-project +om

cd your-project && yarn install

lein figwheel

  1. Invoke cider-jack-in.
  2. Run (start-figwheel) in the connected REPL.

Cursive REPL

The first time you connect to the repl, you'll need to create a Leiningen nREPL Configuration unless you have one already.
  1. Click Run->Edit configurations.
  2. Click the + button at the top left and choose Clojure REPL.
  3. Choose a Local REPL.
  4. Enter a name in the Name field (e.g. "REPL").
  5. Choose the radio button Use nREPL with Leiningen.
  6. Click the OK button to save your REPL config.
Once this is done, you can connect to the REPL.
In IntelliJ make sure your REPL config is selected and click the green play button to start your REPL.
Run (start-figwheel) in the connected REPL.

# Install Expo CLI if you have not already
npm install -g expo-cli

# Connect to iOS simulator
expo start --ios

# Or connect to Android devices or simulators
expo start --android
For more information, see Expo CLI.

# Generate main.js
lein prod-build

eas update
This will publish your app to a persistent URL on Expo, for example:

It's still experimental, but it already works for multiple projects.


React Native uses JavaScriptCore, so modules using built-in node like stream, fs, etc wont work. Otherwise, you can just require like: (js/require "SomeModule").

No, you do need to reload JavaScript. To do that, select Reload from the Developer Menu. You can also press Cmd ⌘ + R in the iOS Simulator, or press R twice on Android emulators.

Not currently, but we are working on it.