Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact c778bbd7deb06b843f64e2cdf6b77e42d1985c43f3440909a76569db79903b45:


# Quick start

## Start your first project

Nova is a *lightweight* and *modern* web framework for the BEAM VM, with full support for **Erlang**, **Elixir**, and **LFE**. It’s designed to help you build scalable, maintainable web applications with minimal setup. Whether you're new to BEAM languages or an experienced developer, Nova gives you a clean foundation to start building right away.


### Erlang approach

> #### Important
>
> If you require help installing Erlang and/or rebar3 please check [https://adoptingerlang.org/docs/development/setup/](https://adoptingerlang.org/docs/development/setup/)

#### Automated installation

*Via Curl*

```bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/novaframework/rebar3_nova/master/install.sh)"
```

*Via wget*
```bash
sh -c "$(wget -O- https://raw.githubusercontent.com/novaframework/rebar3_nova/master/install.sh)"
```

#### Manual installation

Open your `rebar.config` file that should reside in `~/.config/rebar3/rebar.config*`. If the file does not exist you
can just create it. Locate the `plugins` section of the file and include the nova plugin. The result should look something like
the following:

```
{plugins,[{rebar3_nova,{git,"https://github.com/novaframework/rebar3_nova.git",
                            {branch,"master"}}}]}.
```


#### Creating the skeleton

After the installation of the Nova-plugin is done use rebar3 to generate a new project.

```bash
rebar3 new nova my_first_nova
```

```
$ rebar3 new nova my_first_app
===> Writing my_first_nova/config/dev_sys.config.src
===> Writing my_first_nova/config/prod_sys.config.src
===> Writing my_first_nova/src/my_first_nova.app.src
===> Writing my_first_nova/src/my_first_nova_app.erl
===> Writing my_first_nova/src/my_first_nova_sup.erl
===> Writing my_first_nova/src/my_first_nova_router.erl
===> Writing my_first_nova/src/controllers/my_first_nova_main_controller.erl
===> Writing my_first_nova/rebar.config
===> Writing my_first_nova/config/vm.args.src
===> Writing my_first_nova/src/views/my_first_nova_main.dtl
```

Now the skeleton have been created and you should be able to start it. Go into the newly created directory and run the `serve` command.

> #### Important!
>
> For the auto-compile/reload to work you need [inotify](https://github.com/massemanet/inotify) to be installed.

```
$ cd my_first_app
$ rebar3 nova serve
===> Verifying dependencies...
===> Compiling my_first_app
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:0] [hipe] [kernel-poll:false]
...
a lot of progress-reports
...
===> Booted my_first_app
...
```

If you take a look at [http://localhost:8080](http://localhost:8080) you should be greeted by a Nova-page.


### Elixir approach

#### Install mix task

In order to install Novas mix task, just run;

```elixir
mix archive.install hex nova_new
```

Once installed you will have the option to create a new Nova project using

```elixir
mix nova.new my_app
```

Now you can run

```bash
cd my_app
mix deps.get
iex -S mix
```

If you take a look at [http://localhost:8080](http://localhost:8080) you should be greeted by a Nova-page.

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.