Spine language (handbook)
Spine is the Dataspine DSL (.spine files) for the types, Ingest / Outlet / KeyValue surface, and flow of a data product. The compiler validates and type-checks sources, reads the Data Product Manifest together with your tree, resolves the dataspine standard library in com.dataspine, and emits build artifacts for the CLI.
This part of the site is the handbook (day-to-day authoring), similar in role to the TypeScript Handbook versus the full specification in Resources.
Quick orientation
- Files —
*.spinesources; a project often usesmain.spineas the entry. The Data Product Manifest (typicallydataspine.json) ties the repo to the data product and build. - Tooling — parse, type-check, and compile with the Dataspine CLI (
dataspine check,dataspine compile; see alsodataspine). - Standard types — the default library
com.dataspine(library iddataspine-core) and optional additional bundles via--lib. - Examples — First data product tutorial and Quick start for data engineers.
- How this differs from a data product — a data product is what you run; Spine is what you write. See Data products and Spine.
Who this handbook is for
- Authors of namespaces, types, ingests/outlets, and flows.
- Teams integrating Spark / codegen / reviews who need a readable overview before diving into the spec.
- If you need lexer and grammar detail (token rules, every operator form), use Spine language (specification) in Resources (linked below), not the handbook alone.
Handbook chapters (in the sidebar)
| Chapter | Purpose |
|---|---|
| Data product pipelines | Flows, stream methods (.map, joins, publish, and related patterns) |
| Runtime library | com.dataspine, --lib bundles, and where generated API docs live |
Language specification (Resources)
The normative chapters for implementors and power users (lexical structure through appendix) are maintained under Resources so they are not the default path for product authors.
| Spec chapter | Open |
|---|---|
| Lexical structure | Lexical structure |
| Keywords | Keywords |
| Types | Types |
| Declarations | Declarations |
| Expressions | Expressions |
| Operators | Operators |
| Statements | Statements |
| Pattern matching | Pattern matching |
| Appendix | Appendix |
Tooling and related links
dataspine checkanddataspine compile- Internal binary serialization (only if you work on the binary layout; most authors use JSON and generated clients)
- Data product lifecycle
Spine sources use the .spine extension.
Minimal example
namespace com.example.events {
Struct Event {
message: String,
}
Ingest EventIngest {
name: "EventIngest",
type: Event,
}
Outlet EventOutlet {
name: "EventOutlet",
type: Event,
}
flow = EventIngest.map(e -> e).publish(EventOutlet)
}
The name strings on Ingest, Outlet, and KeyValueApi wire runtime messages to these declarations. That binding is a data product concern, expressed in Spine.
See also
- Data products and Spine — how deployment units and the DSL connect
- Application integration — runtimes, MCP, and client libraries
- Internal binary serialization