Skip to content

pine-vm/pine

Repository files navigation

Elm Full-Stack

In this repository, I share what I learn about building full-stack apps using the Elm programming language. This approach emerged out of the development of online multiplayer video games like DRTS.

In these applications, backend and frontend share an understanding of game mechanics and the game world. (Changes in these shared functionalities need to be synchronized between backend and frontend implementation.) Frontend and backend implementations use the same Elm modules for the common parts which need to be kept consistent. The tests run by elm-test also integrate backend and frontend for automated integration tests.

This repository also contains the implementation of the Elm-fullstack web host, tooling, and the command-line interface. These software components implement common non-app specific functionality, such as:

  • Persistence: The framework automatically persists the state of your app, including events in the backend Elm app, deployments of new app configurations, and migrations. To learn more about this functionality, see the guide on persistence in Elm-fullstack.
  • Mapping HTTP requests to Elm types in the backend so that we can work with a strongly typed interface.
  • Generating the functions to serialize and deserialize the messages exchanged between frontend and backend.
  • Atomic backend state migrations: Model your backend state migrations with an Elm function that maps from the previous backend state type to the new one. The framework uses this function to migrate the backend state during deployment.
  • HTTPS support: Choose a list of domains, and the server automatically acquires and renews an SSL certificate from Let's Encrypt.
  • Rate-limit HTTP requests to the backend app.

Getting Started

See the guide How to Configure and Deploy an Elm-Fullstack App.