precompiled

Hex version HexDocs CI

Install signed, verified precompiled builds of your Hex dependencies instead of compiling them. Builds come from the Nerves compatibility portal, 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; everything else compiles as before, and nothing this library does can fail your build.

Installation

With Igniter (Elixir 1.18 or later):

mix igniter.install precompiled

Or by hand, in mix.exs:

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:

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:

Precompiled.install(:recon)

Guides

Getting started:

Reference:

Explanation:

Troubleshooting:

The guides are also in guides/. To work on the library, see 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.

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). 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.