A Kotlin Multiplatform library for data lake-like storage and querying, with a standalone Ktor server and a Compose Multiplatform demo app.
LakePile/
├── core/ KMP library — data lake storage & query engine
├── shared-api/ KMP library — shared DTOs & API route contracts
├── client-sdk/ KMP library — Ktor client wrapper for the server
├── server/ JVM app — standalone Ktor server
├── demoApp/ KMP app — Compose Multiplatform demo (Android/iOS/Desktop)
├── iosApp/ iOS Xcode project (wraps demoApp framework)
└── build-logic/ Gradle convention plugins for shared build config
demoApp → core, client-sdk → shared-api
server → core, shared-api
- core — standalone, zero internal dependencies
- shared-api — standalone, zero internal dependencies
- client-sdk — depends on shared-api
- server — depends on core + shared-api
- demoApp — depends on core + client-sdk
./gradlew :core:build # Build for all targets
./gradlew :core:jvmTest # Run JVM tests./gradlew :server:run # Start Ktor server on http://localhost:8080The server requires an API key for all requests. Set it via the LAKEPILE_API_KEY environment variable before starting:
# Option 1: export in your shell
export LAKEPILE_API_KEY=my-secret-key
./gradlew :server:run
# Option 2: use a .env file (e.g. with direnv or dotenv-cli)
echo "LAKEPILE_API_KEY=my-secret-key" > .envEvery API request must include the key in the X-Api-Key header:
curl -H "X-Api-Key: my-secret-key" http://localhost:8080/api/v1/collections./gradlew :demoApp:assembleDebug./gradlew :demoApp:runOpen the iosApp/ directory in Xcode and run from there.
The KMP library targets: Android, iOS, JVM.