Skip to content

Getting started

Scryr combines a typed Python manifest SDK, a Rust CLI and GraphQL server, and a React/Three.js map. The standalone CLI embeds the map and SDK, so one install is enough for the normal local workflow.

Terminal window
brew install scryr-app/tap/scryr
Terminal window
npm install --global @scryr/cli
Terminal window
cargo install crystal-cli

Native release archives for macOS and Linux on ARM64 and x86_64 are also available from GitHub Releases.

Verify the installation
scryr --version
scryr --help

Scryr is pre-1.0. Keep the CLI and the manifests in a project versioned together.

Save this file at the root of your repository:

index.scry
from scryr import Diagram, Github, Info, Manifest
from scryr.types import ProgrammingLanguage, WebFramework
web = Manifest(
manifest_id="apps/web",
name="Web App",
connections=[Manifest(name="Public API")],
info=Info(
description="Customer-facing application",
language=ProgrammingLanguage.typescript,
frameworks=[WebFramework.react],
owner_team="Product",
),
)
api = Manifest(
manifest_id="services/api",
name="Public API",
connections=[Manifest(name="Postgres")],
info=Info(
description="Business API",
language=ProgrammingLanguage.python,
frameworks=[WebFramework.fastapi],
owner_team="Platform",
),
github=Github(repo_url="https://github.com/acme/api"),
)
database = Manifest(name="Postgres")
architecture = Diagram(name="System architecture", manifests=[web, api, database])

Connection targets are resolved by manifest name. The reference in Manifest(name="Public API") must match the real component name exactly.

Terminal window
scryr check
scryr serve --watch

By default, serve starts the embedded UI and GraphQL server at 127.0.0.1:8000, formats and validates the source, uploads the artifact, and opens the browser. Watch mode keeps the previous valid diagram visible when a later edit fails.

On first execution, Scryr provisions its own pinned uv, managed Python runtime, and per-project environment. It does not change your system Python.

--path defaults to index.scry, and --manifest-dir defaults to the current directory.

Terminal window
scryr check --path architecture/platform.scry --manifest-dir .
scryr serve --path services/catalog/index.scry --manifest-dir .

Nested entrypoints are grouped by their parent folder in the map selector.