# Brine > Brine is a compiled systems language with Python-like syntax. The compiler proves contracts and array bounds at compile time, data races and distributed deadlocks are compile errors, `par` constructs run on every core or the GPU, and parallel reductions give the same bits on every machine. Key facts for writing Brine: - Blocks use `:` and 4-space indentation, like Python. Files end in `.br`. - `let` is immutable, `var` is mutable. No implicit numeric conversions. - Values are copied (copy-on-write); `ref` parameters change the caller's variable and the caller writes `f(ref x)`. - `requires`, `ensures`, `invariant` and `prove` must be proven at compile time; `assert` checks at runtime and becomes a fact. - Inside `par for i in ...`, outer arrays may only be written at `[i]`. - Run `brine check` after every edit; add `--json` for machine-readable diagnostics; `brine explain ` explains any error. - Every page of these docs is also available as Markdown: add `.md` to its URL. ## Documentation Sets - [Abridged documentation](https://docs.brinelang.org/llms-small.txt): a compact version of the documentation for Brine, with non-essential content removed - [Complete documentation](https://docs.brinelang.org/llms-full.txt): the full documentation for Brine - [Language](https://docs.brinelang.org/_llms-txt/language.txt): syntax, types and the standard built-ins - [Parallelism](https://docs.brinelang.org/_llms-txt/parallelism.txt): par constructs, GPUs and the world module - [Proofs](https://docs.brinelang.org/_llms-txt/proofs.txt): contracts, the prover and runtime checks ## Notes - The complete documentation includes all content from the official documentation - The content is automatically generated from the same source as the official documentation