`val` is read-only (can't reassign the reference); `var` is mutable. Default to `val` everywhere — Kotlin's style guide recommends it, and a Compiler warning fires if a `var` is never reassigned.
`var` for local variables lets the compiler infer the type from the initializer. Reduces noise when the type is obvious from context — but you still get static typing.