One language.
Two clear routes.

Sickle mascot, a grim reaper riding a crab

Sickle makes CCL readable in Rust. Navigate the model directly or deserialize into the types your program already trusts.

SICKLE INTERLOCKING / CCLINSERTION ORDER PRESERVED ROUTE READY
ORIGINinput.ccl
/= Application configuration
name = Signal
database =
host = localhost
port = 5432
features =
= metrics
= tracing

SELECT ROUTE

CLEAR TO INSTALL
cargo add sickle --features serde

ROUTE Styped.rs
use serde::Deserialize;
use sickle::from_str;
#[derive(Deserialize)]
struct Config {
name: String,
database: Database,
}
let config: Config = from_str(ccl)?;

Choose the route.
Keep the language.

Both APIs preserve CCL semantics and share the same hierarchy and error model. Start at the level your application needs.

D

Inspect the structure yourself.

Parse into a hierarchical CclObject, preserve insertion order, and access strings, integers, lists, and nested records directly.

let model = sickle::load(input)?;
let host = model
.get("database")?
.get_string("host")?;
S

Let your types define the shape.

Deserialize CCL into existing Rust types, or serialize those values back to canonical CCL with separately selectable feature gates.

let config: Config =
sickle::from_str(input)?;
let output =
sickle::to_string(&config)?;

Signal only what the job requires.

Default features are empty. Build from the core parser to the complete document toolchain without pulling every capability into every binary.

parse

Flat entries

Parse CCL into insertion-ordered key-value entries.

core parser

hierarchy

Nested model

Build a navigable CclObject from parsed entries.

parse

serde

Typed data

Deserialize and serialize through Serde.

hierarchy + printer

document

Source fidelity

Edit typed values while preserving comments and formatting.

serde

intern

String interning

Reduce repeated string storage in large configurations.

optional dependency

full

Complete toolset

Enable parsing, hierarchy, Serde, printing, interning, and documents.

all stable features
ALL ROUTES CLEARcargo add sickle --features full

Change one value.
Leave the line intact.

The optional document API merges typed edits back into source text, preserving comments and formatting around the values your application changed.

Inspect the document API
BEFORE
/= Keep this explanation
port = 5432
mode = production
AFTER
/= Keep this explanation
port = 6432
mode = production

ONE TYPED EDIT / ZERO REWRITTEN CONTEXT LINES

The board tells the truth.

Pure RustNo unsafe code
Order-awareInsertion order preserved
Test-backedProperty and data-driven suites
IndependentNo dependency on Santa

Your route
is clear.

Add Sickle with the Serde route, or inspect the source before you proceed.

cargo add sickle --features serde