# arborium-caddy
[](https://github.com/bearcove/arborium)
[](https://crates.io/crates/arborium-caddy)
[](https://docs.rs/arborium-caddy)
[](https://github.com/bearcove/arborium)
[Caddyfile](https://caddyserver.com/docs/) grammar for [tree-sitter](https://tree-sitter.github.io/).
> Caddyfile configuration language for the Caddy web server; official docs at <a href="https://caddyserver.com/docs/caddyfile">caddyserver.com</a>.
| **Inventor** | Matt Holt and Caddy contributors |
| **Year** | 2015 |
## Usage
```rust,ignore
use arborium_caddy::language;
use tree_sitter_patched_arborium::Parser;
let mut parser = Parser::new();
parser.set_language(&language()).expect("Error loading caddy grammar");
let source_code = "/* your caddy code here */";
let tree = parser.parse(source_code, None).unwrap();
println!("{}", tree.root_node().to_sexp());
```
For most use cases, prefer the main [arborium](https://crates.io/crates/arborium) crate:
```toml
[dependencies]
arborium = { version = "*", features = ["caddy"] }
```
Or use this crate directly:
```toml
[dependencies]
arborium-caddy = "*"
```
## About Arborium
This crate is part of [**Arborium**](https://github.com/bearcove/arborium), a collection of tree-sitter grammars packaged as Rust crates, maintained by [Amos Wenger](https://fasterthanli.me).
This crate packages a `parser.c` file generated by the [tree-sitter CLI](https://tree-sitter.github.io/tree-sitter/creating-parsers#generating-the-parser). It exports a `language()` function returning the tree-sitter `Language` for **caddy**.
**Why separate crates?** Tree-sitter parsers can be large (some exceed 1MB of generated C). Splitting languages into separate crates means you only compile what you need, and parallel/incremental builds are more effective.
## Build Requirements
- **Rust**: MSRV is 1.85.0 (Rust 2024 edition)
- **C compiler**: This crate compiles C code via the [`cc`](https://crates.io/crates/cc) crate
### Supported Targets
- All major platforms: Linux, macOS, Windows
- WebAssembly: `wasm32-unknown-unknown` (with custom sysroot)
## Upstream Grammar
| **Repository** | [Samonitari/tree-sitter-caddy](https://github.com/Samonitari/tree-sitter-caddy) |
| **Commit** | `65b60437983933d00809c8927e7d8a29ca26dfa3` |
| **License** | MIT |
To regenerate after upstream updates:
```sh
cargo xtask gen --name caddy
```
**Found a grammar bug?** Please report it to the [upstream repository](https://github.com/Samonitari/tree-sitter-caddy/issues).
## Safety
This crate uses `unsafe` for FFI bindings to the tree-sitter C library. The unsafe surface is minimal and limited to what tree-sitter requires. The generated parser code is produced by tree-sitter's own code generator.
## Versioning
Crate versions track Arborium releases, not upstream grammar versions. The upstream commit is recorded above. A major version bump occurs when grammar changes affect node names or structure (breaking for query consumers).
## License
- **Generated parser code** (`parser.c`): **MIT** (from upstream grammar)
- **Arborium glue code**: **MIT OR Apache-2.0**
## Contributing
- Issues: [github.com/bearcove/arborium/issues](https://github.com/bearcove/arborium/issues)
- Repository: [github.com/bearcove/arborium](https://github.com/bearcove/arborium)