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.

pipeline.ark
webapp {
  label: "Web App"
}
api {
  label: "API"
}
database {
  label: "Database"
}

webapp --> api
api --> database

@layout {
  margin: 20
}
rendered output
Three boxes — Web App, API, Database — connected left to right by arrows.

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.