# `QuackDB.Binary`
[🔗](https://github.com/elixir-vibe/quackdb/blob/main/lib/quack_db/binary.ex#L1)

Downloads and locates a DuckDB executable for local `QuackDB.Server` usage.

This is an explicit helper: QuackDB will not download executables unless you
call `install/1`, `install!/1`, `path/1`, run the install Mix task, or start
`QuackDB.Server` with `duckdb: :managed`.

Set `QUACKDB_BINARY_PATH` to force a system or custom executable. Set
`QUACKDB_BINARY_CACHE_DIR` or pass `:cache_dir` to choose where managed
downloads are stored.

# `option`

```elixir
@type option() ::
  {:path, Path.t()}
  | {:version, String.t()}
  | {:target, String.t()}
  | {:base_url, String.t()}
  | {:cache_dir, Path.t()}
  | {:sha256, String.t()}
  | {:force, boolean()}
```

# `default_version`

```elixir
@spec default_version() :: String.t()
```

Returns QuackDB's pinned DuckDB CLI version for managed downloads.

# `install`

```elixir
@spec install([option()]) :: {:ok, Path.t()} | {:error, QuackDB.Error.t()}
```

Downloads DuckDB CLI for the current OS/architecture unless already cached.

# `install!`

```elixir
@spec install!([option()]) :: Path.t()
```

Like `install/1`, but raises on failure.

# `known_targets`

```elixir
@spec known_targets() :: [{String.t(), String.t()}]
```

Returns known `{version, target}` checksum pairs for managed downloads.

# `path`

```elixir
@spec path([option()]) :: {:ok, Path.t()} | {:error, QuackDB.Error.t()}
```

Returns a path to a usable DuckDB binary, downloading it when needed.

# `path!`

```elixir
@spec path!([option()]) :: Path.t()
```

Like `path/1`, but raises on failure.

---

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