Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


A ClojureScript REPL into embedded JavaScriptCore on iOS, macOS, and tvOS.

Ambly is a REPL designed for use when developing hybrid ClojureScript / native apps.

Ambly comprises a ClojureScript REPL implementation, along with Objective-C code interfacing JavaScriptCore.

An iOS, macOS and tvOS demo apps are included, making it easy to give the REPL a spin.

pod "Ambly", "~> 1.11.0"

Clojars Project



You must have Xcode installed as well as support for CocoaPods. You must have Java 8 or later installed along with the Clojure CLI tools.

Demo iOS and tvOS Apps

In ambly/ObjectiveC/Ambly Demo run pod install.

Open Ambly Demo.xcworkspace in Xcode and run the app in the simulator or on a device.

You'll need to choose a team in the 'Ambly Demo' target settings (and set the Bundle Identifier to something compatible with your team).

Demo macOS App

You can either build the Ambly Demo CLI project and install it, or download a prebuilt macOS binary from


You can start the Ambly REPL by supplying -re ambly as an option to cljs.main.

Here is a sample REPL startup sequence, illustrating device auto-discovery:

$ clj -m cljs.main -ro '{:choose-first-discovered false}' -re ambly -r

Ambly binding to for mDNS.

[1] Ambly Demo on iPod touch
[2] Ambly Demo on iPad
[3] Ambly Demo on iPhone Simulator (My-Mac-Pro)
[4] Ambly Demo TV on Apple TV

[R] Refresh

Choice: 1

Connecting to Ambly Demo on iPod touch ...

To quit, type: :cljs/quit
cljs.user=> (+ 3 4)

Note: See Connectivity for details, should any networking difficulty arise.

REPL Options


Determines whether the Ambly will attempt to automatically connect the first device discovered. Defaults to true.


clj -m cljs.main -ro '{:choose-first-discovered false}' -re ambly -r


Specifies the address that Ambly binds to when using multicast DNS to search for devices.

clj -m cljs.main -ro '{:mdns-bind-address ""}' -re ambly -r

App Integration

See Integrating Ambly into Your App for details.

An example using Ambly to drive Ejecta is at ClojureScript Ejecta.

Source for an example iOS app that makes use of Ambly is Shrimp.


Ambly™ Copyright © 2015–2022 Mike Fikes and Contributors

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.