Current section
Files
Jump to
Current section
Files
precompiled
README.md
README.md
# precompiled
[](https://hex.pm/packages/precompiled)
[](https://hexdocs.pm/precompiled/)
[](https://github.com/TomHoenderdos/elixir_precompiled/actions/workflows/ci.yml)
Install signed, verified precompiled builds of your Hex dependencies
instead of compiling them. Builds come from the
[Nerves compatibility portal](https://compatibility.nerves-project.org),
which builds selected Hex packages for the host (`pure_elixir`) and for
Nerves systems, signs a batch index every 15 minutes, and serves files by
SHA-256. A dependency is installed only when a build matches the project on
every rule in [What matches](https://hexdocs.pm/precompiled/matching.html);
everything else compiles as before, and nothing this library does can fail
your build.
## Installation
With [Igniter](https://hex.pm/packages/igniter) (Elixir 1.18 or later):
mix igniter.install precompiled
Or by hand, in `mix.exs`:
```elixir
def project do
[
...,
aliases: [
"deps.loadpaths": ["deps.compile precompiled", "precompiled.deps", "deps.loadpaths"]
]
]
end
defp deps do
[
{:precompiled, "~> 0.2", runtime: false},
...
]
end
```
and in `config/config.exs`:
```elixir
config :precompiled, source: "https://compatibility.nerves-project.org/api/precompiled"
```
## Usage
Nothing more: every `mix compile`, `mix test`, `mix phx.server` and
`mix release` installs the matching builds before Mix compiles the rest,
and prints one line per candidate:
```
precompiled: ash 3.36.0 HIT 4.1 MB
precompiled: nerves_pack 0.7.1 MISS built with nerves_ssh 1.3.3, project has 1.3.2
precompiled: 40 hit, 5 miss, 0 fail of 45 deps, 61.2 MB, 8.3 s
```
On a running Nerves device, from an IEx shell:
```elixir
Precompiled.install(:recon)
```
## Guides
Getting started:
- [Setup](https://hexdocs.pm/precompiled/setup.html): any Mix project,
umbrellas, Phoenix, CI, `Mix.install` and Livebook
- [Nerves](https://hexdocs.pm/precompiled/nerves.html)
- [On a device](https://hexdocs.pm/precompiled/device.html), including
bundles for devices with no network
Reference:
- [Configuration](https://hexdocs.pm/precompiled/configuration.html):
every key and variable, turning it off, seeing what happened
- [What matches](https://hexdocs.pm/precompiled/matching.html)
Explanation:
- [Trust](https://hexdocs.pm/precompiled/trust.html): the signed chain, on
the host and on the device, and CA certificates
Troubleshooting:
- [Troubleshooting](https://hexdocs.pm/precompiled/troubleshooting.html),
with the known limitations
The guides are also in
[guides/](https://github.com/TomHoenderdos/elixir_precompiled/tree/main/guides).
To work on the library, see
[CONTRIBUTING.md](https://github.com/TomHoenderdos/elixir_precompiled/blob/main/CONTRIBUTING.md).
## Supported versions
Elixir 1.17 or later on OTP 27 or later; the Igniter installer needs
Elixir 1.18. Builds serve only the toolchains the portal builds with
(today Elixir 1.19.3 and 1.20.3 on OTP 28 and 29); see
[Supported versions](https://hexdocs.pm/precompiled/setup.html#supported-versions).
## Names
The package is `precompiled`; the repository keeps its old name,
`elixir_precompiled`. This library was called `nerves_precompiled` until
v0.1.0; those old config keys and environment variables still work for
one release (see [Configuration](https://hexdocs.pm/precompiled/configuration.html)).
The interim `elixir_precompiled` names (app, modules,
`ELIXIR_PRECOMPILED_*` variables, the cache dir) were never released and
are not read.
## License
Apache-2.0. See [LICENSE](https://github.com/TomHoenderdos/elixir_precompiled/blob/main/LICENSE).