Architecture diagrams you actually control.
Arkitecture compiles a tiny .ark text file into a clean SVG
diagram. You describe the structure and the layout — the tool only measures
text and packs boxes. It never moves anything you didn't ask it to.
webapp {
label: "Web App"
}
api {
label: "API"
}
database {
label: "Database"
}
webapp --> api
api --> database
@layout {
margin: 20
}
Why a manual layout language?
Graphviz, Mermaid, and friends decide where the boxes go — the result is often "good enough" but rarely exactly what you want, and you can't fix it without fighting the algorithm. Arkitecture inverts that: the layout is a consequence of rules you can see in the source.
Deterministic layout
The same input always produces the same diagram. Every position follows a rule in the source — no hidden engine to second-guess.
Plain, legible output
White boxes, a 1px border, one font. Built for high-level diagrams — DDD bounded contexts, service boundaries, system overviews.
Diagrams as text
The .ark source lives in version control next to the code it documents, and diffs like any other file.
One portable binary
A single self-contained Go executable — nothing to install at runtime, nothing to keep up to date.
Runs in the browser
The same pure library compiles to WebAssembly, so the exact pipeline runs in Node or the browser too.
Errors as data
Syntax, reference, and range problems are reported all at once with line and column positions — never one-at-a-time.
Quick start
Install the CLI with Homebrew (a signed, notarized binary on macOS; Linux works too), or with Go:
# Homebrew
brew install kurrik/tap/arkitecture
# Or via Go — install the binary, or run straight from source
go install github.com/kurrik/arkitecture/cmd/arkitecture@latest
go run github.com/kurrik/arkitecture/cmd/arkitecture diagram.ark diagram.svg
# Generate an SVG; validate without generating; watch and regenerate on save
arkitecture diagram.ark diagram.svg
arkitecture diagram.ark --validate-only
arkitecture diagram.ark --watch
Or use it as a library:
import "github.com/kurrik/arkitecture"
res := arkitecture.ToSVG(dsl, nil)
if res.Success {
fmt.Println(res.SVG)
}
Next: the full syntax · more examples.