[Canonical page](<https://docs.dhtmlx.com/planning-engine/rust/api/core/overview/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# plen_core

The `plen-core` crate schedules, edits, levels and scores projects. Every call is synchronous and CPU-only, with no I/O, no clock and no async runtime.

```bash
cargo add plen-core
```

Every public item is re-exported at the crate root, so the import path is `plen_core::X`. The folders below group items by concern. They aren't Rust module paths.

```rust
use plen_core::{Project, ProjectData, ProjectOptions, SolveOptions};
```

## Feature flags

| Feature | Effect |
|---|---|
| `serde` | `Serialize` and `Deserialize` for result types, `Id`, `DateTime`, `Patch<T>`, `Pause`, `PauseSource` and the re-exported enums. `Serialize` only for `SuggestResult` and `Slot`. Input records and options have no `Deserialize`. |

```bash
cargo add plen-core --features serde
```

## Public modules outside the contract

The modules `calendar`, `datetime`, `graph`, `planner`, `resources` and `types` are public for internal crates and tests. They aren't part of the API contract and aren't documented here. The enums re-exported from `types` at the crate root (`Basis`, `CalendarMode`, `ConstraintType`, `GapBehavior`, `TimeUnit`) are part of the contract and are listed under [data](<https://docs.dhtmlx.com/planning-engine/rust/api/core/data/overview.md>).
