Pine is an Elm development toolchain and runtime built on .NET. It combines editor tooling, compilation and testing tools, and hosting for Elm web services.
At its core is the Pine language, a side-effect-free compilation target designed for meta-programming. Frontend compilers translate Elm into Pine expressions, which the .NET runtime evaluates. Hosting infrastructure manages external interactions and persistence of application state.
The repository includes:
- Elm language server and VS Code extension.
- Elm Editor cloud IDE.
- .NET-based virtual machine and runtime for programs without side-effects.
- Tools to build Elm apps and compile to Pine code.
- CLI tools to format Elm code and run Elm tests.
- Web server, database management system and admin interface for Elm-based web services.
- Develop Elm in VS Code: install the Pine extension.
- Try the browser IDE: open Elm Editor.
- Use the CLI or host an Elm web service: follow the installation and server example below.
- Understand the runtime: read the Pine language guide.
Download the pre-built Pine binary for your platform at https://pine.build/download, or on the releases page on GitHub.
The pine executable file integrates all functionality to build apps and operate web services.
After extracting the download, run ./pine install from its directory on Linux or macOS
(or .\pine.exe install on Windows). On Linux and macOS this installs a copy in
~/.local/bin without administrator rights. If that directory is not on your PATH,
the command prints the shell setup needed to use pine from any directory.
Put ~/.local/bin before older Pine installations on PATH if you have one.
On Windows, the command adds the extracted executable's directory to your user PATH;
keep that directory in place after installing.
The command below runs a server and deploys a full-stack web app:
pine run-server --public-urls="http://*:5000" --deploy=https://github.com/pine-vm/pine/tree/3a5c9d0052ab344984bafa5094d2debc3ad1ecb7/implement/example-apps/docker-image-default-appOnce the server has started, open http://localhost:5000/ to see the example app's landing page. Press Ctrl+C to stop the server.
This command does not configure persistent storage. For deployment and persistence options, see Configuring and deploying an Elm backend app.
To deploy a web service in a Docker container, use the pine-vm/pine image from the GitHub Container Registry (ghcr.io/pine-vm/pine). The tags are aligned with the version IDs in the CLI executable file.
For a local demonstration, bind both published ports to loopback:
docker run -p 127.0.0.1:5000:80 -p 127.0.0.1:4000:4000 --env "APPSETTING_adminPassword=test" ghcr.io/pine-vm/pine- http://localhost:5000/ serves the bundled placeholder app (container port
80). - http://localhost:4000/ serves the admin interface for deployments and application management (container port
4000).
The admin password test is for this local demonstration only. Before exposing the service beyond your machine, use a strong admin password and restrict access to the admin interface. For persistent deployments, mount a Docker volume at /pine-vm/process-store.
A selection of guides on popular topics:
For an overview of all guides and documentation, see the guide directory.
- Manually Applying Elm Functions On An Online Database Using Pine: https://youtu.be/9mFjdf_ABNM
The rich chat room example app demonstrates features typically found in a chat app, such as user names, message rate-limiting, sound effects, etc. For a detailed description of this app, see the readme file at https://github.com/pine-vm/pine/blob/main/implement/example-apps/rich-chat-room/README.md
Elm Editor is a web app for developing Elm programs.
As an integrated development environment, it assists us in reading, writing, and testing Elm programs and in collaborating with other developers.
To see Elm Editor in action, check out the public instance at https://elm-editor.com
To learn more about Elm Editor, see https://github.com/pine-vm/pine/tree/main/implement/example-apps/elm-editor/README.md
For more example apps, see the example-apps directory