Define Your Data Model. Get Everything Else for Free.

DevKit is the Python development toolkit for metadata-driven C++/Python interoperability — code generation, type-safe runtime, database tooling, all in one bundle.

DevKit, dsviper, Viper — what's what?

Three names appear across this site. Here is how they layer.

DevKit

What you download here

The Digital Substrate Python toolkit, distributed as a single ZIP — bundles dsviper, the Kibo code generator, templates, CLI tools, and offline documentation.

dsviper

What runs in your Python apps

The Python runtime distributed on PyPI. Strong-typed Python API over the Viper C++ engine. Installed via pip install dsviper or pulled in by the DevKit ZIP.

Viper

The C++ engine behind dsviper

The underlying metadata-driven C++ runtime — type system, commit DAG, database tier. Currently used internally; not yet distributed standalone.

From Data Model to Production in 3 Steps

Define your data model once. Get type-safe code, versioning, and Python bindings automatically.

1

DSM

Describe

Define your data model with a declarative language. Types, structures, relationships.

Learn more →
2

Kibo

Generate

Automatic code generation. 57x amplification. C++ and Python infrastructure.

Learn more →
3

dsviper

Use

Python API with full type safety. Immediate exception on type mismatch.

Learn more →

See It in Action

Define your model in DSM, use it in Python with full type safety

model.dsm
namespace Tuto {f529bc42-...} {

concept User;

struct Login {
    string nickname;
    string password;
};

struct Identity {
    string firstname;
    string lastname;
};

attachment<User, Login> login;
attachment<User, Identity> identity;

};
Use it
app.py
from dsviper import *

# Open database and inject constants
db = CommitDatabase.open("model.cdb")
db.definitions().inject()

# Create key and document
key = TUTO_A_USER_LOGIN.create_key()
login = TUTO_A_USER_LOGIN.create_document()
login.nickname = "zoop"
login.password = "robust"

# Commit to database (versioned)
state = CommitMutableState(db.initial_state())
state.attachment_mutating().set(TUTO_A_USER_LOGIN, key, login)
db.commit_mutations("Add user", state)

Why DevKit?

A complete Python toolkit for data-intensive applications

Type Safety

Strong typing with immediate exceptions on type mismatch. No silent failures, no runtime surprises.

Data Versioning

Built-in commit DAG for your data. Track changes, branch, merge. Like Git, but for structured data.

Python Integration

Classes exposed via dsviper. Seamless C++/Python interoperability with zero boilerplate.

Persistence

SQLite-backed storage with automatic schema migration. ACID transactions out of the box.

Code Generation

57x amplification. Write 273 lines of DSM, get 15,592 lines of production-ready infrastructure.

Metadata Everywhere

Runtime introspection for types, values, serialization, RPC. One definition, multiple uses.

Ready to Get Started?

Download DevKit and build your first type-safe data model in minutes.