---
title: "Scrollcase — signed, self-contained environment boxes"
description: "Signed, self-contained environment boxes for scientific and AI models"
source: https://scrollcase.dev/
schema-version: 3
---

# Scrollcase

> Scrollcase turns a declarative **scroll** into a **box**: a portable, locked, self-contained
> environment for one operating system and accelerator, packed so it runs somewhere other
> than where it was built, signed so a consumer can prove what they received, and accompanied by
> a dependency licence inventory.

- Version v1.0.0, box format schema version 3. Apache-2.0, vendor-neutral, open source.
- Box runtimes: `python`, `node`, and `native`, which starts a compiled binary and carries no interpreter.
- Substrate: pixi + conda-pack + conda-forge, and only that. There is no second dependency backend.
- CLI verbs: `init`, `new`, `add`, `remove`, `edit`, `refresh`, `doctor`, `keygen`, `lock`, `audit`, `build`, `verify`, `run`.
- Also a library, in three languages that implement the same consumer semantics: `scrollcase` on npm, `scrollcase-consumer` on PyPI, `scrollcase-consumer` on crates.io.
- Scrollcase is not a distribution system, not a CI system, and not a scientific validator. It builds, signs, verifies and runs a box; publishing, updating and deciding what is scientifically correct belong to whoever uses it.
- Source and issues: https://github.com/suffro/scrollcase

Every page below, concatenated as one document: https://scrollcase.dev/llms-full.txt

## Getting Started

- [Getting Started](https://scrollcase.dev/getting-started/): Everything you need to go from an empty repository to a signed, reproducible box on disk.
- [Overview](https://scrollcase.dev/getting-started/overview): What Scrollcase is for, what a box contains, and the shape of the workflow — in one page.
- [Why Scrollcase?](https://scrollcase.dev/getting-started/why-scrollcase): Understand when Scrollcase is useful, compare it and see how it differs from other tools and when a simpler solution is the better choice.
- [Quickstart](https://scrollcase.dev/getting-started/quickstart): From an empty directory to a signed, verified box through workspace setup and guided authoring.
- [Installation](https://scrollcase.dev/getting-started/installation): Install the Scrollcase CLI, and the pixi + conda-pack toolchain real builds need.
- [TL;DR](https://scrollcase.dev/getting-started/tl-dr): Scrollcase in a nutshell.

## Demos

- [Demos](https://scrollcase.dev/demos/): Interactive, hands-on demos that showcase Scrollcase features and common use cases to help you learn by example.
- [End-to-end demo](https://scrollcase.dev/demos/box-dev-demo): Quick demo to learn how to develop a box with Scrollcase.
- [How to run a box](https://scrollcase.dev/demos/box-run-demo): Try a box run, without installing a toolchain.
- [Local LLM](https://scrollcase.dev/demos/llm-box-demo): Build a real use-case box with SmolLM2-1.7B-Instruct, a language model that runs with no network, no API key and no account.
- [Sentiment analysis](https://scrollcase.dev/demos/sentiment-demo): Build a real use-case box with DistilBERT sentiment analysis model.
- [Genetic code](https://scrollcase.dev/demos/codon-demo): A node box that ships reference data and the tool that queries it, signed together.
- [Dataset](https://scrollcase.dev/demos/dataset-demo): A native box that fixes the reader, so a published inspection is a repeatable one.
- [Transcode](https://scrollcase.dev/demos/transcode-demo): A native box carrying ffmpeg and everything it links against, pinned and signed.

## Guides

- [Guides](https://scrollcase.dev/guides/): Comprehensive guides for mastering the Scrollcase workflows.
- [Managing Assets](https://scrollcase.dev/guides/managing-assets): Declare, verify, embed or defer the files a box carries.
- [Packaging CUDA Boxes](https://scrollcase.dev/guides/packaging-cuda): Build a GPU box whose CUDA ABI is part of its identity, and prove it is really a GPU build.
- [Accelerator Parity](https://scrollcase.dev/guides/accelerator-parity): Require a box to compute the same thing on the GPU as on the CPU, within tolerances you declare.
- [Signing & Key Custody](https://scrollcase.dev/guides/signing-and-custody): Local ed25519 keys, external signers (KMS/HSM), verification, and key rotation.
- [Offline / Air-Gapped Installs](https://scrollcase.dev/guides/offline-airgap): Build once, carry the archive across, verify and install with no network at all.
- [Distributing Boxes](https://scrollcase.dev/guides/distributing-boxes): What a build hands you, how it is laid out, and where Scrollcase deliberately stops.
- [Platform Examples](https://scrollcase.dev/guides/platform-examples): Minimal target and shell examples for macOS CPU, Linux CPU/CUDA, and Windows CPU/CUDA.
- [Migrating from v2 to v3](https://scrollcase.dev/guides/migrating-from-v2): Every version 2 field, flag and document field, and what it becomes in version 3.
- [Troubleshooting](https://scrollcase.dev/guides/troubleshooting): Safe diagnosis and correction for common Scrollcase build, signing, verification, and execution failures.

## Reference

- [Reference](https://scrollcase.dev/reference/): Technical specifications for the Scrollcase CLI, workspace declarations, contract schemas, and programmatic Node APIs.
- [CLI Commands](https://scrollcase.dev/reference/cli): Every Scrollcase command, flag, environment variable, and exit convention.
- [Workspace Configuration](https://scrollcase.dev/reference/configuration): scrollcase.config.json — where scrolls live and where builds, artefacts and keys go.
- [The Scroll (scroll.json)](https://scrollcase.dev/reference/scroll): Every field of a Scrollcase scroll — identity, target, dependencies, assets, self-test, parity.
- [The Box Format](https://scrollcase.dev/reference/box-format): What a box is on disk and on the wire — targets, archive layout, box.json, signed documents.
- [JSON Schemas](https://scrollcase.dev/reference/schemas): Public schema URLs, package imports, offline registration, generated types, and compatibility.

## Scrollcase APIs

- [Scrollcase APIs](https://scrollcase.dev/reference/api/): The Node, Python, and Rust surfaces for contracts, build primitives, signing and running boxes..
- [Node API](https://scrollcase.dev/reference/api/node): The Node surface surface for contracts, build primitives, signing and running boxes.
- [Python consumer](https://scrollcase.dev/reference/api/python): The Python surface for contracts, build primitives, signing and running boxes.
- [Rust consumer](https://scrollcase.dev/reference/api/rust): The Rust surface for contracts, build primitives, signing and running boxes.

## Concepts

- [Concepts](https://scrollcase.dev/concepts/): Understand the core architecture and mental models behind Scrollcase.
- [Architecture](https://scrollcase.dev/concepts/architecture): How a scroll becomes a signed box, and how local consumers prepare and run it.
- [Security and Trust](https://scrollcase.dev/concepts/security-and-trust): Threat model, trust anchors, verification order, key custody, rotation, and consumer responsibilities.
- [Why Pixi & Conda-Forge](https://scrollcase.dev/concepts/why-pixi): One substrate, chosen for native libraries, licence metadata, and a lock worth trusting.
- [Design decisions](https://scrollcase.dev/concepts/design-decisions): Why Scrollcase is shaped the way it is, and which alternatives were rejected.
- [Scrollcase vs Other Packaging Tools](https://scrollcase.dev/concepts/tool-comparison): Choosing between Scrollcase and other solutions and packaging tools.

## White Paper

- [Technical White Paper](https://scrollcase.dev/white-paper): A complete, self-contained technical description of Scrollcase — its vocabulary, boundary, substrate, contract, build pipeline, signing, consumers, invariants and tests.

## Optional

- [Donate](https://scrollcase.dev/donate): Support the development of Scrollcase through Ko-fi.
- [Privacy](https://scrollcase.dev/privacy): Privacy information for the Scrollcase documentation site.

## JSON Schemas

The box format itself, machine-readable. Normative — the prose above describes these.

- [box-manifest.schema.json](https://scrollcase.dev/schema/v3/box-manifest.schema.json)
- [channel-manifest.schema.json](https://scrollcase.dev/schema/v3/channel-manifest.schema.json)
- [execution.schema.json](https://scrollcase.dev/schema/v3/execution.schema.json)
- [release-manifest.schema.json](https://scrollcase.dev/schema/v3/release-manifest.schema.json)
- [revocations-manifest.schema.json](https://scrollcase.dev/schema/v3/revocations-manifest.schema.json)
- [scroll.schema.json](https://scrollcase.dev/schema/v3/scroll.schema.json)
- [signed-document.schema.json](https://scrollcase.dev/schema/v3/signed-document.schema.json)
- [target.schema.json](https://scrollcase.dev/schema/v3/target.schema.json)

