<div align="center">
<img src="https://raw.githubusercontent.com/arcium-hq/.github/refs/heads/main/profile/arcium.svg" alt="Arcium" width="200"/>
<h1>arcium-macros</h1>
<p>Procedural macros for Arcium-enabled Anchor programs.</p>
[](https://crates.io/crates/arcium-macros)
[](https://docs.rs/arcium-macros)
**[Developer Docs](https://docs.arcium.com/developers/program)**
</div>
## When To Use
- Generating validated account structs for queue and callback instructions
- Wiring callback handlers to Arcium computation results
- Initializing computation definitions from Anchor programs
Use this crate together with [`arcium-anchor`](https://crates.io/crates/arcium-anchor), which provides the runtime helpers and types.
## Installation
```toml
[dependencies]
anchor-lang = "1.0.2"
arcium-anchor = "0.10.4"
arcium-macros = "0.10.4"
```
## Macro Reference
| `#[arcium_program]` | Wraps the Anchor program module and adds Arcium-specific plumbing. |
| `#[queue_computation_accounts]` | Validates queue accounts and implements `QueueCompAccs`. |
| `#[callback_accounts]` | Validates callback accounts. |
| `#[arcium_callback]` | Validates callback naming and typed output signatures. |
| `#[init_computation_definition_accounts]` | Validates accounts used to initialize computation definitions. |
| `#[check_args]` | Validates instruction arguments against the circuit interface. |
## Quick Start
```rust
use arcium_macros::{
arcium_callback,
arcium_program,
callback_accounts,
init_computation_definition_accounts,
queue_computation_accounts,
};
```
## Notes
- Most users should import these macros through normal application code, not from standalone macro examples.
- The macro crate does not replace [`arcium-anchor`](https://crates.io/crates/arcium-anchor); it complements it.
## See Also
- [`arcium-anchor`](https://crates.io/crates/arcium-anchor)
- [`arcium-client`](https://crates.io/crates/arcium-client)
- [Developer Docs](https://docs.arcium.com/developers/program)