dataframe
AGENTS.md1.1k starsChanged 26 days agoApache-2.0View on GitHub
Kotlin DataFrame — a typesafe, immutable, hierarchical in-memory data-processing library for the JVM (org.jetbrains.kotlinx:dataframe). Every DataFrame operation returns a new instance, reusing underlying column storage where possible. Type-safe column access is provided through auto-generated extension properties (on-the-fly in notebooks, via the compiler plugin / KSP in projects). Gradle (Kotlin DSL), multi-module. Use the wrapper (./gradlew, or gradlew.bat on Windows). A JDK must be on JAVA_HOME/PATH to launch the wrapper; the build daemon JDK is provisioned from gradle/gradle-daemon-jvm.properties (version controlled by…
Trending
Less talk lately.about the whole repository
Who's talking about Kotlin/dataframe
- Kotlin/kandy“Support compose multiplatform”GitHub · Dec 14, 2023 · 45 reactions
- Kotlin/kotlin-agent-skills“Add a Skill for working with Kotlin DataFrame”GitHub · May 19, 2026 · 6 reactions
- deephaven/deephaven-csv“Read files with different encodings”GitHub · Nov 11, 2025 · 2 reactions
- Velkonost/sssss“deps(gradle): bump org.jetbrains.kotlinx:dataframe from 0.13.1 to 0.15.0”GitHub · Oct 15, 2025 · 2 reactions
- jeremymailen/kotlinter-gradle“Wired issues when Upgrading to Kotlin 1.8.20 ”GitHub · Apr 12, 2023 · 2 reactions
The biggest 5 of 51 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 51
Talked about on GitHub and Bluesky (51 times).
On GitHub · 50
- Dec 14, 2023Support compose multiplatform — Kotlin/kandy45 reactions · 7 comments
- May 19, 2026Add a Skill for working with Kotlin DataFrame — Kotlin/kotlin-agent-skills6 reactions
- Nov 11, 2025Read files with different encodings — deephaven/deephaven-csv2 reactions · 2 comments
- Oct 15, 2025deps(gradle): bump org.jetbrains.kotlinx:dataframe from 0.13.1 to 0.15.0 — Velkonost/sssss2 reactions · 1 comment
- Apr 12, 2023Wired issues when Upgrading to Kotlin 1.8.20 — jeremymailen/kotlinter-gradle2 reactions · 9 comments
45 more on GitHub
- Sep 25, 2026fix(deps): update all dependencies — salesforce-misc/ReVoman1 reaction · 1 comment
- Dec 9, 2024chore(deps): update dependency org.jetbrains.kotlinx:dataframe to v0.15.0 — Kotlin/kotlin-jupyter-libraries1 reaction
- May 27, 2024Remove `concatFixed()` — Kotlin/kandy1 reaction
- Nov 1, 2026build(deps): bump kotlinx-dataframe from 1.0.0-rc02 to 1.0.0-rc02n — sureshg/native-image-playground0 reactions · 2 comments
- Oct 30, 2026[KDF] Support columnOf(vararg DataFrame) FrameColumn creation — JetBrains/kotlin0 reactions · 18 comments
- Oct 29, 2026Move `@sample` after the removal of escape characters — Jolanrensen/KoDEx0 reactions · 2 comments
- Oct 26, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc02 to 1.0.0-rc02n — sureshg/build-commons0 reactions
- Oct 19, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc02n — sureshg/kotlin-mpp-playground0 reactions · 2 comments
- Oct 19, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc02 to 1.0.0-rc02n — sureshg/build-commons0 reactions
- Oct 16, 2026Fix generated jars and support publishing KoDEx-processed artifacts — Jolanrensen/KoDEx0 reactions
- Oct 15, 2026chore(deps): update dependency org.jetbrains.kotlinx:dataframe-geo to v1.0.0-rc02n - autoclosed — Kotlin/kotlin-jupyter-libraries0 reactions
- Oct 12, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Oct 7, 2026[KDF] (Attempt 2) Fixed return type mismatch report, like when using `add {}` — JetBrains/kotlin0 reactions · 12 comments
- Oct 5, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Oct 2, 2026[KDF] Fixed return type mismatch report, like when using `add {}` — JetBrains/kotlin0 reactions · 8 comments
- Oct 1, 2026build(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/native-image-playground0 reactions · 2 comments
- Sep 28, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Sep 21, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Sep 14, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Sep 11, 2026Bump org.jetbrains.kotlinx:dataframe from 1.0.0-rc01 to 1.0.0-rc01n — linde9821/epa-visualizer0 reactions
- Sep 7, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Aug 31, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Aug 24, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Aug 21, 2026[Feature] Create a preprocessor that adds/creates reference aliases with codespans — Jolanrensen/KoDEx0 reactions
- Aug 10, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Aug 3, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Aug 1, 2026build(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/native-image-playground0 reactions · 2 comments
- Jul 27, 2026Bumped built-in dataframe version to 1.0.0-rc01 — JetBrains/kotlin-toolchain0 reactions · 3 comments
- Jul 27, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-rc01 to 1.0.0-rc01n — sureshg/build-commons0 reactions
- Jul 20, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-rc01n — sureshg/kotlin-mpp-playground0 reactions · 2 comments
- Jul 20, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/build-commons0 reactions
- Jul 13, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/build-commons0 reactions
- Jul 6, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/build-commons0 reactions
- Jul 1, 2026build(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/native-image-playground0 reactions · 2 comments
- Jun 25, 2026Kotlin SWE benchmark contribution — multi-swe-bench/multi-swe-benchsays it tested it0 reactions
- Jun 22, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/build-commons0 reactions
- Jun 15, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/kotlin-mpp-playground0 reactions · 2 comments
- Jun 15, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-Beta5n — sureshg/build-commons0 reactions
- Jun 8, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10584 — sureshg/kotlin-mpp-playground0 reactions · 2 comments
- Jun 8, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10535 — sureshg/build-commons0 reactions
- Jun 2, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10508 — sureshg/build-commons0 reactions
- Jun 1, 2026build(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10508 — sureshg/native-image-playground0 reactions · 2 comments
- May 25, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10485 — sureshg/build-commons0 reactions
- May 18, 2026chore(deps): bump kotlinx-dataframe from 1.0.0-Beta5 to 1.0.0-dev-10438 — sureshg/build-commons0 reactions
- Oct 29, 2025[K2] TranslatorError: from STATUS to IMPLICIT_TYPES_BODY_RESOLVE — Kotlin/dokka0 reactions · 3 comments
On Bluesky · 1
- May 19, 2025Kotlin DataFrame aims to reconcile Kotlin's static typing with the dynamic nature of data by utilizing both the full power of the Kotlin… — @ytroncal.bsky.social1 likes and repost
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository24 other files it gives its agents.
- core/AGENTS.mdAGENTS.md
- dataframe-arrow/AGENTS.mdAGENTS.md
- dataframe-compiler-plugin-core/AGENTS.mdAGENTS.md
- dataframe-csv/AGENTS.mdAGENTS.md
- dataframe-excel/AGENTS.mdAGENTS.md
- dataframe-geo/AGENTS.mdAGENTS.md
- dataframe-jdbc/AGENTS.mdAGENTS.md
- dataframe-json/AGENTS.mdAGENTS.md
- examples/AGENTS.mdAGENTS.md
- plugins/AGENTS.mdAGENTS.md
- samples/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- core/CLAUDE.mdCLAUDE.md
- dataframe-arrow/CLAUDE.mdCLAUDE.md
- dataframe-compiler-plugin-core/CLAUDE.mdCLAUDE.md
- dataframe-csv/CLAUDE.mdCLAUDE.md
- dataframe-excel/CLAUDE.mdCLAUDE.md
- dataframe-geo/CLAUDE.mdCLAUDE.md
- dataframe-jdbc/CLAUDE.mdCLAUDE.md
- dataframe-json/CLAUDE.mdCLAUDE.md
- examples/CLAUDE.mdCLAUDE.md
- plugins/CLAUDE.mdCLAUDE.md
- samples/CLAUDE.mdCLAUDE.md
- operation-website-documentationSkill
The file
We split this AGENTS.md into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Add -Pkotlin.dataframe.debug=true when validating changes.
- Very specific: line 87
After reverting or editing anything under */generated-sources, run ./gradlew processKDocsMain --rerun, or Dokka/the KoDEx jars are built …
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
This file provides guidance to coding agents (Claude Code, and other tools that read AGENTS.md) when
working with code in this repository.
What this is
Kotlin DataFrame — a typesafe, immutable, hierarchical in-memory data-processing library for the JVM
(org.jetbrains.kotlinx:dataframe). Every DataFrame operation returns a new instance, reusing underlying
column storage where possible. Type-safe column access is provided through auto-generated extension properties
(on-the-fly in notebooks, via the compiler plugin / KSP in projects).
Build & test commands
Gradle (Kotlin DSL), multi-module. Use the wrapper (./gradlew, or gradlew.bat on Windows). A JDK must be on
JAVA_HOME/PATH to launch the wrapper; the build daemon JDK is provisioned from gradle/gradle-daemon-jvm.properties
(version controlled by gradle-jdk in gradle/libs.versions.toml).
./gradlew build— full build; runs all tests and the ktlint check../gradlew <module>:test— test a single module (e.g../gradlew core:test); much faster during development../gradlew <module>:test --tests "org.jetbrains.kotlinx.dataframe.SomeTest"— run a single test class/method.- Add
-Pkotlin.dataframe.debug=truewhen validating changes. It enables extra, heavier correctness checks that are off in production. PR/CI builds run with this flag (build -Pkotlin.dataframe.debug=true), so match it locally. ./gradlew publishToMavenLocal -PskipKodex— publish locally for iteration.-PskipKodexskipsapiCheckand KDoc preprocessing (see below); the result has "broken" KDocs, so it is for local dev only../gradlew dokkaGeneratePublicationHtml— build the multi-module Dokka API reference intobuild/dokka/html(what CI deploys underhttps://kotlin.github.io/dataframe/api-docs/). Takes several minutes, as it runs KoDEx first.
Module names for <module>: come from settings.gradle.kts (e.g. core, dataframe-csv, dataframe-jdbc,
dataframe-json, dataframe-arrow, dataframe-excel, dataframe-jupyter).
Architecture
Dependency graph is rooted at core, with I/O and integration split into optional modules (see MODULES.md):
core— base module, no deps. DataFrame/DataColumn/DataRow types, the operations API (core/.../api/), aggregations, math, schema handling, codegen, and theimpl/internals. Also holds deprecated csv/tsv and HTML integrations that now live in dedicated modules.- I/O modules (each depends on
core):dataframe-csv,dataframe-json,dataframe-excel,dataframe-arrow,dataframe-jdbc. The rootdataframeartifact re-exports Arrow/Excel/JDBC/CSV/JSON asapi.dataframe-jdbcships built-inDbTypesupport for H2, MariaDB, MySQL, MS SQL Server, PostgreSQL, SQLite, and DuckDB (any other JDBC database works via a user-suppliedDbType); seedataframe-jdbc/AGENTS.md. - Integrations:
dataframe-jupyter,dataframe-geo→dataframe-geo-jupyter,dataframe-openapi→dataframe-openapi-generator. - Compiler/build tooling:
- The Kotlin DataFrame compiler plugin — the recommended way to get compile-time type-safe extension
properties — is NOT in this repo. It is developed in the Kotlin repository at
github.com/JetBrains/kotlin/tree/master/plugins/kotlin-dataframe. This repo'splugins/kotlin-dataframeis a disabled, out-of-date legacy copy (its tests are turned off; see issue #1290) — do not treat it as the live plugin. dataframe-compiler-plugin-core— a shaded subset of:corebundled inside that compiler plugin (and IntelliJ) to run compile-time interpreters of operations; it is not itself a compiler plugin. See itsAGENTS.md.plugins/*is mostly dead code — seeplugins/AGENTS.mdbefore touching any of it.plugins/symbol-processor(KSP codegen for@DataSchema) andplugins/dataframe-gradle-pluginare disabled too (KSP1 is not compatible with Kotlin 2.3+), alongsideplugins/kotlin-dataframe; none of the three is insettings.gradle.kts, so nothing there is compiled or tested. Still active:expressions-converterandpublic-api-modifier. The formerkeywords-generatormodule has moved intobuild-logicas thedfbuild.keywordsGeneratorconvention plugin.
- The Kotlin DataFrame compiler plugin — the recommended way to get compile-time type-safe extension
properties — is NOT in this repo. It is developed in the Kotlin repository at
- Build logic lives in
build-logic/andbuild-settings-logic/as convention plugins (e.g.conventions.plugins.dfbuild.*), not inline in the module build files.
Most modules ship their own AGENTS.md (core, dataframe-csv, dataframe-json, dataframe-excel,
dataframe-arrow, dataframe-jdbc, dataframe-geo, dataframe-compiler-plugin-core, samples,
docs/StardustDocs) with module-specific details. Read the relevant module's AGENTS.md before working in
it — it usually answers structure/pattern questions directly, so you can skip broad code exploration.
The public operations API is organized as one file per operation under
core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/ (e.g. filter.kt, groupBy.kt, join.kt). When adding
or changing an operation, find the sibling file for the closest existing operation and follow its structure.
Generated sources & KDoc preprocessing (KoDEx)
Public KDocs use KoDEx notations ({@include [X]}, @set/@get/$, @sample, @ExcludeFromSources,
@ExportAsHtml). See KODEX_KDOC_PREPROCESSING.md and KDOC_GUIDELINES.md.
- KoDEx (an external KDoc-preprocessing tool, applied via the
kodexconvention plugin) expands the templated KDocs.core:processKDocsMainprocesses KDocs intogenerated-sources; themainKodexcompilation builds those processed sources into KoDEx jars (so@ExcludeFromSourcesis stripped from both sources and compiled classes). Publishing selects thekodexJavacomponent viacomposeOf { from(kodexAwareComponentToPublish()) }, andapiBuild(apiDump/apiCheck) reads the KoDEx jar to validate the published API. - Dokka documents the KoDEx-processed sources too. In KoDEx modules,
dfbuild.kodexsuppresses themainDokka source set and enablesmainKodexinstead (display name copied frommain), so the API reference shows the expanded KDocs. With-PskipKodex, Dokka falls back to the plainmainsources. Dokka's HTML styling (logo, footer, homepage link) lives indfbuild.dokkaanddocs/dokka/. processKDocsMaindoes not track its output files — it only checks thatgenerated-sources/is non-empty. After reverting or editing anything under*/generated-sources, run./gradlew processKDocsMain --rerun, or Dokka/the KoDEx jars are built from the stale files.- Don't hand-edit generated sources, and don't grep/crawl the tree. Every module built with KoDEx (
core,dataframe-csv,dataframe-json,dataframe-excel,dataframe-geo,dataframe-jdbc) has a trackedgenerated-sources/copy, plus checked-in accessors under**/src/generated-dataschema-accessors/and generated HTML underdocs/StardustDocs/resources/. Ingenerated-sources/the implementation and public API are the same as the hand-writtensrc/main/kotlin/…— KoDEx only expands the KDoc and strips the doc-only fragments (declarations marked@ExcludeFromSources). So searching the tree (**/generated-sources/**,**/generated-dataschema-accessors/**) just doubles every hit and bloats context — do code work fromsrc/main/kotlin/…. The one reason to open a generated file is the KDoc: it is the fully-expanded documentation (all{@include …}/@set/@getresolved, URLs inlined). If you specifically need a symbol's final rendered docs, open that single generated file deliberately — don't explore. A CI bot runsprocessKDocsMain korro syncExampleFoldersand auto-commits*/generated-sources,docs/StardustDocs/resources/snippets/,docs/StardustDocs/topics/andexamples/projects— you don't run or commit those yourself. The authority for that list is thegit addline in.github/workflows/generated-sources-master.yml, not prose — check it there before you assume a path is bot-maintained. Three things the bot does not produce, which the PR that needs them must carry itself: the iframe HTML underdocs/StardustDocs/resources/outsidesnippets/(api/io/guides/modify), whose path is never staged;docs/StardustDocs/topics/_shadow_resources.md, whose path is staged but whose generating task (updateShadowResources) the bot never runs; and the data-schema accessors under**/src/generated-dataschema-accessors/, which can no longer be generated at all — the KSP/Gradle plugin that produced them is deprecated (plugins/symbol-processor,plugins/dataframe-gradle-plugin, see above), so they are frozen, hand-maintained sources that happen to be named "generated". Their path is not staged either; only the second copy inside*/generated-sources/src/generated-dataschema-accessors/rides along, because it sits under a stagedgenerated-sourcesdirectory. Seedocs/StardustDocs/AGENTS.md. - For KDocs: never write from scratch — reuse/
@includean existing operation's KDoc and adapt it. Reusable KDoc fragments are written once asinternal/privateinterfaces andtypealias … = Nothingdeclarations and composed via@include; this pattern is used in every KoDEx module (the shared cross-module fragment library lives incore'sdocumentation/package).
Documentation samples
Documentation snippets are runnable tests. The samples module and core's samplesTest/korro tasks execute
sample code, save outputs, and inject them into the WriterSide docs under docs/StardustDocs/. Migration of samples
into the :samples module is in progress; new documentation samples belong there.
Rules for website topics and samples are in DOCUMENTATION_GUIDELINES.md; for an operation page use the
operation-website-documentation skill (.agents/skills/operation-website-documentation/SKILL.md).
Code style
- Kotlin official style, enforced by ktlint (
ktlint_official, experimental rules enabled) via.editorconfig. IntelliJ Ktlint plugin recommended. In IDEA, delegate build actions to Gradle. - 4-space indent, LF, UTF-8, 120-column max line length (see
.editorconfigfor exact per-glob overrides). - No wildcard imports — star-import thresholds are set to effectively infinite.
- Class/function signatures with ≥4 parameters are forced multiline.
ktlint_standard_chain-method-continuation = disabled— deliberate. Group operations on one line when possible so a chain reads like a sentence; only start a new line when a new operation begins:df .update { x and y }.where { true }.with { it + 1 } .split { z }.by(",").into("z1", "z2") .groupBy { cols(a, b, c) }.aggregate { count { d } into "count" mean { d } into "mean" } .print()
Constraints
- Base all PRs on
master; the current checked-out branch may be a feature branch (git statusat session start). - Bug fixes require a reproducing test; new public APIs require docs + tests. A change in behaviour that users can observe also requires docs: the operation's website page and the KDoc of the public function a user calls, not only the KDoc of an internal function or an extension point.
- Public API is guarded by binary-compatibility-validator in every publishable module — when you change public
signatures, run the
apiDump/apiCheckGradle tasks and commit the module's updatedapi/*.apidump. - DB tests in
dataframe-jdbcare structured to run against either Dockerized or locally installed DBMS (io/local/per-database tests,io/db/type tests,io/h2/). Do not point tests at production databases.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

