{"id":49109867,"url":"https://github.com/snicmakino/kolt","last_synced_at":"2026-04-29T01:04:44.275Z","repository":{"id":350925400,"uuid":"1205030015","full_name":"snicmakino/kolt","owner":"snicmakino","description":"A lightweight build tool for Kotlin, written in Kotlin/Native","archived":false,"fork":false,"pushed_at":"2026-04-28T03:32:58.000Z","size":2044,"stargazers_count":2,"open_issues_count":18,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-28T05:22:57.264Z","etag":null,"topics":["build-tool","dependency-management","kotlin","kotlin-native","package-manager"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snicmakino.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-08T15:08:34.000Z","updated_at":"2026-04-28T03:32:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/snicmakino/kolt","commit_stats":null,"previous_names":["snicmakino/kolt"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/snicmakino/kolt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicmakino%2Fkolt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicmakino%2Fkolt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicmakino%2Fkolt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicmakino%2Fkolt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snicmakino","download_url":"https://codeload.github.com/snicmakino/kolt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snicmakino%2Fkolt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32405905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-tool","dependency-management","kotlin","kotlin-native","package-manager"],"created_at":"2026-04-21T04:04:53.539Z","updated_at":"2026-04-29T01:04:44.270Z","avatar_url":"https://github.com/snicmakino.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kolt\n\n[![Unit tests](https://github.com/snicmakino/kolt/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/snicmakino/kolt/actions/workflows/unit-tests.yml)\n[![Self-host smoke test](https://github.com/snicmakino/kolt/actions/workflows/self-host-smoke.yml/badge.svg)](https://github.com/snicmakino/kolt/actions/workflows/self-host-smoke.yml)\n\n[English](README.md) | 日本語\n\n\u003e v0.16.2 — 初期段階のプロジェクトです。破壊的変更の可能性があります。\n\nKotlin 向けの軽量ビルドツールです。TOML 設定ファイルのみで動作し、Kotlin DSL のビルドスクリプト評価は不要です。単一の Kotlin/Native バイナリとして配布されるため、利用に Java のインストールは必要ありません。\n\nツール自体は瞬時に起動します。実際のコンパイルは `kotlinc` / `konanc` に委譲するため、ビルド時間は Kotlin コンパイラに直接依存します。mtime ベースのキャッシュによるインクリメンタルビルドで、変更のないソースは完全にスキップされます。ウォーム JVM コンパイラデーモンが JVM 起動コストを償却し、ウォームビルドの典型的なレイテンシは約 0.3 秒です。\n\n## インストール\n\nLinux x64 環境で最新リリースをインストール:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/snicmakino/kolt/main/install.sh | sh\n```\n\nインストーラーは GitHub Releases から該当 version の tarball を取得し、SHA-256 を検証した上で `~/.local/share/kolt/\u003cversion\u003e/` 配下に展開し、`~/.local/bin/kolt` に symlink を作成します。`~/.local/bin` を `PATH` に追加する必要がある場合があります:\n\n```sh\nexport PATH=\"$HOME/.local/bin:$PATH\"\n```\n\n### 環境変数\n\n- `KOLT_VERSION=\u003cv\u003e` — 最新版ではなく特定 version をインストール\n- `KOLT_ALLOW_YANKED=1` — yank された version でも強制インストール (デフォルトでは推奨される replacement を表示して refuse)\n\n### サポート対象 platform\n\n初版は **linux-x64 のみ**。macOS は [#82](https://github.com/snicmakino/kolt/issues/82)、linuxArm64 は [#83](https://github.com/snicmakino/kolt/issues/83) で別 track。それ以外の platform は [ソースからビルド](#ソースからビルド) を参照。\n\n## クイックスタート\n\n```sh\nmkdir my-app \u0026\u0026 cd my-app\nkolt init\nkolt build\nkolt run\n```\n\nカレントディレクトリに以下の構造が生成されます：\n\n```\nkolt.toml\nsrc/Main.kt\ntest/MainTest.kt\n```\n\nプロジェクト名はディレクトリ名から推測されます。別の名前を使う場合：\n\n```sh\nkolt init custom-name\n```\n\n## コマンド\n\n```\nkolt init [name]       新しいプロジェクトを作成\nkolt build             プロジェクトをコンパイル（デフォルトは debug プロファイル）\nkolt build --release   release プロファイルでコンパイル\nkolt run               ビルドして実行（kolt run -- args でアプリ引数を渡す）\nkolt test              ビルドしてテスト実行（kolt test -- args で JUnit Platform 引数を渡す）\nkolt check             成果物を生成せずに型チェック\nkolt add \u003cdep\u003e         依存を追加（deps add のエイリアス）\n\n# --watch フラグ：ソースを監視し、変更時に再ビルド\nkolt build --watch     監視して再ビルド\nkolt test --watch      監視して再テスト\nkolt run --watch       監視して再ビルド・アプリ再起動\nkolt check --watch     監視して型チェック\nkolt fmt               ktfmt でソースファイルをフォーマット\nkolt fmt --check       フォーマットチェック（CI モード）\nkolt clean             ビルド成果物を削除\n\nkolt deps add \u003cdep\u003e    依存を追加\nkolt deps install      依存を解決して JAR をダウンロード\nkolt deps update       依存を再解決してロックファイルを更新\nkolt deps tree         依存ツリーを表示\n\nkolt toolchain install kolt.toml で定義された kotlinc バージョンをインストール\n\nkolt daemon stop       このプロジェクトのコンパイラデーモンを停止\nkolt daemon stop --all 全コンパイラデーモンを停止\nkolt daemon reap       古いデーモンディレクトリと孤立ソケットを削除\n\nkolt --version         バージョンを表示\n```\n\n`install`、`update`、`tree` はトップレベルのエイリアスとしても利用可能です（例：`kolt install`）。\n\n### フラグ\n\n| フラグ | 説明 |\n|--------|------|\n| `--watch` | ソースファイルを監視し、変更時にコマンドを再実行（build/check/test/run） |\n| `--no-daemon` | この実行でウォームコンパイラデーモンをスキップ。daemon サポート対象外の Kotlin バージョン (ADR 0022) でも常に利用可能。 |\n| `--release` | release プロファイルでビルドする。Native は `-opt` を有効化し `-g` を外して `build/release/` に出力。JVM では宣言上 no-op（kotlinc 引数も daemon IC パスも変わらない）だが、両プロファイル成果物を相互に上書きしないよう成果物パスは `build/release/\u003cname\u003e.jar` に切り替わる。デフォルトは `debug` プロファイルで、両プロファイルの成果物はディスク上に共存するためプロファイルを切り替えても他方の IC が無効化されることはない。詳細は [ADR 0030](docs/adr/0030-build-profiles.md) を参照。 |\n\n## 設定\n\n`kolt.toml` — 宣言的な TOML ベースの設定ファイル：\n\n```toml\nname = \"my-app\"\nversion = \"0.1.0\"\n\n[kotlin]\nversion = \"2.3.20\"\n\n[kotlin.plugins]\nserialization = true\n\n[build]\ntarget = \"jvm\"\njvm_target = \"25\"\nmain = \"main\"\nsources = [\"src\"]\nresources = [\"resources\"]\ntest_resources = [\"test-resources\"]\n\n[dependencies]\n\"org.jetbrains.kotlinx:kotlinx-coroutines-core\" = \"1.9.0\"\n\n[repositories]\ncentral = \"https://repo1.maven.org/maven2\"\njitpack = \"https://jitpack.io\"\n```\n\n### フィールド\n\n| キー | 説明 | デフォルト |\n|------|------|-----------|\n| `name` | プロジェクト名 | （必須） |\n| `version` | プロジェクトバージョン | （必須） |\n| `[kotlin] version` | Kotlin 言語／API バージョン（`compiler` 未指定時はコンパイラバージョンも兼ねる） | （必須） |\n| `[kotlin] compiler` | `version` と独立して kotlinc / daemon のバージョンを固定（`\u003e= version` 必須） | `version` |\n| `[kotlin.plugins]` | コンパイラプラグイン（`serialization`、`allopen`、`noarg`） | `{}` |\n| `[build] target` | `\"jvm\"` または KonanTarget（`\"linuxX64\"`, `\"linuxArm64\"`, `\"macosX64\"`, `\"macosArm64\"`, `\"mingwX64\"`） | （必須） |\n| `[build] jvm_target` | JVM バイトコードターゲット | `\"25\"` |\n| `[build] jdk` | daemon/runtime 用の JDK バージョン | （ホスト JDK） |\n| `[build] main` | エントリポイント関数の FQN（例：`\"main\"` または `\"com.example.main\"`） | （必須） |\n| `[build] sources` | ソースディレクトリ | （必須） |\n| `[build] test_sources` | テストソースディレクトリ | `[\"test\"]` |\n| `[build] resources` | ビルド出力に含めるリソースディレクトリ | `[]` |\n| `[build] test_resources` | テスト時のクラスパスに追加するリソースディレクトリ | `[]` |\n| `[fmt] style` | ktfmt スタイル：`\"google\"`、`\"kotlinlang\"`、`\"meta\"` | `\"google\"` |\n| `[[cinterop]]` | native target 用の C interop バインディング（`.def` ごとに 1 エントリ） | `[]` |\n| `[repositories]` | Maven リポジトリ（名前 = URL） | Maven Central のみ |\n\n### 依存関係\n\n`kolt add` で依存を追加：\n\n```sh\nkolt add org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0\nkolt add org.jetbrains.kotlinx:kotlinx-coroutines-core   # 最新安定バージョン\nkolt add --test io.kotest:kotest-runner-junit5:5.8.0      # テスト依存\n```\n\nまたは `[dependencies]` に Maven 座標を直接記述：\n\n```toml\n[dependencies]\n\"org.jetbrains.kotlinx:kotlinx-coroutines-core\" = \"1.9.0\"\n\"com.squareup.okhttp3:okhttp\" = \"4.12.0\"\n```\n\n`kolt install` を実行すると、ビルドせずにすべての依存を解決・ダウンロードします。\n\n推移的依存は POM メタデータを通じて自動解決されます。`kolt.lock` ファイルがバージョンと SHA-256 ハッシュを記録し、再現可能なビルドを保証します。\n\n### カスタムリポジトリ\n\nデフォルトでは Maven Central から依存を解決します。カスタムリポジトリ（例：JitPack）を追加するには `[repositories]` で宣言します：\n\n```toml\n[repositories]\ncentral = \"https://repo1.maven.org/maven2\"\njitpack = \"https://jitpack.io\"\n```\n\nリポジトリは宣言順に試行されます。省略時は Maven Central が使用されます。\n\n### コンパイラプラグイン\n\n`[kotlin.plugins]` で Kotlin コンパイラプラグインを有効化：\n\n```toml\n[kotlin.plugins]\nserialization = true\n```\n\n対応プラグイン：`serialization`、`allopen`、`noarg`。プラグイン JAR は Kotlin コンパイラディストリビューションから解決されます。\n\nプラグインは `target = \"jvm\"` と native target（`\"linuxX64\"` など）の両方で動作します。Native では、konanc の 2 段階コンパイル（`-p library` → `-p program -Xinclude=...`）でプラグインレジストラをライブラリ段階で実行します。これは、konanc の単一ステップ `-p program` がコンパイラプラグインを暗黙にスキップする問題への回避策です。詳細は ADR 0014 を参照してください。Native プロジェクトでプラグインを有効にすると、現在は `\u003ckotlincHome\u003e/lib/` からプラグイン JAR を借用するために kotlinc ディストリビューションをサイドカーとしてプロビジョニングします。将来的に Maven Central からの直接解決に切り替え予定です。\n\n### C Interop（native ターゲット）\n\nC ライブラリを呼び出す native target プロジェクトでは、`.def` ファイルごとに `[[cinterop]]` エントリを宣言します。kolt は各エントリに対して konan の `cinterop` ツールを呼び出し、生成された `.klib` を `build/` にキャッシュして、ライブラリおよびリンク段階で `-l` を通じて `konanc` に渡します。\n\n```toml\n[[cinterop]]\nname = \"libcurl\"\ndef = \"src/nativeInterop/cinterop/libcurl.def\"\npackage = \"libcurl\"\n```\n\n| フィールド | 説明 | デフォルト |\n|-----------|------|-----------|\n| `name` | 出力 klib のベース名（`build/\u003cname\u003e.klib`） | （必須） |\n| `def` | バインディングを記述する `.def` ファイルのパス | （必須） |\n| `package` | 生成バインディングの Kotlin パッケージ | （`.def` から導出） |\n\nコンパイラおよびリンカオプションは `.def` ファイル内に、Kotlin/Native 標準の `compilerOpts.\u003cplatform\u003e` / `linkerOpts.\u003cplatform\u003e` キーで記述します。例：\n\n```ini\nheaders = curl/curl.h\ncompilerOpts.linux = -I/usr/include -I/usr/include/x86_64-linux-gnu\nlinkerOpts.linux = -L/usr/lib/x86_64-linux-gnu -lcurl\n```\n\n`cinterop` klib は `.def` ファイルの mtime が変更された場合に再生成されます。ソースのみの編集ではキャッシュ済み klib を再利用します。複数の `[[cinterop]]` エントリが許可され、宣言順にリンクされます。\n\n### リソースファイル\n\nリソースファイル（設定ファイル、テンプレート、静的アセット）をビルド出力に含める：\n\n```toml\n[build]\nresources = [\"resources\"]\ntest_resources = [\"test-resources\"]\n```\n\n`resources` ディレクトリのファイルはビルド出力にコピーされ、JAR に含まれます。`test_resources` ディレクトリのファイルはテスト実行時のクラスパスに追加されます。存在しないディレクトリは暗黙にスキップされます。\n\n### テスト依存\n\nJVM ターゲットでは、kolt が Kotlin バージョンに合わせて `kotlin-test-junit5` を自動注入します。`kotlin.test` を使ってテストを書くだけです：\n\n```kotlin\nimport kotlin.test.Test\nimport kotlin.test.assertEquals\n\nclass MyTest {\n    @Test\n    fun testAdd() {\n        assertEquals(3, add(1, 2))\n    }\n}\n```\n\n追加のテストフレームワーク（例：Kotest）を使う場合は `[test-dependencies]` で宣言：\n\n```toml\n[test-dependencies]\n\"io.kotest:kotest-runner-junit5\" = \"5.8.0\"\n```\n\n## テスト\n\nkolt は JUnit Platform Console Standalone を通じてテストを実行します。対応フレームワーク：\n\n- **kotlin.test**（kotlin-test-junit5 経由、自動注入）\n- **JUnit 5**（直接）\n- **Kotest**（kotest-runner-junit5 経由）\n\n```sh\nkolt test\nkolt test -- --include-classname \".*IntegrationTest\"\n```\n\n## 依存管理\n\n- **グローバルキャッシュ**：`~/.kolt/cache/` — プロジェクト間で共有（Maven 互換レイアウト）\n- **ロックファイル**：`kolt.lock` がバージョンと SHA-256 ハッシュを記録\n- **SHA-256 検証**：不一致時はエラー（暗黙の再ダウンロードなし）\n- **明示的な更新**：`kolt update` で依存を再解決しハッシュを更新\n\n## ツールチェイン管理\n\nkolt は独自の kotlinc インストールを管理できるため、システムワイドにインストールする必要はありません。\n\n```sh\nkolt toolchain install   # kolt.toml で指定された kotlinc バージョンをダウンロード\n```\n\nツールチェインは `~/.kolt/toolchains/kotlinc/{version}/` に保存されます。管理対象のツールチェインが利用可能な場合は自動的に使用され、なければ PATH 上のシステム `kotlinc` にフォールバックします。\n\n### 未対応の機能\n\nv1.0 で対応予定：\n\n- ライブラリパッケージング（現在は `app` のみ）\n- `kolt publish` / `kolt new`\n- macOS および linuxArm64 ターゲット\n- プライベート Maven リポジトリの認証\n\nv1.0 以降で対応予定：\n\n- マルチモジュールプロジェクト\n- Kotlin/Java 混合ソースのコンパイル\n\n## Kotlin バージョンサポート\n\nkolt は **Kotlin 2.3.0 以上** を daemon のファーストクラス対象としてサポートします。`kolt.toml` の `[kotlin] version = \"2.3.x\"` は `[kotlin.plugins]` を使うプロジェクトも含め常に warm compiler daemon を通ります。Kotlin 2.3.20 はバンドル済みなので初回ビルドでダウンロードは発生しません。他の 2.3.x パッチは初回使用時に Maven Central から取得され `~/.kolt/cache/` にキャッシュされます。\n\n2.3.0 未満は soft floor です：`kolt build` は subprocess で動作し、該当ビルドごとに 1 行の警告が出ます。`--no-daemon` を渡すと警告は消え、Kotlin バージョンによらず常に利用できます。\n\n将来の Kotlin 言語リリース（2.4.0、2.5.0 …）のサポート範囲は事前に約束せず、各リリース時点で再評価します。ポリシーの詳細は [ADR 0022](docs/adr/0022-supported-kotlin-version-policy.md) を参照してください。\n\n### language バージョンと切り離して compiler を固定する\n\n古い言語バージョン（例：Kotlin 2.1）のままで daemon の恩恵を受けたい場合、\n`compiler` を daemon サポート対象のバージョンに固定します：\n\n```toml\n[kotlin]\nversion = \"2.1.0\"      # 言語 / API バージョン\ncompiler = \"2.3.20\"    # kotlinc + daemon バージョン（未指定時は version と同じ）\n```\n\n`compiler \u003e version` の場合、kolt は 2.3.20 の daemon / kotlinc を使いつつ\nコンパイル時に `-language-version 2.1` / `-api-version 2.1` を渡します\n（`major.minor` のみ — kotlinc は patch 付きの値を拒否します）。\n`compiler \u003c version` はパース時にエラーとなります。`version` のみを指定した\n場合は従来どおりの挙動です。\n\n## なぜ kolt？\n\nGradle は強力ですが、シンプルな Kotlin プロジェクトには重すぎます：\n\n- JVM 起動コスト\n- ビルドスクリプトのコンパイル\n- タスクグラフの構築\n\nkolt は Go における `go build`、Rust における `cargo build` に相当するものを目指しています。宣言的な設定ファイルとゼロセレモニーで Kotlin プロジェクトをビルドする、高速で集中したツールです。\n\n## 終了コード\n\n| コード | 意味 |\n|--------|------|\n| 0 | 成功 |\n| 1 | ビルドエラー |\n| 2 | 設定エラー |\n| 3 | 依存エラー |\n| 4 | テストエラー |\n| 5 | フォーマットエラー |\n| 127 | コマンドが見つからない |\n\n## アーキテクチャ\n\n内部設計（コンポーネント概要、ビルドフロー、デーモンライフサイクル、アーキテクチャ上の決定事項）については [docs/architecture.ja.md](docs/architecture.ja.md) を参照してください。\n\n## ソースからビルド\n\ncontributor やインストーラー未対応 platform の利用者向け:\n\n```sh\ngit clone https://github.com/snicmakino/kolt.git\ncd kolt\n./gradlew build\n```\n\nバイナリは `build/bin/linuxX64/debugExecutable/kolt.kexe` に生成されます。PATH 上のディレクトリにコピーしてください:\n\n```sh\ncp build/bin/linuxX64/debugExecutable/kolt.kexe ~/.local/bin/kolt\n```\n\n## Claude Code 連携\n\nこのプロジェクトには [Claude Code](https://claude.ai/code) のスキルが含まれています。Claude Code を使用する場合、`/kolt-usage` スキルで kolt のコマンド、設定、依存管理についてのインタラクティブなヘルプを利用できます。[直接参照](.claude/skills/kolt-usage/SKILL.md) することもできます。\n\n## 名前\n\n**kolt** = **Kot**lin + bo**lt** — 高速で軽量な Kotlin ツーリング。\n\n## ライセンス\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnicmakino%2Fkolt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnicmakino%2Fkolt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnicmakino%2Fkolt/lists"}