Installing Jane¶
Jane is designed to be easy to install, easy to import, and easy to start using.
There’s no scaffolding, no global config, no magic setup, and zero dependencies. You install the package, import the factory, and you’re ready to build your first pipeline.
This page keeps things simple. The goal is to get you from "I’ve never used Jane" to "I just ran my first pipeline" in a few clean steps.
Install the Package¶
Jane is published as a standard npm package:
npm install @clementine-solutions/jane-io
Or with yarn:
yarn add @clementine-solutions/jane-io
Or pnpm:
pnpm add @clementine-solutions/jane-io
That’s it. No peer dependencies, no plugins, no global configuration.
Importing Jane¶
Jane exposes a single entry point: the jane factory.
import { jane } from '@clementine-solutions/jane-io';
This gives you a fresh pipeline builder with the default policy already applied. You can override the policy later, but for now the defaults are perfect for getting started.
Your First Run¶
Let’s run the simplest possible pipeline:
const result = await jane.value('hello').run();
This does almost nothing — and that’s intentional. Jane won’t parse, validate, or normalize unless you ask it to. This keeps the API explicit and predictable.
The result will look something like:
{
ok: true,
issues: undefined,
events: [...],
value: "hello",
path: {...},
metadata: { ... }
}
You’ll learn more about the result shape in a later chapter, but for now the important part is:
ok: Tells you whether the value is acceptable.issues: Describes any errors or fatal issues.events: Describes all the events the occurred.value: The final value after the pipeline completes.path: The constructed field path for the value.metadata: Contains timestamps and structural info.
Even this minimal pipeline gives you a structured, predictable result.
Adding Your First Rule¶
Let’s make it a little more interesting:
const result = await jane.value('42').parse('numeric').positive().run();
This pipeline:
- Parses
"42"into the number42. - Validates that it’s positive.
- Returns a structured result.
You’ll learn the details of parsing and validation in later chapters, but this is enough to show how clean the API feels.
Named Pipelines¶
You can name a pipeline for debugging, telemetry, and boundaries:
const result = await jane.value("42")
.named("age")
.parse("numeric")
.positive()
.run();
Names show up in telemetry and boundary-level decisions, making it easier to trace what happened.
What’s Next¶
You’ve installed Jane, imported the factory, and run your first pipeline.
That’s all you need to start exploring the framework.
In the next chapter, we’ll build your first real pipeline — step by step — and walk through what each stage does and why it matters. Ready to move on?