Feature samples
Small single-purpose snippets, each demonstrating one feature.
Minimal valid input
Section titled “Minimal valid input”// 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"}User nodes ([human] / [ai])
Section titled “User nodes ([human] / [ai])”// 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"}Sync / async edges
Section titled “Sync / async edges”// 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}All four annotations
Section titled “All four annotations”// 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"}[external] tag
Section titled “[external] tag”// 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"}Full drill-down hierarchy
Section titled “Full drill-down hierarchy”// 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" } } } }}All deploy artifact types
Section titled “All deploy artifact types”// 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" }}Domain drift warning
Section titled “Domain drift warning”// 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." } }}Legend block
Section titled “Legend block”// 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"}resource operations (CRUD)
Section titled “resource operations (CRUD)”// 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