# Modules Kotlin DataFrame is composed of modules, allowing you to include only the functionality you need. In addition, Kotlin DataFrame provides several [plugins](#plugins) that significantly enhance the development experience — making it more convenient, powerful, and enjoyable to work with.
Module Function
General
dataframe General artifact – combines all core and IO artifacts except experimental ones.
Core
dataframe-core The DataFrame API and its implementation.
IO
dataframe-json Provides support for JSON format writing and reading.
dataframe-csv Provides support for CSV format writing and reading.
dataframe-excel Provides support for XSL/XLSX format writing and reading.
dataframe-jdbc Provides support for JDBC data sources reading.
dataframe-arrow Provides support for Apache Arrow format writing and reading. Provides support for reading Apache Parquet files through Apache Arrow Dataset
Experimental modules
dataframe-geo Provides a new API for working with geospatial data and IO for geographic formats (GeoJSON, Shapefile).
dataframe-openapi Provides support for OpenAPI JSON format reading and writing.
dataframe-openapi-generator Provides schema generation from OpenAPI specifications. Requires dataframe-openapi.
Plugins
kotlin.plugin.dataframe Kotlin compiler plugin. Provides compile-time extension properties generation.
kotlinx.dataframe Gradle plugin. Provides schemas generation using Gradle.
kotlinx.dataframe:symbol-processor-all KSP plugin. Provides schemas generation using KSP.
## Configure the repository All Kotlin DataFrame modules are available from the Maven Central repository. To use them, add the appropriate dependency into your repositories mapping: ```kotlin repositories { mavenCentral() } ``` ```kotlin repositories { mavenCentral() } ``` ## `dataframe` - general Kotlin DataFrame dependency {id="dataframe-general"} General-purpose artifact that includes all [core](#core-modules) and [IO](#io-modules) modules. Does **not** include any [experimental modules](#experimental-modules). Recommended if you don’t need fine-grained control over individual module dependencies. ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe:%dataFrameVersion%' } ``` ## Core Kotlin DataFrame modules {id="core-modules"} #### `dataframe-core` The core [DataFrame](DataFrame.md) API and its implementation. Includes all core functionality for working with data structures, expressions, schema management, and operations. ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-core:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-core:%dataFrameVersion%' } ``` ## IO Kotlin DataFrame modules {id="io-modules"} #### `dataframe-json` {id="dataframe-json"} Provides all logic for DataFrame to be able to work with JSON data sources; [reading](https://kotlin.github.io/dataframe/read.html#read-from-json) and [writing](https://kotlin.github.io/dataframe/write.html#writing-to-json). It's based on [Kotlinx Serialization](https://github.com/Kotlin/kotlinx.serialization). ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-json:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-json:%dataFrameVersion%' } ``` #### `dataframe-csv` {id="dataframe-csv"} Provides support for reading and writing CSV files. Supports standard CSV format features such as delimiters, headers, and quotes. Based on high-performance [Deephaven CSV](https://github.com/deephaven/deephaven-csv). ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-csv:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-csv:%dataFrameVersion%' } ``` Note that `dataframe-json` is included with `dataframe-csv` by default. This is to support JSON structures inside CSV files. If you don't need this functionality, you can exclude it like so: ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-csv:%dataFrameVersion%") { exclude("org.jetbrains.kotlinx", "dataframe-json") } } ``` ```groovy dependencies { implementation('org.jetbrains.kotlinx:dataframe-csv:%dataFrameVersion%') { exclude group: 'org.jetbrains.kotlinx', module: 'dataframe-json' } } ``` #### `dataframe-excel` {id="dataframe-excel"} Provides support for reading and writing Excel files (`.xls` and `.xlsx`). Compatible with standard spreadsheet editors and supports embedded structured data. ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-excel:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-excel:%dataFrameVersion%' } ``` Note that `dataframe-json` is included with `dataframe-excel` by default. This is to support JSON structures inside Excel files. If you don't need this functionality, you can exclude it like so: ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-excel:%dataFrameVersion%") { exclude("org.jetbrains.kotlinx", "dataframe-json") } } ``` ```groovy dependencies { implementation('org.jetbrains.kotlinx:dataframe-excel:%dataFrameVersion%') { exclude group: 'org.jetbrains.kotlinx', module: 'dataframe-json' } } ``` #### `dataframe-jdbc` {id="dataframe-jdbc"} Provides all logic for DataFrame to be able to work with SQL databases that implement the JDBC protocol. See [Read from SQL databases](https://kotlin.github.io/dataframe/readsqldatabases.html) for more information about how to use it. ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-jdbc:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-jdbc:%dataFrameVersion%' } ``` #### `dataframe-arrow` {id="dataframe-arrow"} Provides all logic and tests for DataFrame to be able to work with [Apache Arrow](https://arrow.apache.org). See [Read Apache Arrow formats](https://kotlin.github.io/dataframe/read.html#read-apache-arrow-formats) and [Writing to Apache Arrow formats](https://kotlin.github.io/dataframe/write.html#writing-to-apache-arrow-formats) for more information about how to use it. ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-arrow:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-arrow:%dataFrameVersion%' } ``` ## Experimental Kotlin DataFrame modules {id="experimental-modules"} These modules are experimental and may be unstable. #### `dataframe-geo` Provides a new API for working with geospatial data, including reading and writing geospatial formats (GeoJSON, Shapefile), and performing geometry-aware operations. See [Geo guide](https://kotlin.github.io/kandy/geo-plotting-guide.html) for more details and examples. Requires [OSGeo Repository](https://repo.osgeo.org). ```kotlin repositories { maven("https://repo.osgeo.org/repository/release") } dependencies { implementation("org.jetbrains.kotlinx:dataframe-geo:%dataFrameVersion%") } ``` ```groovy repositories { maven { url 'https://repo.osgeo.org/repository/release' } } dependencies { implementation 'org.jetbrains.kotlinx:dataframe-geo:%dataFrameVersion%' } ``` #### `dataframe-openapi` Provides functionality to support auto-generated data schemas from OpenAPI 3.0.0 specifications. This module is a companion to [`dataframe-openapi-generator`](#dataframe-openapi-generator): - `dataframe-openapi-generator` is used internally by the Gradle plugin and Jupyter integration to generate data schemas from OpenAPI specs. In the Gradle plugin, it powers the `dataschemas {}` DSL and the `@file:ImportDataSchema()` annotation. In Jupyter, it enables the `importDataSchema()` function. - `dataframe-openapi` must be added as a dependency to the user project in order to use those generated data schemas. See: - [Import OpenAPI Schemas in Gradle project](https://kotlin.github.io/dataframe/schemasimportopenapigradle.html) - [Import Data Schemas, e.g. from OpenAPI, in Jupyter](https://kotlin.github.io/dataframe/schemasimportopenapijupyter.html) ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-openapi:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-openapi:%dataFrameVersion%' } ``` #### `dataframe-openapi-generator` Provides the logic and tooling necessary to import OpenAPI 3.0.0 specifications as auto-generated data schemas for Kotlin DataFrame. This module works in conjunction with [`dataframe-openapi`](#dataframe-openapi): - `dataframe-openapi-generator` is used internally by the Gradle plugin and Jupyter integration to generate data schemas from OpenAPI specifications. - In Gradle, it enables the `dataschemas {}` DSL and the `@file:ImportDataSchema()` annotation. - In Jupyter, it powers the `importDataSchema()` function. - `dataframe-openapi` must be added as a dependency to the user project to actually use the generated schemas. See: - [Import OpenAPI Schemas in Gradle project](https://kotlin.github.io/dataframe/schemasimportopenapigradle.html) - [Import Data Schemas, e.g. from OpenAPI, in Jupyter](https://kotlin.github.io/dataframe/schemasimportopenapijupyter.html) ```kotlin dependencies { implementation("org.jetbrains.kotlinx:dataframe-openapi-generator:%dataFrameVersion%") } ``` ```groovy dependencies { implementation 'org.jetbrains.kotlinx:dataframe-openapi-generator:%dataFrameVersion%' } ``` ## Plugins #### `kotlin.plugin.dataframe` — Kotlin DataFrame Compiler Plugin {id="kotlin.plugin.dataframe"} [Kotlin DataFrame Compiler Plugin](Compiler-Plugin.md) enables automatic generation of [extension properties](extensionPropertiesApi.md) and updates [data schemas](schemas.md) on-the-fly in Gradle projects, making development with Kotlin DataFrame faster, more convenient, and fully type- and name-safe. > Requires Kotlin 2.2.20-Beta1 or higher. > { style = "note" } To enable the plugin in your Gradle project, add it to the `plugins` section: ```kotlin plugins { kotlin("plugin.dataframe") version "%compilerPluginKotlinVersion%" } ``` ```groovy plugins { id 'org.jetbrains.kotlin.plugin.dataframe' version '%compilerPluginKotlinVersion%' } ``` Due to [this issue](https://youtrack.jetbrains.com/issue/KT-66735), incremental compilation must be disabled for now. Add the following line to your `gradle.properties` file: ```properties kotlin.incremental=false ``` Published as a Kotlin official plugin. [Source code is available in the Kotlin repository](https://github.com/JetBrains/kotlin/tree/master/plugins/kotlin-dataframe). #### `kotlinx.dataframe` – Gradle Plugin {id="kotlinx.dataframe"} > The current Gradle plugin is **under consideration for deprecation** > and may be officially marked as deprecated in future releases. > > At the moment, **[data schema generation is handled via dedicated methods](DataSchemaGenerationMethods.md)** instead of relying on the plugin. {style="warning"} The Gradle plugin allows generating [data schemas](schemas.md) from samples of data (of supported formats) like JSON, CSV, Excel files, or URLs, as well as from data fetched from SQL databases using Gradle. See the [Gradle Plugin Reference](Gradle-Plugin.md) for installation and usage instructions in Gradle projects. > By default, the Gradle plugin also applies the [KSP plugin](#ksp-plugin). ```kotlin plugins { id("org.jetbrains.kotlinx.dataframe") version "%dataFrameVersion%" } ``` ```groovy plugins { id 'org.jetbrains.kotlinx.dataframe' version '%dataFrameVersion%' } ``` #### `kotlinx.dataframe:symbol-processor-all` – KSP Plugin {id="ksp-plugin"} > The KSP plugin is **not compatible with [KSP2](https://github.com/google/ksp?tab=readme-ov-file#ksp2-is-here)** > and may **not work properly with Kotlin 2.1 or newer**. > > At the moment, **[data schema generation is handled via dedicated methods](DataSchemaGenerationMethods.md)** instead of relying on the plugin. {style="warning"} The Gradle plugin allows generating [data schemas](schemas.md) from samples of data (of supported formats) like JSON, CSV, Excel files, or URLs, as well as from data fetched from SQL databases using Kotlin Symbol Processing (KSP). This is useful for projects where you prefer or require schema generation at the source level. See [Data Schemas in Gradle Projects](schemasGradle.md) for usage details. ```kotlin dependencies { ksp("org.jetbrains.kotlinx.dataframe:symbol-processor-all:%dataFrameVersion%") } ``` ```groovy dependencies { ksp 'org.jetbrains.kotlinx.dataframe:symbol-processor-all:%dataFrameVersion%' } ```