Skip to content

Core Concepts

Understanding these concepts is essential for creating effective scenarios.

Component

A component is a deployable building block—a piece of infrastructure that runs in the lab environment.

What Components Represent

CategoryExamples
DatabasesPostgreSQL, MySQL, MongoDB, Redis
Message BrokersKafka, RabbitMQ
Search & AnalyticsElasticsearch, OpenSearch
StorageMinIO (S3-compatible)
ProcessingApache Flink, Ververica Platform
Custom AppsYour own Docker images

Component Anatomy

Each component has:

┌─────────────────────────────────────────────────────────────┐
│  Component                                                   │
├─────────────────────────────────────────────────────────────┤
│  Label: kafka                     ← Identifier for links    │
│  Type: Helm / Docker / Compose    ← Deployment method       │
│  Resources: 500m CPU, 1Gi RAM     ← Resource requirements   │
│  Tabs: Terminal, Web UI           ← Access methods          │
│  Configuration: Helm values, env  ← Customization           │
└─────────────────────────────────────────────────────────────┘

Component Sources

Components come from two places:

SourceDescription
Common CatalogPlatform-wide components available to all organizations
Organization CatalogCustom components created by your organization

Scenario

A scenario is a complete lab definition—a package containing everything needed to run a hands-on exercise.

What a Scenario Contains

ElementDescription
ComponentsThe infrastructure to deploy
InstructionsStep-by-step guidance
SettingsTTL, resources, metadata

Scenario States

StateMeaning
DraftWork in progress, not visible to participants
PublishedAvailable for participants to run

Scenario Lifecycle

┌──────────┐     ┌───────────┐     ┌───────────┐
│  Create  │ ──▶ │   Edit    │ ──▶ │  Publish  │
└──────────┘     └───────────┘     └───────────┘
                       ↑                 │
                       └─────────────────┘
                         (iterate)

You can continue editing a published scenario. Changes apply to every new run immediately—no need to re-publish.

Run

A run is an active instance of a scenario—a live lab environment where a participant works.

What Happens During a Run

  1. Provisioning: SnapBench creates an isolated Kubernetes namespace
  2. Deployment: Components are deployed in the correct order
  3. Access: Participant gets terminal and web UI access
  4. Execution: Participant follows instructions, interacts with components
  5. Cleanup: After TTL or manual stop, all resources are deleted

Run States

┌────────────┐     ┌─────────┐     ┌──────────┐     ┌─────────┐
│ REQUESTED  │ ──▶ │ RUNNING │ ──▶ │ STOPPING │ ──▶ │ STOPPED │
└────────────┘     └─────────┘     └──────────┘     └─────────┘


                  ┌──────────┐
                  │  FAILED  │
                  └──────────┘

Run Isolation

Each run is completely isolated:

  • Own Kubernetes namespace
  • No access to other runs
  • Resources deleted on completion

Track

A track is an ordered collection of scenarios—a learning path that guides participants through a curriculum.

Why Use Tracks

Use CaseExample
Courses"Kafka Fundamentals" with 5 progressive labs
CertificationsSeries of exercises validating skills
OnboardingStep-by-step introduction for new team members

Track Features

  • Ordered scenarios: Participants progress in sequence
  • User assignment: Control who can access the track
  • Default track: Auto-assigned to new organization members
  • Reusable scenarios: Same scenario can appear in multiple tracks

Track vs Scenario

TrackScenario
Collection of scenariosSingle lab
Defines learning pathDefines lab content
Assigns to usersRuns as instances

Instruction

An instruction is a step in your scenario—a piece of guidance that tells participants what to do.

Instruction Anatomy

┌─────────────────────────────────────────────────────────────┐
│  Title: Create a Kafka Topic                                 │
├─────────────────────────────────────────────────────────────┤
│  Content (Markdown):                                         │
│                                                              │
│  Open the [Kafka terminal](tab:kafka) and run:              │
│                                                              │
│  ```bash                                                     │
│  kafka-topics --create --topic orders \                      │
│    --bootstrap-server localhost:9092                         │
│  ```                                                         │
│                                                              │
│  You should see "Created topic orders."                      │
└─────────────────────────────────────────────────────────────┘

Instruction Features

FeatureDescription
MarkdownFull formatting support
Code blocksSyntax highlighting + copy button
Tab navigation[link](tab:component) switches tabs
OrderingDrag to reorder in the Studio

How Concepts Relate

Organization

    ├── Catalog (Components)
    │       │
    │       ▼
    ├── Tracks
    │       │
    │       ├── Scenario A ──────▶ Run (participant 1)
    │       │       │              Run (participant 2)
    │       │       │
    │       │       ├── Components
    │       │       └── Instructions
    │       │
    │       └── Scenario B ──────▶ Run (participant 3)

    └── Users (Authors, Participants)

Next Steps

Released under the MIT License.