Kotlin/JS — co to je, kompilátor do JavaScriptu a vlastnosti

Autor: IT Sectr Publikováno: 2026-06-05 Doba čtení: 7 min

Kotlin/JS — je kompilátor kódu Kotlin do JavaScriptu, který umožňuje vytvářet frontendové aplikace a webová rozhraní v jazyce Kotlin. Na rozdíl od TypeScriptu poskytuje Kotlin/JS přísnou statickou typizaci, podporu pro korutiny a bezproblémovou integraci s Kotlin Multiplatform. Od Kotlin 1.8 používá kompilátor IR-based backend pro generování optimalizovaného JavaScript kódu. Podle údajů JetBrains, 2025, Kotlin/JS podporuje integraci s ekosystémem NPM a TypeScriptem prostřednictvím automatického generování .d.ts souborů.

Hlavní body

  • Kotlin/JS — kompilátor kódu Kotlin do JavaScriptu pro frontendový vývoj a webová rozhraní.
  • IR-backend — mezilehlá reprezentace používaná pro generování optimalizovaného JavaScript kódu.
  • Integrace NPM — možnost připojení JavaScript knihoven přes npm závislosti v build.gradle.kts.
  • Kompatibilita TypeScript — generování .d.ts souborů pro bezpečnou práci TypeScript projektů s kódem Kotlin.
  • Integrace KMM — opětovné použití společného kódu Kotlin mezi mobilními a webovými aplikacemi.

Co je Kotlin/JS?

Kotlin/JS — je jedním ze tří backendů kompilátoru Kotlin (vedle JVM a Native), určený pro překlad kódu Kotlin do JavaScriptu. Vyvinutý společností JetBrains, Kotlin/JS umožňuje psát webové aplikace v jazyce s přísnou statickou typizací, přičemž zachovává přístup k obrovskému ekosystému JavaScript knihoven prostřednictvím mechanismu externích deklarací. Od prvního stabilního vydání v Kotlin 1.3 prošel kompilátor cestou od experimentálního backendu k nástroji připravenému pro produkci, používanému v průmyslových projektech.

Hlavním účelem Kotlin/JS — frontendový vývoj s použitím Kotlin místo JavaScriptu nebo TypeScriptu. Vývojáři získávají všechny možnosti jazyka Kotlin: null safety, rozšiřující funkce, datové třídy, korutiny a sealed třídy. Generovaný JavaScript kód lze spustit v libovolném moderním prohlížeči nebo v prostředí Node.js. Kotlin/JS je obzvláště vyhledávaný v projektech Kotlin Multiplatform, kde je společný modul (commonMain) dostupný jak pro mobilní, tak pro webové aplikace.

Ekosystém Kotlin/JS zahrnuje frameworky pro vytváření uživatelských rozhraní. Compose Multiplatform pro web používá Kotlin/JS jako cílový backend, což umožňuje vytvářet deklarativní UI komponenty fungující v prohlížeči. Alternativní řešení zahrnují obaly pro React — Kotlin Wrappers, které poskytují type-safe API pro React, React Router a Redux.

Jak funguje kompilátor Kotlin/JS

Kompilace Kotlin/JS prochází několika fázemi transformace. Zdrojový kód Kotlin je nejprve zkompilován do mezilehlé reprezentace (IR), poté optimalizován a je generován JavaScript kód. Od Kotlin 1.8 byl starý backend (JsBackend založený na AST) zcela nahrazen IR-backendem, který poskytuje lepší optimalizaci, menší velikost výstupního kódu a kompatibilitu s TypeScriptem.

Dříve Kotlin/JS používal JsBackend, který pracoval přímo se stromem AST (Abstract Syntax Tree). Tento přístup měl omezení: složitost podpory platformových optimalizací, chybějící jednotný IR pro všechny backendy a neschopnost generovat TypeScript deklarace. Přechod na IR-backend tyto problémy vyřešil, sjednotil kompilaci všech tří backendů Kotlin a otevřel cestu pro mezibackendové optimalizace.

Režimy kompilace Kotlin/JS

Kotlin/JS podporuje dva režimy kompilace, které určují formát a optimalizaci výstupního kódu. Produkční režim používá Webpack pro kompilaci, minifikaci a tree-shaking. Vývojový režim podporuje Hot Module Replacement pro rychlou iteraci vývoje. Výběr režimu se nastavuje v build.gradle.kts prostřednictvím konfigurace js.target.

kotlin
kotlin {
    js {
        browser {
            webpackTask {
                outputFileName = "app.js"
            }
        }
        binaries.executable()
    }
}

Integrace s NPM a JavaScript knihovnami

Integrace Kotlin/JS s ekosystémem NPM je realizována prostřednictvím speciálního DSL v build.gradle.kts. Vývojář deklaruje npm závislosti v konfiguraci kotlin, uvedením názvu balíčku a verze. Kotlin/JS automaticky stahuje balíčky prostřednictvím správce balíčků npm nebo yarn. Pro zajištění type-safe přístupu k JavaScript knihovnám se používají externí deklarace, které popisují typy a funkce knihovny pro kompilátor Kotlin.

Externí deklarace — Kotlin deklarace označené klíčovým slovem external. Informují kompilátor, že implementace funkce nebo třídy se nachází v JavaScript kódu, nikoli v Kotlin. JetBrains poskytuje hotové sady obalů pro populární knihovny v rámci Kotlin Wrappers, včetně React, React Router, Redux, Emotion a MUI. Pro knihovny, které nemají hotové obaly, může vývojář napsat externí deklarace ručně nebo použít generátor TypeScript vazeb Dukat.

kotlin
kotlin {
    js {
        browser { }
        npm {
            dependency("react", "18.3.1")
            dependency("react-dom", "18.3.1")
            devDependency("webpack", "5.92.0")
        }
    }
}

// Externí deklarace pro JavaScript knihovnu
@JsModule("date-fns")
external fun formatDistance(
    date: Date, baseDate: Date
): String

Práce s kompatibilitou TypeScript

TypeScript — nedílná součást moderního webu a Kotlin/JS zajišťuje kompatibilitu s ním prostřednictvím generování .d.ts souborů. Při nastavení js.generateTsDeclarations = true kompilátor vytváří TypeScript deklarace pro všechny veřejné Kotlin funkce a třídy. To umožňuje TypeScript projektům importovat Kotlin moduly s plnou podporou typů. Generování TypeScript deklarací funguje pouze s IR-backendem a je jedním z klíčových důvodů migrace ze starého backendu.

IR-backend Kotlin/JS a výhody

IR-backend (Intermediate Representation) — jednotný backend pro všechny tři platformy Kotlin: JVM, JS a Native. Používá společnou mezilehlou reprezentaci, která prochází několika fázemi optimalizace před generováním cílového kódu. Pro Kotlin/JS se IR-backend stal povinným od Kotlin 1.8.0, nahradil starý backend založený na AST, který byl označen jako deprecated.

Výhody IR-backendu pro Kotlin/JS zahrnují vylepšenou optimalizaci kódu na úrovni IR, zmenšení velikosti bundle díky eliminaci mrtvého kódu a inline optimalizacím, stejně jako podporu pro TypeScript deklarace. IR-backend také zajišťuje správné zpracování inline funkcí, reified generics a suspend funkcí při překladu do JavaScriptu, což bylo problematické ve starém backendu.

VlastnostStarý backend (AST)IR-backend
TypeScript deklaraceNebyly podporoványGenerovány automaticky
Eliminace mrtvého kóduOmezenáPlná, na úrovni IR
Inline funkceProblémy se správnostíSprávné zpracování
Reified genericsNebyly podporoványPodporovány
Velikost bundleZákladníO 20–30% menší

Příklady kódu: konfigurace a vývoj

Plnohodnotný projekt Kotlin/JS začíná konfigurací build.gradle.kts. Plugin kotlin multiplatform umožňuje nastavit Kotlin/JS jako jednu z cílových platforem. Podívejme se na příklad konfigurace pro webovou aplikaci s Reactem.

kotlin
plugins {
    kotlin("multiplatform") version "2.0.21"
    id("org.jetbrains.kotlin-wrappers") version "1.0.0-pre.775"
}

kotlin {
    js {
        browser { }
        binaries.executable()
        generateTsDeclarations = true
    }
}

dependencies {
    implementation(enwraps(react, reactDom))
}

Po konfiguraci lze psát React komponenty v Kotlin. Kotlin Wrappers poskytují type-safe API pro React, včetně funkcionálních komponent, hooků a syntaxe podobné JSX prostřednictvím DSL stavitelů. Příklad komponenty Counter demonstruje práci s useState a obsluhou událostí.

kotlin
@OptIn(ExperimentalWrapperApi::class)
val Counter = FC<Props> {
    var count = useState(0)

    div {
        +"Counter value: ${count.component1()}"
        button {
            onClick = { count.component2()(count.component1() + 1) }
            +"Increment"
        }
    }
}

fun main() {
    createRoot(document.getElementById("root")!!).render(
        createElement(Counter)
    )
}

Sestavení a nasazení

Sestavení projektu Kotlin/JS se provádí prostřednictvím Gradle úloh. jsDevelopmentRun spouští vývojový server Webpack s HMR pro vývoj. jsProductionExecutableCompileSync generuje produkční bundle s minifikací a tree-shakingem. Konečný HTML soubor připojující zkompilovaný JavaScript je generován pluginem webpack a nachází se v build/dist.

kotlin
// Spustit vývojový server s HMR
./gradlew jsDevelopmentRun

// Produkční sestavení s minifikací
./gradlew jsProductionExecutableCompileSync

// Výstup v build/dist/productionExecutable/

Kotlin/JS vs TypeScript: srovnání

TypeScript — hlavní konkurent Kotlin/JS v oblasti typovaného JavaScriptu. Oba jazyky se kompilují do JavaScriptu a přidávají statickou typizaci na dynamický JS. Kotlin/JS však nabízí řadu výhod: null safety ve výchozím nastavení, sealed třídy, korutiny a bezproblémovou integraci s Kotlin Multiplatform. TypeScript má naopak větší komunitu, více hotových knihoven s typy a zralejší ekosystém.

Produktivita vývoje s Kotlin/JS může být vyšší pro týmy, které již používají Kotlin v jiných částech projektu, protože nevyžaduje přepínání mezi jazyky. TypeScript zůstává populárnější volbou pro čistě webové projekty, kde se nepoužívá Kotlin Multiplatform. S rostoucí popularitou Compose Multiplatform pro web si však Kotlin/JS získává pozici jako alternativa k Reactu a Angularu.

VlastnostKotlin/JSTypeScript
Null safetyVýchozístrictNullChecks volitelné
Sealed třídyPodporoványPřes union types
KorutinyNativněPřes async/await
Integrace KMMPlnáChybí
Velikost komunityMaláObrovská
Hotové typy pro knihovnyOmezené (DefinitelyTyped přes Dukat)DefinitelyTyped (tisíce knihoven)

Volba mezi Kotlin/JS a TypeScript závisí na kontextu projektu. Pokud tým již používá Kotlin Multiplatform nebo plánuje začít, Kotlin/JS je logickou volbou pro frontendovou část. Pro izolovaný webový projekt zůstává TypeScript pragmatičtějším řešením díky dostupnosti hotových typů pro JavaScript knihovny a většímu počtu vývojářů na trhu.

Často kladené otázky

Lze Kotlin/JS použít s Reactem?

Ano, JetBrains poskytuje Kotlin Wrappers — type-safe Kotlin obaly pro React, React Router a Redux. Umožňují psát React komponenty v Kotlin s plnou podporou hooků a DSL podobného JSX.

Jak Kotlin/JS pracuje s TypeScript projekty?

Při zapnutí generateTsDeclarations = true Kotlin/JS generuje .d.ts soubory pro všechna veřejná API. TypeScript projekty mohou importovat Kotlin moduly s plnou typizací jako běžné npm balíčky.

Jaká je velikost bundle Kotlin/JS aplikace?

Velikost bundle závisí na použitých knihovnách. Minimální aplikace Hello World zabírá přibližně 300 KB včetně Kotlin stdlib. S Reactem a Kotlin Wrappers se velikost zvyšuje na 400–600 KB.

Podporuje Kotlin/JS prostředí Node.js?

Ano, Kotlin/JS lze použít pro vývoj serverless funkcí a konzolových nástrojů v Node.js. Pro to je v konfiguraci třeba uvést js.nodejs místo js.browser.

Čím se Kotlin/JS liší od Kotlin/Wasm?

Kotlin/Wasm — je experimentální backend pro WebAssembly, zatímco Kotlin/JS generuje JavaScript kód. Wasm poskytuje vyšší výkon, ale má omezený přístup k DOM prohlížeče.

Shrnutí

  • Kotlin/JS — kompilátor Kotlin do JavaScriptu pro frontendový vývoj s podporou korutin, sealed tříd a null safety.
  • IR-backend nahradil starý backend založený na AST, zajistil generování TypeScript deklarací a zmenšení bundle o 20–30%.
  • Integrace NPM umožňuje připojit libovolné JavaScript knihovny prostřednictvím externích deklarací a Kotlin Wrappers.
  • Kompatibilita TypeScript je realizována automatickým generováním .d.ts souborů při generateTsDeclarations = true.
  • Integrace KMM — hlavní výhoda Kotlin/JS oproti TypeScriptu, umožňující opětovné použití společného kódu s mobilními aplikacemi.
  • Pro izolované webové projekty zůstává TypeScript pragmatičtější volbou kvůli velikosti komunity a dostupnosti typů.
  • Použijte Kotlin/JS pro frontendovou část KMM projektů nebo při vývoji s Compose Multiplatform pro web.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také