{"id":676201,"date":"2026-01-23T14:07:20","date_gmt":"2026-01-23T13:07:20","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=676201"},"modified":"2026-01-27T13:33:14","modified_gmt":"2026-01-27T12:33:14","slug":"exposed-1-0-is-now-available","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/exposed-1-0-is-now-available","title":{"rendered":"Exposed 1.0 Is Now Available"},"content":{"rendered":"\n<p>This is the first major release of <a href=\"https:\/\/www.jetbrains.com\/exposed\/\" target=\"_blank\" rel=\"noopener\">Exposed<\/a> \u2013 a huge milestone for both the project and the Exposed team! This release brings many new exciting features, the most requested being R2DBC support, as well as performance enhancements and bug fixes. Exposed 1.0 also introduces a stable API that guarantees no breaking changes until the next major release.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Get started<\/h2>\n\n\n\n<p>Can\u2019t wait to start building your next project with Exposed 1.0? Check out the examples with <a href=\"https:\/\/github.com\/JetBrains\/Exposed\/tree\/main\/samples\/exposed-ktor\" target=\"_blank\" rel=\"noopener\">Ktor<\/a> or <a href=\"https:\/\/github.com\/JetBrains\/Exposed\/tree\/main\/samples\/exposed-spring\" target=\"_blank\" rel=\"noopener\">Spring<\/a> and join the <a href=\"https:\/\/slack-chats.kotlinlang.org\/c\/exposed\" target=\"_blank\" rel=\"noreferrer noopener\">#exposed<\/a> channel on Kotlin Slack if you have any questions or feedback.<\/p>\n\n\n\n<div class=\"buttons\">\n        <div class=\"buttons__row\">\n            <a class=\"ek-link jb-download-button\" title=\"Get Started With Exposed\" href=\"https:\/\/kotl.in\/vpbuvk\" target=\"_blank\" rel=\"noopener\" data-test=\"blog-article-cta\" data-cl=\"true\">Get Started With Exposed<\/a>\n         <\/div>\n<\/div>\n\n\n\n<p>If you are already using Exposed, check out the <a href=\"https:\/\/www.jetbrains.com\/help\/exposed\/migration-guide-1-0-0.html\" target=\"_blank\" rel=\"noopener\">Migration Guide<\/a> on how to migrate from version 0.61.0 to 1.0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s new<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">R2DBC<\/h3>\n\n\n\n<p>Highly requested by the community, <a href=\"https:\/\/r2dbc.io\" target=\"_blank\" rel=\"noopener\">R2DBC<\/a> support has made it into Exposed. This brings <a href=\"https:\/\/www.jetbrains.com\/help\/exposed\/working-with-connectionfactory.html\" target=\"_blank\" rel=\"noopener\">support<\/a> for reactive drivers to the Exposed SQL DSL approach.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val database = R2dbcDatabase.connect(\n    url = \"r2dbc:postgresql:\/\/db:5432\/mydatabase\",\n        databaseConfig = R2dbcDatabaseConfig {\n        defaultMaxAttempts = 1\n        defaultR2dbcIsolationLevel = IsolationLevel.READ_COMMITTED\n\n        connectionFactoryOptions {\n            option(ConnectionFactoryOptions.USER, dbUser)\n        }\n    }\n)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Spring Support<\/h2>\n\n\n\n<p>Spring is heavily used in Kotlin and with Exposed. For 1.0, we will continue to support Spring Boot 3 alongside Spring Boot 4. Exposed brings many quality of life improvements when using Spring with Exposed, such as GraalVM native image support and better transaction management.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Component\n@Transactional\nclass UserService {\n    \/\/ Use Exposed dsl without `transaction { }`\n    fun findUserById(id: UserId): User? =\n        UserTable.selectAll().where { UserTable.id eq id.value }\n            .firstOrNull()?.let { row ->\n                User(\n                    id = UserId(row[UserTable.id].value),\n                    name = row[UserTable.name],\n                    age = row[UserTable.age],\n                )\n            }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Exposed 1.0: Stable, scalable, and looking forward | Chantal Loncle<\/h2>\n\n\n\n<p>Chantal Loncle gave an overview of Exposed 1.0, how we got here, and what the future might bring at KotlinConf 2025.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Exposed 1.0: Stable, Scalable, and Looking Forward | Chantal Loncle\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/xgfeqj8UyVA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Thank you!<\/h2>\n\n\n\n<p>We want to thank everyone for their support, contributions, and feedback as we prepared for this release!<br><br>We\u2019d especially like to thank all of our contributors whose pull requests were included in this release:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/Avi18971911\" target=\"_blank\" rel=\"noopener\">Avi18971911<\/a>, <a href=\"https:\/\/github.com\/Attacktive\" target=\"_blank\" rel=\"noopener\">Attacktive<\/a>, <a href=\"https:\/\/github.com\/marceligrabowski\" target=\"_blank\" rel=\"noopener\">Marceli Grabowski<\/a>, <a href=\"https:\/\/github.com\/med01-flutter-uki\" target=\"_blank\" rel=\"noopener\">Michael Edwards<\/a>, <a href=\"https:\/\/github.com\/ntkoopman\" target=\"_blank\" rel=\"noopener\">Tim Koopman<\/a>, <a href=\"https:\/\/github.com\/sokomishalov\" target=\"_blank\" rel=\"noopener\">Mikhael Sokolov<\/a>, <a href=\"https:\/\/github.com\/Blad3Mak3r\" target=\"_blank\" rel=\"noopener\">Juan Luis Caro<\/a>, <a href=\"https:\/\/github.com\/nicktelford\" target=\"_blank\" rel=\"noopener\">Nick Telford<\/a>, <a href=\"https:\/\/github.com\/IlyaPechuro\" target=\"_blank\" rel=\"noopener\">Ilya<\/a>, <a href=\"https:\/\/github.com\/kchung1995\" target=\"_blank\" rel=\"noopener\">Kuyho Chung<\/a>, <a href=\"https:\/\/github.com\/tronto20\" target=\"_blank\" rel=\"noopener\">tronto20<\/a>, <a href=\"https:\/\/github.com\/mole828\" target=\"_blank\" rel=\"noopener\">mole828<\/a>, <a href=\"https:\/\/github.com\/zbqmgldjfh\" target=\"_blank\" rel=\"noopener\">Jiwoo Kim<\/a>, <a href=\"https:\/\/github.com\/sh-cho\" target=\"_blank\" rel=\"noopener\">Seonghyeon, Cho<\/a>, <a href=\"https:\/\/github.com\/zackman0010\" target=\"_blank\" rel=\"noopener\">Zachary Sistrunk<\/a>, <a href=\"https:\/\/github.com\/devch37\" target=\"_blank\" rel=\"noopener\">devch37<\/a><\/p>\n\n\n\n<p>Your suggestions and <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/EXPOSED\" target=\"_blank\" rel=\"noopener\">issue reports<\/a> are always welcome!<\/p>\n\n\n\n<p><a href=\"https:\/\/www.jetbrains.com\/help\/exposed\/home.html\" target=\"_blank\" rel=\"noopener\">Get Started with Exposed<\/a> | Join the Community on <a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">Slack<\/a><\/p>\n","protected":false},"author":1566,"featured_media":676204,"comment_status":"closed","ping_status":"closed","template":"","categories":[4898,89,907],"tags":[4974,21,76,477,4975],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/676201"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/1566"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=676201"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/676201\/revisions"}],"predecessor-version":[{"id":677144,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/676201\/revisions\/677144"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media\/676204"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=676201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=676201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=676201"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=676201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}