Skip to content

For Overwatch Workshop and OverPy

Workshop code, checked.

Stop guessing where the server-load risks are. Wright statically analyzes Workshop and OverPy code and points every problem to a line.

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash
Terminal
$ wright lint rules.txt╭─ WARN lint│  1 warning(s), 1 info finding(s)│├─ warning[min-wait-loop]: loop body waits at the workshop minimum rate; the loop runs at maximum frequency│  --> rules.txt:27:3│├─ info[expensive-loop-check]: geometry predicate evaluated inside a loop body may be expensive per iteration│  --> rules.txt:29:7│╰─ 1 file(s) affected

Copy. Save. Check.

  1. 1

    Copy from the game

    Copy your rules or full game settings, the same way you would to share them.

  2. 2

    Paste into a file

    Save it as a text file, such as rules.txt. English and Chinese client code both work.

  3. 3

    Run Wright

    Each finding points to a line in the file. Fix it, then paste it back into the game.

    wright lint rules.txt

What it catches.

  • Typos

    A misspelled action or value, caught before you paste the code back.

    Heall(Event Player, Null, 10);

    error[unknown-action]: unknown action spelling 'Heall' for locale 'en-us' (did you mean 'Heal'?)

  • While without Wait

    A loop that never pauses can overload the server.

    While(Is Alive(Event Player));
    	Heal(Event Player, Null, 10);
    End;

    warning[while-without-wait]: loop body contains no wait call

  • Waiting 0.016 seconds

    The loop runs as fast as the game allows.

    While(Is Alive(Event Player));
    	Wait(0.016, Ignore Condition);
    	Heal(Event Player, Null, 10);
    End;

    warning[min-wait-loop]: loop body waits at the workshop minimum rate

  • Line of sight in a loop

    A geometry check repeated on every pass can get expensive.

    While(Is Alive(Event Player));
    	Wait(0.25, Ignore Condition);
    	If(Is In Line of Sight(Event Player, Vector(0, 0, 0), Barriers Do Not Block LOS));
    		Heal(Event Player, Null, 10);
    	End;
    End;

    info[expensive-loop-check]: geometry predicate evaluated inside a loop body

More tools.

  • Analyze

    Element cost, your most complex rules, server-load risks, and the variables most rules share. Each result says whether it is exact, static, or a heuristic.

    wright analyze
  • Inspect

    Query rules, symbols, references, control flow, and call graphs. inspect cost breaks down each rule’s element cost and compares it with your last run.

    wright inspect
  • Checked edits

    Rename a variable or subroutine, or apply lint fixes with lint --fix. Wright shows the validated diff first and writes only with --write.

    wright rename
  • Lookup

    Turn a near spelling into the exact name and signature of an action or value, in Workshop or OverPy.

    wright lookup
  • Editor

    Errors as you type in editors that support language servers. Workshop files get hover, go to definition, and find references; OverPy files get navigation and rename. No VS Code extension yet.

    wright-lsp
  • CI

    Run Wright in GitHub Actions and findings show up on the pull request.

    wright lint

Workshop, OverPy, and OSTW.

  • Workshop

    Supported

    Full native syntax. Code from the English or Chinese client works as is.

    workshop-rs
  • OverPy

    Partial

    Keep your .opy files. Wright checks, lints, analyzes, and renames them, and compiles them to Workshop with output held to the original OverPy compiler.

    opy-rs
  • OSTW

    Paused

    deltin-rs parses and type-checks OSTW, but feature work is paused. Wright does not support it yet.

    deltin-rs

Built for coding agents, too.

  • JSON output

    Add --format json to any command. One versioned schema.

  • Stable codes

    Diagnostic codes, rule IDs, and exit codes an agent can rely on.

  • Agent guide and MCP

    wright agent install adds the Wright guide to your project. Add --mcp claude, cursor, or vscode to register the MCP server too.

Coming soon
  • From request to change

Get Wright.

wright and wright-lsp, in one install.

Homebrew

Apple silicon & Intel
brew install wrightkit/tap/wright

Installs the released wright and wright-lsp binaries.

Installer script

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash

Release archives and checksums for every platform are on the GitHub Releases page.