Key or variableMeaning
:source / PRECOMPILED_SOURCEThe portal's precompiled API URL; nothing happens without one. https only (http on loopback). The variable beats app config; an install/2 option beats both.
:exceptDependencies never installed precompiled, e.g. [:ash].
:contentContent origins (mirrors, CDNs) to fetch files and manifests from instead of the ones the signed batch names. https only (http on loopback).
:rootA root.json to trust instead of the one this library ships.
:home / PRECOMPILED_HOMECache and trust state dir. Unlike :source, the config key beats the variable. Default: the user cache dir (:filename.basedir(:user_cache, "precompiled")). PRECOMPILED_HOME=~/.nerves/precompiled keeps using the pre-rename cache.
:deadline_secondsAll network for one run (default 300); what is still waiting then compiles. Root and batch get 15 s together, connects 5 s.
:root_check_secondsHow often the served root is checked for a rotation (default 3600; a batch that fails to verify checks it at once).
:cache_max_mbCache size bound (default 4096), least recently used evicted, checked once a day. Trust state is never evicted.
PRECOMPILED=0Off: installs nothing and removes earlier installs.
PRECOMPILED_OFFLINE=1No network: the cached batch (while fresh) and cached files only.
PRECOMPILED_CACERTS_PATH (or HEX_CACERTS_PATH)A PEM CA bundle that replaces the OS store (TLS-intercepting proxies). Verification stays on; only the bundle's CAs are trusted.
HTTPS_PROXY/https_proxy, HTTP_PROXY/http_proxy, NO_PROXY/no_proxyProxies, as Hex reads them. Credentials in the proxy URL are sent only to the proxy. NO_PROXY takes host names, domains (.corp.example), IP addresses and *; CIDR ranges are ignored.
PRECOMPILED_DEBUG=1Also print each dependency that was not a candidate, and why.

The keys go in config :precompiled, ... or as options to Precompiled.Host.install/2. The old names (config :nerves_precompiled, config :nerves, :precompiled, NERVES_PRECOMPILED*) are still read for one release, when the new ones are unset.

Turning it off

  • PRECOMPILED=0 (false and no work too), or removing :source, turns it off and removes the builds it installed, so Mix compiles them in that same run. Only build dirs this library wrote are removed, never one Mix compiled, and only in the _build of the run's own env and target: a run on host removes host installs, never a device target's.
  • mix precompiled.clean removes this _build's installs. --cache also empties the download cache (files, manifests and source scans), from the same cache dir a run uses.
  • :except keeps listed dependencies compiled from source; an earlier install of one is removed.

Seeing what happened

Every candidate prints one line, then a summary:

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

A warm run whose installs the batch still vouches for prints nothing.

  • mix precompiled.status lists what is installed in this _build, with the batch and manifest each came from.
  • _build/<env>/lib/.precompiled/report.json ("format": 1) holds the last run that printed lines.
  • Each installed dependency carries .mix/precompiled.json.