# `NativeArtifact.Installer`
[🔗](https://github.com/gsmlg-dev/native_artifact/blob/main/lib/native_artifact/installer.ex#L1)

Transactional local-byte installation of an exact Manifest v1 artifact.

This internal boundary revalidates the complete manifest but does not resolve
runtime compatibility. It reads only a supplied local archive or a fully
verified existing installation. Network/cache access, native loading, source
compilation and Mix `priv` symlink handling are separate boundaries.

Files live under the physical application-owned `priv_dir` at
`native/<package>/<package_version>/<artifact_id>/<archive_sha256>/`, with a
separate `payload/` directory and portable `receipt.json`. A unique sibling
staging tree is promoted only after all bytes, metadata and receipt are ready.

# `install`

```elixir
@spec install(NativeArtifact.Manifest.t() | map(), binary(), binary(), keyword()) ::
  {:ok, map()} | {:error, NativeArtifact.Error.t()}
```

Installs exact local bytes or reuses a completely verified immutable directory.

Required `:priv_dir` is an existing normalized physical absolute directory.
Optional `:manifest_limits` and `:archive_limits` pass finite supported limits
to those boundaries; `:timeout` bounds total local work (default 180,000 ms).
Returned absolute paths are conveniences; persisted receipt paths are relative.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
