# Wireguard Conf
[](https://github.com/idkncc/wireguard-conf/actions)
[](https://docs.rs/wireguard-conf)
[](https://crates.io/crates/wireguard-conf)
[](https://crates.io/crates/wireguard-conf)
[](https://crates.io/crates/wireguard-conf)
[](./QUICKSTART.md)
Easy to use library for creating wireguard configs.
## Installation & Usage
Install `wireguard-conf`
```shell
cargo add wireguard-conf
```
### Usage
The best way to understand library: [Quickstart](./QUICKSTART.md)!
More usage examples you can find in [tests/tutorial.rs](tests/tutorial.rs), [tests folder](tests/) and documentation examples on [docs.rs](https://docs.rs/wireguard-conf).
```rust
use wireguard_conf::prelude::*;
use wireguard_conf::as_ipnet;
let peer = Peer::builder()
.allowed_ips([as_ipnet!("10.0.0.2/24")])
.build();
let interface = Interface::builder()
.address([as_ipnet!("10.0.0.1/24")])
.peers([peer.clone()])
.build();
// to export configs, use `println!()`, `writeln!()`, `.to_string()`, etc.
println!("Server's config:");
println!("{}\n", interface);
println!("Client's config:");
println!("{}", peer.to_interface(&interface, ToInterfaceOptions::new()).unwrap());
```
### Features
- `amneziawg-*`: AmneziaWG is a fork of wireguard, that less recognizable by DPI systems by
randomizing packet headers with packet sizes.
These feature flags add support for generating and manually building amnezia settings:
- `amneziawg`: _alias for `amneziawg-1`, this will update in next major release_
- `amneziawg-1`: adds [AmneziaWG 1.0](https://docs.amnezia.org/documentation/amnezia-wg/) support.
- `amneziawg-2`: adds [AmneziaWG 2.0](https://docs.amnezia.org/documentation/amnezia-wg/) support. **(recommended over `amneziawg-1`)**
- ~~`amneziawg-3`~~: **WIP** (waiting for official release)
- `serde`: adds implementions of `serde::Serialize` and `serde::Deserialize` for all structs.
## Misc
- [Contributing](./CONTRIBUTING.md)
- Licensed under either [MIT](./LICENSE-MIT) or [Apache 2.0](./LICENSE-APACHE)