Full language support for Satsuma: syntax highlighting, an LSP server with navigation and completions, real-time diagnostics, and interactive workspace visualization. All parser-backed.
Every feature is backed by the tree-sitter parser. No regex heuristics, no guesswork — deterministic, correct results as you type.
TextMate grammar for immediate highlighting of all Satsuma constructs — keywords, types, metadata, strings, comments, and operators.
Semantic tokens from the LSP override TextMate scopes for context-sensitive constructs: source/target as keyword vs. field name, vocabulary tokens, and more.
Parse errors — red squiggles as you type, powered by tree-sitter ERROR and MISSING nodes.
Semantic warnings — yellow squiggles on save via satsuma validate: undefined schemas, duplicate names, broken imports.
Marker comments — //! warnings and //? questions surface in the Problems panel.
Go-to-Definition (Ctrl+Click / F12) — jump to schema definitions, fragment blocks, imported definitions, and import file paths.
Find References (Shift+F12) — locate all usages of a schema, fragment, or transform across the workspace.
Rename Symbol (F2) — rename across all files with duplicate detection. Handles namespace-qualified references.
Context-aware completions for every position:
source / target blocks...pk, pii, scd, required, etc.trim, lowercase, coalesce, etc.import { } declarationsOutline Panel — schemas, mappings, fragments, transforms, metrics, namespaces, and notes with nested fields.
Breadcrumbs — automatic navigation breadcrumbs from document symbols.
Code Folding — fold any block type: schema, mapping, fragment, transform, metric, note, namespace, each, flatten, map literal, metadata, nested arrow.
Hover — contextual info for blocks, fields, tags, spreads, arrow paths, and pipeline functions.
Opinionated, zero-config formatting. One canonical style for all Satsuma files — field column alignment, consistent spacing, normalised blank lines.
Trigger with Shift+Alt+F or enable format-on-save. Same formatter as satsuma fmt in the CLI.
Inline annotations above every block, giving you at-a-glance structural insight:
schema
N fields | used in M mappings
mapping
source → target | N arrows
fragment
spread in N places
transform
used in N places
metric
sources: schema1, schema2
Access every command from the Command Palette (Ctrl+Shift+P). Each one integrates directly with the Satsuma CLI.
Run satsuma validate and populate the Problems panel with semantic errors.
Pick a schema and trace its downstream data flow through the pipeline.
Surface all //! warning comments in the Problems panel.
Display workspace statistics: schema count, mapping count, arrow count, and more.
Open an interactive SVG diagram of your workspace with click-to-navigate nodes.
Open a visual multi-hop trace showing how a field flows from source to target.
Gutter markers and status bar showing mapped vs. unmapped fields with coverage percentage.
Three dedicated webview panels bring your mapping workspace to life, right inside VS Code.
An interactive SVG diagram of your entire workspace, laid out by block type.
Trace a single field through the entire data pipeline with multi-hop chain visualization.
satsuma arrows
See at a glance which target fields are mapped and which are missing.
Download the extension, install it, and open any .stm file.
Download vscode-satsuma-v0.7.0.vsix from the v0.7.0 release (or the latest unstable build), then install:
$ code --install-extension vscode-satsuma-v0.7.0.vsix
Clone the repo and build the extension yourself:
$ cd tooling/vscode-satsuma $ npm install $ cd server && npm install && cd .. $ npm run build $ npx @vscode/vsce package --no-dependencies -o vscode-satsuma.vsix $ code --install-extension vscode-satsuma.vsix
Required for the Language Server Protocol client and all extension features.
Needed only for building from source. Not required when installing the pre-built .vsix.
satsuma CLI on PATHRequired for validation diagnostics, workspace commands, and webview panels. Download from the v0.7.0 release or see the CLI page.
If satsuma is not on your PATH, set the satsuma.cliPath setting in VS Code to the full path of the CLI executable.
Satsuma is open source and free. Start mapping in minutes.