Skip to content

Feature samples

Small single-purpose snippets, each demonstrating one feature.

View the source on GitHub

System view
System view
minimal.krs
// Demonstrates: the smallest valid .krs input — system + 2 services + sync/async edges.
// Use this as a baseline when isolating rendering bugs.
system Minimal {
label "Minimal System"
service Frontend {
label "Frontend"
}
service Backend {
label "Backend"
}
Frontend -> Backend "sync call"
Frontend --> Backend "async call"
}
System view
System view
users.krs
// Demonstrates: [human] and [ai] user nodes with role and description properties.
system UserSample {
label "User Node Sample"
user Customer [human] {
label "Customer"
role "Places orders and tracks shipments"
description "A human user who interacts with the storefront."
}
user SupportAgent [human] {
label "Support Agent"
role "Handles customer inquiries"
}
user RecommendBot [ai] {
label "Recommendation Bot"
role "Generates personalised product recommendations"
description "An AI agent that analyses purchase history."
}
service Storefront {
label "Storefront"
}
service SupportPortal {
label "Support Portal"
}
Customer -> Storefront "browses and orders"
SupportAgent -> SupportPortal "resolves tickets"
RecommendBot -> Storefront "injects recommendations"
}
System view
System view
edges.krs
// Demonstrates: sync (->) and async (-->) edges, with and without labels.
system EdgeSample {
label "Edge Variants"
service A { label "Service A" }
service B { label "Service B" }
service C { label "Service C" }
service D { label "Service D" }
// Sync edges
A -> B "labelled sync call"
A -> C
// Async edges
B --> D "labelled async call"
C --> D
}
System view
System view
annotations.krs
// Demonstrates: all four lifecycle annotations — @deprecated, @new,
// @experimental, @migration_target — individually and combined.
system AnnotationSample {
label "Annotation Sample"
service LegacyAuth @deprecated {
label "Legacy Auth"
description "Scheduled for removal in Q3."
}
service NewAuth @new {
label "New Auth"
description "Introduced in the latest release."
}
service BetaSearch @experimental {
label "Beta Search"
description "Feature-flagged; not yet in general availability."
}
service MigrationBridge @deprecated @migration_target {
label "Migration Bridge"
description "Deprecated origin that is also the migration target stub."
}
LegacyAuth -> MigrationBridge "migrate traffic"
MigrationBridge -> NewAuth "forward requests"
NewAuth -> BetaSearch "delegate search"
}
System view
System view
external-nodes.krs
// Demonstrates: [external] tag on service and resource nodes.
// External nodes represent components outside the system boundary.
system ExternalSample {
label "External Nodes"
service OrderService {
label "Order Service"
domain OrderDomain {
label "Order Domain"
usecase PlaceOrder {
label "Place Order"
resource PaymentAPI [external] {
label "Payment API"
description "Third-party payment gateway outside our boundary."
}
resource InventoryDB {
label "Inventory DB"
}
}
}
}
service PaymentGateway [external] {
label "Payment Gateway"
description "External payment provider — not owned by this team."
}
OrderService -> PaymentGateway "charges card"
}
System view
System view
domain-drill.krs
// Demonstrates: full logical hierarchy — system → service → domain → usecase → resource.
// Use this to verify drill-down rendering at every level.
system ECommerce {
label "EC Platform"
service OrderService {
label "Order Service"
domain OrderDomain {
label "Order Domain"
usecase PlaceOrder {
label "Place Order"
resource OrderDB {
label "Order DB"
description "Primary database for order records."
}
resource PaymentAPI [external] {
label "Payment API"
}
}
usecase CancelOrder {
label "Cancel Order"
resource OrderDB {
label "Order DB"
}
}
}
domain ShippingDomain {
label "Shipping Domain"
usecase TrackShipment {
label "Track Shipment"
resource ShippingAPI [external] {
label "Shipping API"
}
}
}
}
}
System view
System view
Deploy view
Deploy view
deploy-all.krs
// Demonstrates: all deploy artifact types — war, jar, oci, lambda, function,
// assets, job (one-shot and scheduled), artifact.
system DeploySample {
label "Deploy Sample"
service LegacyApp { label "Legacy App" }
service ApiServer { label "API Server" }
service WorkerApp { label "Worker App" }
service WebFrontend { label "Web Frontend" }
service DataPipeline { label "Data Pipeline" }
service BillingJob { label "Billing Job" }
service FnHandler { label "Function Handler" }
service AzureFn { label "Azure Function" }
service LegacyBatch { label "Legacy Batch" }
}
deploy "Production" {
war "legacy-app" {
runtime "Tomcat 10"
realizes "LegacyApp"
}
jar "api-server" {
runtime "JVM 21"
realizes "ApiServer"
}
oci "worker" {
image "worker-app:latest"
runtime "Kubernetes"
realizes "WorkerApp"
}
lambda "fn-handler" {
runtime "Node.js 22"
realizes "FnHandler"
}
function "azure-fn" {
runtime "Node.js 20"
realizes "AzureFn"
}
assets "web-frontend" {
runtime "CloudFront"
realizes "WebFrontend"
}
job "data-pipeline" {
runtime "JVM 21"
realizes "DataPipeline"
}
job "monthly-billing" {
runtime "JVM 21"
schedule "0 0 1 * *"
realizes "BillingJob"
}
artifact "legacy-batch" {
type "COBOL batch"
runtime "Mainframe"
realizes "LegacyBatch"
}
}
System view
System view
domain-drift.krs
// Demonstrates: domain-to-domain edges across and within services.
//
// Cross-service edge (OrderDomain -> PaymentDomain):
// No explicit service edge exists, so an implicit service edge is derived
// and rendered in amber dashed style in the system view.
//
// Intra-service edge (OrderDomain -> ShippingDomain within OrderService):
// Both domains belong to OrderService, so the edge is rendered directly
// in the service drill-down view.
system DriftSample {
label "Domain Drift Sample"
service OrderService {
label "Order Service"
domain OrderDomain {
label "Order Domain"
description "Depends on PaymentDomain to process payments and ShippingDomain to ship orders."
OrderDomain -> PaymentDomain "decides payment"
OrderDomain -> ShippingDomain "triggers shipment"
}
domain ShippingDomain {
label "Shipping Domain"
description "Handles order shipment."
}
}
service PaymentService {
label "Payment Service"
domain PaymentDomain {
label "Payment Domain"
description "Handles payment processing for orders."
}
}
}
System view
System view
Deploy view
Deploy view
Org view
Org view
// Diagram legend syntax (Issue #833, #1513).
//
// `legend` blocks declare color-meaning pairs that render as a footer band
// below each diagram view. Two entry primitives exist:
// swatch <hex> "label" — explicit color sample
// ref <target> "label" — color from the .krs.style cascade for the
// given annotation / tag / id / type
//
// View scope is optional. When omitted, the legend appears on the top level
// of every view. `system` / `deploy` / `org` target a view type; `service` /
// `domain` target drill-down views rooted at that node kind (Issue #1513).
// Matching is exact — each level shows only the legends for its own scope.
system ECPlatform {
label "EC Platform"
service ECommerce {
label "EC Site"
domain Order {
label "Order"
usecase PlaceOrder { label "Place Order" }
}
}
service Payment [external] {
label "Payment"
}
service Legacy @deprecated {
label "Legacy"
}
}
deploy Production {
oci "ec-api" { realizes ECommerce }
oci "payment-api" { realizes Payment }
}
organization Acme {
team Backend {
label "Backend"
}
}
// Shown on the top level of every view (system / deploy / org).
legend "Owner team" {
swatch #2563EB "Team Backend"
swatch #16A34A "Team Frontend"
swatch #DC2626 "Third-party"
ref @deprecated "Deprecated"
ref [external] "External system"
ref service "Service"
ref #ECommerce "EC site (focus)"
}
// Deploy-only legend — physical layer specifics.
legend deploy "Hosting tier" {
swatch #0EA5E9 "Cloud Run"
swatch #F59E0B "On-prem"
}
// Shown only on drill-down views rooted at a service (e.g. ECommerce).
legend service "Service internals" {
swatch #8B5CF6 "Domain"
}
// Shown only on drill-down views rooted at a domain (e.g. Order).
legend domain "Domain vocabulary" {
swatch #3B82F6 "Usecase"
}
System view
System view
// Resource CRUD operations on usecases (Issue #1046) and the
// derived read/write edge differentiation in the usecase view (Issue #1061).
//
// `operations` declares which CRUD verbs the enclosing usecase performs on a
// resource. Recognized verbs are `create` / `read` / `update` / `delete`.
// Unknown verbs still parse (preserved for translate adapters that emit
// `list` / `search` / `execute`) but raise an `unknown-resource-operation`
// warning. Omission keeps the dependency opaque — no diagnostic.
//
// In the usecase drill-down view the renderer derives a write-vs-read
// classification from `operations` and shows it via:
// - synthesized usecase->resource edge gets a [write] / [read] pseudo-tag
// - edge label: "W" for write, "R" for read
// - edge stroke-width: 2 for write, 1.5 for read (default style)
// Hierarchy: read (1.5) < write (2) < cyclic (2.5) keeps cyclic the
// most attention-grabbing axis.
//
// This file is the AT-friendly minimal sample. See `examples/ja/ec-platform/`
// for the same property used in a realistic scenario.
system Demo {
label "Resource operations demo"
database OrderDB {
table OrderTable { label "Orders table" }
}
service Backend {
domain Order {
// Write usecase: edge renders thicker with "W" label.
usecase PlaceOrder {
label "Accept a new order"
resource OrderDB.OrderTable {
operations create, read
}
resource InventoryAPI [external] {
label "Inventory check API"
operations read
}
}
// Multi-line form accumulates verbs; still classified as write
// because update is in the list.
usecase UpdateOrder {
label "Modify an order"
resource OrderDB.OrderTable {
operations read
operations update
}
}
// Pure read usecase: edge renders thinner with "R" label.
usecase QueryOrder {
label "Query order status"
resource OrderDB.OrderTable {
operations read
}
}
// Omission form — opaque dependency. Renders as read (conservative)
// with "R" label and the default thin stroke.
usecase ListOrders {
label "List recent orders"
resource OrderDB.OrderTable
}
}
}
}

© 2026 Hiroki Kondo · Licensed under Apache-2.0