# ExoQuery > Language Integrated Query for Kotlin Multiplatform. Write SQL using native Kotlin syntax with compile-time query generation. ExoQuery transforms Kotlin code like `people.filter { p -> p.age >= 18 }.map { p -> p.name }` directly into SQL at compile time. No string concatenation, no runtime reflection, no DSL builders with special operators. Just regular Kotlin. ## Key Concepts - **Compile-time SQL generation**: Queries are synthesized during compilation, not runtime - **Native Kotlin syntax**: Use `==`, `if/when`, `?:`, `?.let` - they become SQL `=`, `CASE WHEN`, `COALESCE` - **Type-safe**: Full compile-time type checking for queries - **Multiplatform**: JVM (JDBC/R2DBC), Android, iOS, macOS, Linux, Windows ## Quick Example ```kotlin val adults = sql { Table().filter { p -> p.age >= 18 } } //> SELECT p.id, p.name, p.age FROM Person p WHERE p.age >= 18 ``` ## Documentation Welcome to the ExoQuery documentation! ExoQuery is a Language Integrated Query library for Kotlin Multiplatform that allows you to write SQL queries using native Kotlin syntax. ## Getting Started New to ExoQuery? Start here: - [Introduction](https://exoquery.io/docs/01-getting-started/01-introduction) - Learn what ExoQuery is and why it exists - [Installation](https://exoquery.io/docs/01-getting-started/02-installation) - Set up ExoQuery in your project - [Quick Start](https://exoquery.io/docs/01-getting-started/03-quick-start) - Write your first query in minutes ## Core Concepts Understand the fundamentals: - [SQL Blocks](https://exoquery.io/docs/02-core-concepts/01-sql-blocks) - The `sql { }` construct - [Parameters](https://exoquery.io/docs/02-core-concepts/02-parameters) - Using runtime data safely - [Composing Queries](https://exoquery.io/docs/02-core-concepts/03-composing-queries) - Building queries functionally ## Query Operations Learn the day-to-day operations: - [Basic Operations](https://exoquery.io/docs/03-query-operations/01-basic-operations) - Map and Filter - [Joins](https://exoquery.io/docs/03-query-operations/02-joins) - Inner, left, and implicit joins - [Grouping](https://exoquery.io/docs/03-query-operations/03-grouping) - GROUP BY and HAVING - [Sorting](https://exoquery.io/docs/03-query-operations/04-sorting) - ORDER BY - [Subqueries](https://exoquery.io/docs/03-query-operations/05-subqueries) - Correlated subqueries - [Window Functions](https://exoquery.io/docs/03-query-operations/06-window-functions) - Advanced analytics - [Set Operations](https://exoquery.io/docs/03-query-operations/07-set-operations) - Union and Union All ## Actions Modify your data: - [Insert](https://exoquery.io/docs/04-actions/01-insert) - INSERT with returning and conflict handling - [Update](https://exoquery.io/docs/04-actions/02-update) - UPDATE with setParams - [Delete](https://exoquery.io/docs/04-actions/03-delete) - DELETE with returning - [Batch Operations](https://exoquery.io/docs/04-actions/04-batch-operations) - Bulk operations ## Advanced Features Power user features: - [SQL Fragment Functions](https://exoquery.io/docs/05-advanced-features/01-sql-fragments) - Reusable SQL components - [Dynamic Queries](https://exoquery.io/docs/05-advanced-features/02-dynamic-queries) - Runtime query generation - [Free Blocks](https://exoquery.io/docs/05-advanced-features/03-free-blocks) - Custom SQL and UDFs - [Transactions](https://exoquery.io/docs/05-advanced-features/04-transactions) - Transaction support - [Polymorphic Queries](https://exoquery.io/docs/05-advanced-features/05-polymorphic-queries) - Interfaces, sealed classes, and higher-order query functions - [Local Variables](https://exoquery.io/docs/05-advanced-features/06-local-variables) - Variables in SQL blocks - [Abstraction Patterns](https://exoquery.io/docs/05-advanced-features/07-abstraction-patterns) - DRYing up queries that share common joins ## Data Handling Working with data: - [Serialization](https://exoquery.io/docs/06-data-handling/01-serialization) - kotlinx.serialization integration - [Custom Type Encoding](https://exoquery.io/docs/06-data-handling/02-custom-type-encoding) - Custom encoders and decoders - [JSON Columns](https://exoquery.io/docs/06-data-handling/03-json-columns) - JSON and JSONB columns in PostgreSQL - [Column Naming](https://exoquery.io/docs/06-data-handling/04-column-naming) - @SerialName and @ExoEntity - [Nested Datatypes](https://exoquery.io/docs/06-data-handling/05-nested-datatypes) - Complex data structures - [Kotlinx Integration](https://exoquery.io/docs/06-data-handling/06-kotlinx-integration) - JSON and other formats ## Schema-First Development Generate entities from your database: - [Entity Generation](https://exoquery.io/docs/07-schema-first/01-entity-generation) - Compile-time code generation - [AI-Enhanced Entities](https://exoquery.io/docs/07-schema-first/02-ai-enhanced-entities) - Using LLMs for cleaner code ## Reference Quick reference guides: - [SQL Functions](https://exoquery.io/docs/08-reference/01-sql-functions) - Available string functions - [API Reference](https://exoquery.io/docs/08-reference/02-api-reference) - Core types and functions ## Need Help? - Check out the [Examples](https://exoquery.io/examples) for working code samples - Read the [Blog](https://exoquery.io/blog) for tutorials and best practices - Visit the [GitHub Repository](https://github.com/ExoQuery/ExoQuery) for source code and issues ## Supported Databases | Database | JDBC | R2DBC | Native | |----------|------|-------|--------| | PostgreSQL | ✓ | ✓ | - | | MySQL | ✓ | ✓ | - | | SQL Server | ✓ | ✓ | - | | SQLite | ✓ | - | ✓ | | H2 | ✓ | ✓ | - | | Oracle | ✓ | ✓ | - | ## Resources - [GitHub Repository](https://github.com/ExoQuery/ExoQuery) - [Full Documentation](https://exoquery.io/llms-full.txt): Complete docs in one file for AI context