Wright is a tooling-first semantic platform for the Overwatch Workshop and OverPy ecosystem. Built natively in Rust, it provides independent semantic frontends, typed intermediate representations, static analysis and linting, editor language services, and reusable embedding APIs for developers, CI, and AI agents.
Creating and maintaining complex Overwatch Workshop scripts requires reliable compilation, semantic validation, and modern developer tooling. Wright delivers an independent, standalone Rust toolchain with zero runtime dependencies (requiring neither Node.js, .NET, nor external interpreters) for core compilation and analysis.
Wright treats developer tooling (linting, diagnostics, semantic queries, editor assistance, and safe source transformations) as first-class product surfaces alongside compiler code generation.
- High-Performance Compiler: Compile
.opysource scripts and Workshop text to optimized, localized Workshop code. - Deterministic Diagnostics: Structured errors, warnings, and source
spans surfaced in human-readable terminal format and the machine-readable
wright-result/v1JSON contract. - First-Class Linting (
wright lint): Static stability and performance analysis with configurable rules (min-wait-loop,duplicate-condition,expensive-loop-check,repeated-value,while-without-wait) and explicit evidence labeling. - Language Server (
wright-lsp): Lightweight LSP implementation providing hover documentation, definition navigation, reference searches, project-wide identifier rename, and semantic syntax highlighting. - Embedding & Agent Tooling: Session-based driver (
wright-driver) with stdio/JSON-RPC adapters (wright-serve) enabling programmatic inspection, cost estimation, and verified source-level refactoring. - Standalone Distribution: Self-contained binaries with zero external runtime dependencies.
Wright analyzes and compiles three languages through one shared pipeline,
with Vanilla Workshop text as the common interchange format: OverPy
(.opy), OSTW / DeltinScript (.ostw / .del), and Vanilla Workshop.
| System | Check & analyze | Compile / convert | Notes |
|---|---|---|---|
OverPy (.opy) |
β Supported | β Supported | Compiles .opy to Workshop and reconstructs Workshop back to .opy; corpus-evidenced against the pinned [email protected] reference |
OSTW / DeltinScript (.ostw / .del) |
π‘ Partial | π‘ Partial | Declared compile subset (types & expressions, functions & control flow, catalog signatures); reconstructing Workshop back to OSTW is supported |
| Vanilla Workshop | β Supported | β Supported | Native parser, localized catalog, validation, and deterministic emission (en-US baseline) |
Workshop is the common hub for cross-language conversion:
| Direction | Status | Notes |
|---|---|---|
| OPY β Workshop | β Supported | Emits through workshop-rs |
| OSTW β Workshop | π‘ Partial | Declared subset (see above); emits through workshop-rs |
| Workshop β OPY | β Supported | wright convert --target opy |
| Workshop β OSTW | β Supported | wright convert --target ostw |
| Workshop β Workshop | β Supported | Parse β canonical intermediate representation β deterministic emit |
Direct OPY β OSTW source translation is an optional side path and does not drive core architecture.
Note
Compatibility is measured per capability against pinned reference evidence, not as a single aggregate percentage.1
Wright ships standalone wright and wright-lsp binaries for Linux x86_64,
macOS (Apple Silicon and Intel), and Windows x86_64. All installation paths
below consume the same canonical GitHub Release
archives and verify the published checksums; none of them build Wright from
source.
Homebrew is the recommended path (install the WrightKit tap once, then
wright as a normal formula):
brew tap wrightkit/tap
brew install wrightkit/tap/wrightAlternatively, use the Unix installer:
curl -fsSL https://wrightkit.dev/install.sh | bashcurl -fsSL https://wrightkit.dev/install.sh | bashThe installer detects your platform, downloads the matching release archive,
verifies its SHA-256 checksum, and installs wright and wright-lsp into
~/.local/bin (add that directory to your PATH if the installer asks).
WinGet is the recommended path (available after the package clears upstream review):
winget install WrightKit.WrightScoop is an alternative package-manager path:
scoop bucket add wrightkit https://github.com/wrightkit/scoop-bucket
scoop install wrightBoth WinGet and Scoop consume the same Windows release ZIP.
For Node.js workflows and agent tooling, install Wright as a platform-native npm package:
# Run on-demand with npx
npx @wrightkit/wright --version
# Or add to a project
npm install @wrightkit/wright
npx wright check main.opyDownstream JavaScript/TypeScript packages can depend on @wrightkit/wright directly and resolve the native binary path programmatically without runtime download scripts:
const { getBinaryPath } = require('@wrightkit/wright');
const wrightBin = getBinaryPath('wright');Pin an exact version non-interactively for deterministic installs:
curl -fsSL https://wrightkit.dev/install.sh | bash -s -- --version 0.1.0or consume the release archives directly (see below). Installer options:
--version <version> pins an exact version, --dir <directory> selects a
custom installation directory, --help lists all options.
Download precompiled release archives and verify them by hand when you need full control:
VERSION=0.1.0
TARGET=x86_64-unknown-linux-gnu # or aarch64-apple-darwin / x86_64-apple-darwin / x86_64-pc-windows-msvc
BASE="https://github.com/wrightkit/wright/releases/download/v$VERSION"
curl -fsSL -O "$BASE/wright-$VERSION-$TARGET.tar.gz"
curl -fsSL -O "$BASE/wright-$VERSION-$TARGET.tar.gz.sha256"
shasum -a 256 -c "wright-$VERSION-$TARGET.tar.gz.sha256"
tar -xzf "wright-$VERSION-$TARGET.tar.gz"
export PATH="$PWD/wright-$VERSION-$TARGET:$PATH"Windows distributions are provided as .zip archives. Full packaging,
checksum, and package-manager publication details are in the
Release Documentation and
Distribution Documentation.
Standalone installations (the Unix installer or manual archives) update themselves in place:
wright update # upgrade wright and wright-lsp to the latest stable release
wright update --check # report whether an update is available, without modifying anything
wright update --version 0.2.0 # install an exact versionwright update downloads the same checksum-verified release archives as the
installer, replaces both binaries atomically, and never touches
package-manager-managed installations; Homebrew, Scoop, and WinGet installs
should upgrade through their own channel (brew upgrade wrightkit/tap/wright,
scoop update wright, winget upgrade WrightKit.Wright).
Build all tools from the root workspace using Rust 1.85.0+:
cargo build --release -p wright-cli -p wright-lspBinaries will be placed in target/release/wright and target/release/wright-lsp.
# Compile source to Workshop text
wright compile input.opy
# Validate and report diagnostics
wright check input.opy
# Run stability and performance lint checks
wright lint input.opy
# Perform deep semantic analysis
wright analyze input.opy
# Inspect structural model, rules, and symbols
wright inspect input.opy
# Stdin piping
cat input.opy | wright lint -
# Machine-readable JSON output for CI / agent integration
wright lint input.opy --format jsonIntegrate wright-lsp into your preferred editor (VS Code, Neovim, Emacs,
Zed) by registering wright-lsp as the language server binary for .opy and
.ws filetypes over standard I/O.
Wright processes source code through a modular, owned pipeline:
Source Input (.opy or Workshop text)
β
Owned Semantic Frontend (wright-opy / workshop-rs via wright-workshop adapter)
β
Wright High-Level Intermediate Representation (HIR)
β
Wright Workshop IR (WIR) & Semantic Analysis (wright-analyzer)
βββ Compiler Backend β Emitted Workshop text
βββ Lint & Static Analysis (wright lint)
βββ Language Services & LSP (wright-language / wright-lsp)
βββ Embedding & Tool APIs (wright-driver / wright-serve)
- Owned Frontends: Parse source into typed representations with full source provenance without leaking third-party AST types.
- Wright HIR & WIR: Provide frontend-independent semantic and target-level data structures.
- Semantic Layer: Performs symbol resolution, control-flow graph (CFG) construction, reference indexing, and lint evaluation.
- Target Emission: Generates deterministic, catalog-verified Workshop output.
Architecture, compatibility methodology, APIs, release guidance, ADRs, and
maintainer references are indexed in docs/README.md.
Contributions are welcome! Please read AGENTS.md and
CONTRIBUTING.md before making changes.
Wright requires Rust Edition 2024 (MSRV 1.85.0). Run standard quality gates before submitting changes:
# Code formatting
cargo fmt --all -- --check
# Linter checks
cargo clippy --workspace --all-targets --all-features -- -D warnings
# Test suite
cargo test --workspace --all-targets --all-features </dev/nullWright is distributed under the terms of the GNU Affero General Public License v3.0 or later.
Third-party compatibility references, test fixtures, and adapter components are
isolated and governed by their own recorded licenses and provenance; see
docs/licensing.md.
Footnotes
-
See the compatibility methodology, release/compatibility matrix, and the OverPy, OSTW, and Workshop support references. β©