README.md


# Vault

A process-scoped hierarchical data storage library for Elixir applications. `Vault` enables seamless data sharing between processes and their children, making it ideal for request-scoped data, configuration propagation, and user session management.

## Features

- **Hierarchical Inheritance**: Child processes automatically access parent vault
- **Process Isolation**: Fast local caching with automatic data copying
- **Single Initialization**: Enforced once-per-hierarchy initialization prevents conflicts
- **Safe Operations**: Comprehensive error handling and type safety
- **Zero Dependencies**: Lightweight library using only Erlang/OTP primitives

## Installation

Add `vault` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:vault, "~> 0.1.0"}
  ]
end
```

## Quick Start

```elixir
# Initialize vault in your main process
Vault.init(
  user: %{id: 123, name: "Alice", role: :admin},
  tenant: "acme_corp",
  request_id: "req_abc123"
)

# Access data from any child process
Task.async(fn ->
  user = Vault.get(:user)        # %{id: 123, name: "Alice", role: :admin}
  tenant = Vault.get(:tenant)    # "acme_corp"
  request_id = Vault.get(:request_id)  # "req_abc123"

  # Data is automatically cached locally for fast subsequent access
  user_again = Vault.get(:user)  # Fast local lookup
end)
```

## Documentation

Full documentation is available at <https://hexdocs.pm/vault> or can be generated locally with `mix docs`.