Commit Guidelines

BEFORE creating any commit, you MUST read docs/code_authoring_and_core_review.md — it contains essential rules for commit messages, code review process, and MR structure.

IMPORTANT formatting rules:

  • Reference relevant YouTrack issues with ^KT-XXXXX, placed as a trailer at the very end of the commit message — after the body, separated by a blank line.
    • Put each reference on its own line, one issue per line.
    • Use a bare ^KT-XXXXX to link an issue or append a YouTrack command such as ^KT-XXXXX Fixed to also change the issue's state.
    • Within the body text, a plain KT-XXXXX (no ^) is fine when mentioning an issue inside a sentence. Reserve the ^KT-XXXXX trailer for the issue(s) the commit actually addresses.
  • Prefix the subject line with an appropriate tag for the subsystem (such as, but not exhaustive, [FIR], [K/N], or [BTA]).
    • Consult the Subsystem Tags list below for the most popular tags.
  • Keep the subject line to 72 columns (including the [Tag] prefix).
  • Hard-wrap the body at 72 columns. This is a fill target, not just a ceiling — pack each line as close to 72 as it goes, and only wrap to a new line when the next word would cross 72. Do not wrap early.
  • Use imperative mood.
  • Commit messages must explain not just WHAT but also WHY and HOW.
  • Commit tests together with corresponding code changes.
  • Non-functional changes (refactorings, reformats) should be in separate commits.

Example

[FIR] Fix overload resolution for secondary constructors

Explain what changed and why, hard-wrapped at 72 columns. This also
unblocks KT-99999, which can now be revisited.

^KT-12345 Fixed
^KT-67890

Subsystem Tags

This is a list of the most popular subsystem tags to be used in the subject line prefix (see the formatting rules above).

Where a tag maps to an Area, the area name is given so you can read its docs.

  • FIRFIR (K2 frontend) area.
  • TestsTest infrastructure area.
  • Analysis APIAnalysis API area.
  • GradleKotlin Gradle Plugin area; general Gradle build integration.
  • K/NBackend: Native area (Kotlin/Native).
  • Build — The Kotlin repository's own build configuration and infrastructure (Gradle build scripts, bootstrap, verification metadata).
  • IRIR area.
  • WasmBackend: WASM area.
  • BTABuild Tools API area.
  • JSBackend: JS area.
  • NativeBackend: Native area (alias of K/N).
  • JVMBackend: JVM area.
  • KDF — The Kotlin DataFrame compiler plugin (under Compiler plugins).
  • LL — Low-Level FIR API, part of the Analysis API area.
  • K/JSBackend: JS area (Kotlin/JS).
  • CLI — Compiler command-line interface and the top-level compilation pipeline.
  • stubs — PSI stub building for source and binary declarations (used by the Analysis API).
  • Reflection — kotlin-reflect, the runtime reflection library.
  • K2 — The K2 compiler as a whole (FIR-based frontend and related machinery).
  • FE — K2/FIR frontend work, especially type inference, call resolution, and checkers (a finer-grained sibling of FIR).
  • Swift Export — Generating Swift API from Kotlin for Apple interop (Kotlin/Native).
  • Lombok — The Lombok compiler plugin (under Compiler plugins).
  • Maven — The Kotlin Maven plugin and Maven build integration.
  • PL — Partial linkage in the KLIB/IR linker.
  • PSIPSI area.
  • Klib — The KLIB format and Kotlin library artifacts (Native/JS/Wasm).
  • FIR2IR — The fir2ir phase that lowers FIR to IR (part of the FIR (K2 frontend) area).
  • SLC — Symbol Light Classes, part of the Analysis API area.
  • KGPKotlin Gradle Plugin area.
  • stdlibStandard library area.
  • Scripting — Kotlin scripting support (.kts files and the scripting API).
  • decompiler — The Kotlin binary (.class/metadata) decompiler and cls stub builder (used by the Analysis API).
  • SSoT — Single source of truth for compiler arguments, shared by the CLI and Build Tools API.
  • LC — Light Classes, part of the Analysis API area.
  • Compose — The Jetpack Compose compiler plugin (under Compiler plugins).
  • PowerAssert — The power-assert compiler plugin (under Compiler plugins).
  • ObjCExport — Objective-C export in Kotlin/Native.
  • ABI Validation — Tooling that tracks public API/ABI changes for compatibility.