Hybrid textual and visual functional programming.
Switch branches/tags
Clone or download
Failed to load latest commit information.
.github Update checklist in pull request template Oct 5, 2018
build-config/backend Searcher displays functions sorted on usefulness instead of sorting t… Nov 15, 2018
config Remove unused luna-studio plugins #1170 (#1185) Oct 8, 2018
env Fix addProperty for Geo Features Nov 16, 2018
libs Searcher displays functions sorted on usefulness instead of sorting t… Nov 15, 2018
luna-studio Revert "Basic heuristic for searcher to figure out if constructor sho… Nov 16, 2018
resources add linux set of logos (#671) Jan 15, 2018
runner Prefix all luna executable names with "luna-" (#1182) Oct 8, 2018
scripts_build Add -fexternal-interpreter flag on windows (#1259) Nov 8, 2018
supervisor Prefix bus-logger with 'luna-' (#1194) Oct 10, 2018
tools/batch/plugins Prefix all luna executable names with "luna-" (#1182) Oct 8, 2018
windows More verbose logs on Windows (#1273) Nov 15, 2018
.gitignore Add folder scripts to .gitignore Oct 9, 2017
.stylish-haskell.yaml Standard for tests in luna-studio backend (#1150) Oct 1, 2018
CONTRIBUTING.md Added contributor guidelines for Luna Studio. (#804) Feb 6, 2018
LICENSE Create LICENSE Jan 15, 2018
README.md Update README.md Apr 20, 2018
bootstrap.hs Update bootstrap.hs (#1257) Nov 8, 2018
build.bat [build] Make direct invokation of luna-shell unnecessary (#426) Oct 26, 2017
build_luna Rename build script to match changes in luna/luna Apr 3, 2018
luna-package.yaml Update package libs, adding libffi.so.7 and libtinfo.so.5 Jul 20, 2018
requirements.txt [build] Make direct invokation of luna-shell unnecessary (#426) Oct 26, 2017


Luna Studio

Visual and textual functional programming language with a focus on productivity, collaboration and development ergonomics.

Luna is a developer’s whiteboard on steroids. Design, prototype, develop and refactor any application simply by connecting visual elements together. Collaborate with co-workers, interactively fine tune parameters, inspect the results and visually profile the performance in real-time.

Visit luna-lang.org to learn more!

Quick installation

The easiest way of installing Luna Studio is by using the graphical Luna Installer, which can be downloaded using the following links:

All you need to do is download and extract the zip and run the application. It will then guide you through the installation process.

Using Luna Studio

For a tutorial, documentation, explanation of the ideas behind Luna please visit http://docs.luna-lang.org. It is available in a form of a book, to provide a gentle and fairly complete introduction to the application as well as the new visual-textual paradigm.

Hacking on Luna Studio

Luna's build system is nice and simple, allowing you to bootstrap the compiler as long as you have an installation of

The Haskell Stack and the Haskell parser generator happy.

You can install the latter just by running stack install happy, which should build the tool for your system and put it in your stack binary folder.

System Requirements

While Luna Studio supports Windows as a target operating system, it is not currently possible to develop the Luna Studio frontend on Windows. This is due to the current lack of support by GHCJS for Windows at the current time.

Otherwise, you should be able to develop Luna Studio on reasonably new Linuxes and MacOS. Luna Studio was mostly tested on Ubuntu >= 14.04, Fedora >= 23, MacOS >= 10.11 (El Capitan) and Windows 10, although it should run fine on all Linux distros like Mint, Debian or Arch. Please report any issues here on GitHub or shoot an email to contact@luna-lang.org.

Bootstrapping for Development

To develop Luna Studio, the installation process is quite involved. First of all, you will need the Luna Manager, which can be obtained from the linked repository.

The prerequisites for building Luna Studio are the following (with Ubuntu apt-get package names in parentheses for convenience):

  • wget
  • gcc, g++, make (build-essential)
  • libffi (libffi-dev)
  • libgmp (libgmp-dev)
  • xz-utils
  • zlib (zlib1g-dev)
  • git
  • gnupg
  • ZeroMQ >= 4 (which, interestingly, is libzmq3-dev on Ubuntu)
  • libpng (libpng-dev)
  • openssl
  • SetupTools for Python (python-setuptools)
  • libssl (libssl-dev)
  • libtinfo (libtinfo-dev)
  • pkg-config
  • alex
  • PIP for Python (python-pip)

Once you are sure that you have the prerequisites installed, you can proceed to the environment setup. Assuming that you already have the luna-manager binary on your system and available on your $PATH, the command is the following:

luna-manager develop luna-studio

This will install Luna Studio, along with some dependencies (e.g. the Haskell ecosystem) to $HOME/luna-develop/apps/luna-studio. If you wish to install to a different location, please supply an additional --path argument to the develop command. From now on, we will refer to this location as $LUNA_STUDIO_REPO.

Once the develop command finishes executing, you are ready to start developing Luna Studio. To rebuild the whole application use:


You can choose to rebuild only the frontend or backend part by passing an additional flag (--frontend or --backend respectively).

To run the application in developer mode, use:

$LUNA_STUDIO_REPO/dist/bin/main/luna-studio --develop


Below are a couple of common errors and their resolution steps:

  • If during the development process you encounter errors related to missing files (caused by accidental removal of a dependency, for example) you can try to execute the following:
luna-manager develop luna-studio --path $LUNA_STUDIO_REPO --download-dependencies
  • [Linux] The application image requires FUSE to run. While most Linux distributions have it pre-installed, it is sometimes missing. If your distro happens to lack FUSE, you can either install it, or use the following command to mount the app image manually:
sudo mount -o loop Some.AppImage /mnt

Contributing to Luna Studio

If you are interested in contributing to the development of Luna, please read the CONTRIBUTING.md file.


This repository is licensed under the GNU Affero GPL 3.0, as specified in the LICENSE file.

Please be aware that, as the commercial backing for Luna, New Byte Order Sp. z o. o. reserves the right under the CLA to use contributions made to this repository as part of commercially available Luna products.

If these terms are unacceptable to you, please do not contribute to the repository.

The Contributor License Agreement

As part of your first contribution to this repository, you need to accept the Contributor License Agreement. You will automatically be asked to sign the CLA when you make your first pull request.

Any work intentionally submitted for inclusion in Luna shall be licensed under this CLA.

The CLA you sign applies to all repositories associated with the Luna project (Luna, Luna RFCs, etc), so you will only have to sign it once at the start of your contributions.