Get Started

Try Online

Not everyone wants to get installed all at once, so you can follow along in this guide with the online editor. You will not have the REPL for the “Core Language” section, but everything else will work just fine!

You can see the online editor in action with these examples of small Elm programs.

Install

You can also just install the “Elm Platform” which includes all the command line tools you will need to work with Elm.

We will go through each tool that comes with Elm Platform lower on this page!

Configure Your Editor

We know of Elm syntax highlighting modes for at least the following text editors:

If you do not have an editor at all, Sublime Text is a great one to get started with!

Troubleshooting

The fastest way to learn anything is to talk with other people in the Elm community. We are friendly and happy to help! So if you get stuck during installation or encounter something weird, visit the Elm Slack and ask about it. In fact, if you run into something confusing at any point while learning or using Elm, come ask us about it. You can save yourself hours. Just do it!

What is the Elm Platform?

After installing Elm successfully, you will have the following command line tools available on your computer:

Each one has a --help flag that will show more information. Let's go over them here though!

elm-repl

elm-repl lets you play with simple Elm expressions.

$ elm-repl
---- elm-repl 0.17.1 -----------------------------------------------------------
 :help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> 1 / 2
0.5 : Float
> List.length [1,2,3,4]
4 : Int
> List.reverse ["Alice","Bob"]
["Bob","Alice"] : List String

We will be using elm-repl in the upcoming “Core Language” section, and you can read more about how it works here.

Note: elm-repl works by compiling code to JavaScript, so make sure you have Node.js installed. We use that to evaluate code.

elm-reactor

elm-reactor helps you build Elm projects without messing with the command-line too much. You just run it at the root of your project, like this:

git clone https://github.com/evancz/elm-architecture-tutorial.git
cd elm-architecture-tutorial
elm-reactor

This starts a server at http://localhost:8000. You can navigate to any Elm file and see what it looks like. Try to check out examples/1-button.elm.

Notable flags:

  • --port lets you pick something besides port 8000. So you can say elm-reactor --port=8123 to get things to run at http://localhost:8123.
  • --address lets you replace localhost with some other address. For example, you may want to use elm-reactor --address=0.0.0.0 if you want to try out an Elm program on a mobile device through your local network.

elm-make

elm-make builds Elm projects. It can compile Elm code to HTML or JavaScript. It is the most general way to compile Elm code, so if your project becomes too advanced for elm-reactor, you will want to start using elm-make directly.

Say you want to compile Main.elm to an HTML file named main.html. You would run this command:

elm-make Main.elm --output=main.html

Notable flags:

  • --warn prints warnings to improve code quality

elm-package

elm-package downloads and publishes packages from our package catalog. As community members solve problems in a nice way, they share their code in the package catalog for anyone to use!

Say you want to use evancz/elm-http and NoRedInk/elm-decode-pipeline to make HTTP requests to a server and turn the resulting JSON into Elm values. You would say:

elm-package install evancz/elm-http
elm-package install NoRedInk/elm-decode-pipeline

This will add the dependencies to your elm-package.json file that describes your project. (Or create it if you do not have one yet!) More information about all this here!

Notable commands:

  • install: install the dependencies in elm-package.json
  • publish: publish your library to the Elm Package Catalog
  • bump: bump version numbers based on API changes
  • diff: get the difference between two APIs

results matching ""

    No results matching ""