{"id":568261,"date":"2025-05-21T11:38:40","date_gmt":"2025-05-21T10:38:40","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=amper&#038;p=568261"},"modified":"2025-09-15T10:08:03","modified_gmt":"2025-09-15T09:08:03","slug":"amper-update-may-2025","status":"publish","type":"amper","link":"https:\/\/blog.jetbrains.com\/en\/amper\/2025\/05\/amper-update-may-2025","title":{"rendered":"Amper Update, May 2025 \u2013 A Standalone Build Tool for Kotlin, Server-Side and Multiplatform"},"content":{"rendered":"\n<p><a href=\"https:\/\/github.com\/JetBrains\/amper\/releases\/tag\/v0.7.0\" target=\"_blank\" rel=\"noopener\">Amper 0.7.0<\/a> is here, expanding beyond multiplatform apps to include support for server-side development with Ktor and Spring, adding iOS to Amper\u2019s list of supported Kotlin Multiplatform targets, and much more. The standalone version of Amper is now the primary focus of the project, and the Gradle-based variant is being phased out. Read on for details, and as always, see <a href=\"https:\/\/github.com\/JetBrains\/amper\/releases\/tag\/v0.7.0\" target=\"_blank\" rel=\"noopener\">the release notes<\/a> for the full list of changes.<\/p>\n\n\n\n<p><em>To use Amper\u2019s latest features, get <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/IDEA-A-2100662347\/IntelliJ-IDEA-2025.1-Latest-Builds\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA 2025.1.2 Preview<\/a> (or newer).<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Server-side support for Ktor and Spring<\/h2>\n\n\n\n<p>Amper now offers support for <a href=\"https:\/\/ktor.io\/\" target=\"_blank\" rel=\"noopener\">Ktor<\/a> and <a href=\"https:\/\/spring.io\/\" target=\"_blank\" rel=\"noopener\">Spring<\/a> projects out of the box, including the ability to package executable JARs and use BOM dependencies, as well as IDE integrations.<\/p>\n\n\n\n<p>The<a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/main\/examples-standalone\/ktor-simplest-sample\" target=\"_blank\" rel=\"noopener\"> <\/a><a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\/ktor-simplest-sample\" target=\"_blank\" rel=\"noopener\">ktor-simplest-sample<\/a> shows a minimal REST service built with Ktor and Amper:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"3452\" height=\"1575\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/ktor-sample.png\" alt=\"\" class=\"wp-image-568441\"\/><\/figure>\n\n\n\n<p>Amper also supports Spring Boot applications. Try the classic <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\/spring-petclinic-kotlin\" target=\"_blank\" rel=\"noopener\">Spring PetClinic sample<\/a> \u2013 now built with Amper:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/AD_4nXetcP9kbo9VcGQnp7nXKQ6o2dIJpt8T5yBTIIDUdK-u8tVEl41pNHnP6A73VfkAWd1j5d3zl42d0i5Q2f_JyN7kuVOOR2l28fP3e8GrMb3duqt1IMm0dohBKQIDn1cPbZfeAKE6-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>You can enable support for Ktor or Spring in the <code>module.yaml<\/code> file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">product: jvm\/app\n\nsettings:\n\u00a0\u00a0ktor: enabled\n\u00a0\u00a0# or\n\u00a0\u00a0springBoot: enabled\n\u00a0\u00a0# ... rest of your module configuration ...<\/pre>\n\n\n\n<p>This sets up your module with sensible defaults: It adds the required compiler plugins like no-arg and all-open for Spring, applies the appropriate BOM, configures version catalogs, and lets you build an executable JAR using the new <a href=\"https:\/\/github.com\/JetBrains\/amper\/blob\/HEAD\/docs\/Documentation.md#packaging\" target=\"_blank\" rel=\"noopener\"><code>amper package<\/code><\/a> command.<\/p>\n\n\n\n<p>Amper integrates fully with existing IDE functionality for both Ktor and Spring. You get all the essentials, like run configurations and endpoint discovery, and advanced framework-specific tools, such as the <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/spring-tool-window.html#bean-graph\" target=\"_blank\" rel=\"noopener\">Spring Bean Graph<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video autoplay controls loop muted src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/spring-bean-graph.mp4\"><\/video><\/figure>\n\n\n\n<p>To try Amper in server-side projects, refer to the <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\" target=\"_blank\" rel=\"noopener\">samples<\/a> in the repository. You can also use the new templates for server-side projects included in the amper init command.<\/p>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\" class=\"btn\" target=\"\" rel=\"noopener\">Try the server-side samples<\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">IDE improvements<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Improved diagnostics and quick-fixes<\/strong><\/h3>\n\n\n\n<p>In Amper 0.7.0, we\u2019ve made a number of existing warnings and error messages more readable and actionable. We also ensured that Amper degrades gracefully when there are errors in the configuration, preserving tooling support to help you resolve any issues. Here are a few highlights:<\/p>\n\n\n\n<p>If a dependency version is overridden by another dependency that requests a newer version, Amper now reports this as a warning, provides a detailed explanation of why the override occurred, and offers a quick-fix to update the version to match:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video autoplay controls loop muted src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/dependency-resolution-diagnostic.mp4\"><\/video><\/figure>\n\n\n\n<p>Amper now provides clear errors when a multiplatform dependency is missing support for one or more targets required by the module that includes it, and offers various quick-fixes to resolve the issue:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video autoplay controls loop muted src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/platform-mismatch-guava.mp4\"><\/video><\/figure>\n\n\n\n<p>Providing clear diagnostics and actionable guidance for misconfigured builds is one of our top priorities. We\u2019re continuing to improve here and welcome your feedback in the <a href=\"https:\/\/youtrack.jetbrains.com\/newissue?project=Amper\" target=\"_blank\" rel=\"noopener\">issue tracker<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Adding dependencies for unresolved references<\/strong><\/h3>\n\n\n\n<p>When your code references a symbol from another module that isn\u2019t declared as a dependency yet, Amper now offers a quick-fix to add it as a dependency without requiring you to leave the Kotlin file you\u2019re editing:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video autoplay controls loop muted src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/add-dependency.mp4\"><\/video><\/figure>\n\n\n\n<p>This quick-fix currently works for unresolved references to other modules within your project. We\u2019re planning to add support for external libraries like kotlinx.coroutines in upcoming releases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kotlin Multiplatform support in standalone Amper<\/h2>\n\n\n\n<p>With 0.7.0, the standalone version of Amper now supports Kotlin Multiplatform development for iOS, in addition to Android and Desktop. You can build, package, and run KMP apps for these platforms entirely with Amper. No need to directly configure other build tools \u2013 Amper handles all native toolchain integrations behind the scenes.<\/p>\n\n\n\n<p>As an example, we have converted the updated KotlinConf app for these platforms to Amper. You can find the code on <a href=\"https:\/\/github.com\/JetBrains\/kotlinconf-app\/tree\/amper\" target=\"_blank\" rel=\"noopener\">this branch<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2502\" height=\"1750\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/kcapp-code.png\" alt=\"\" class=\"wp-image-568419\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1920\" height=\"1080\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/kcapp-screenshots.png\" alt=\"\" class=\"wp-image-568430\"\/><\/figure>\n\n\n\n<p>To learn more about KMP projects with Amper, take a look at the <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\" target=\"_blank\" rel=\"noopener\">samples<\/a> in the repository.<\/p>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\" class=\"btn\" target=\"\" rel=\"noopener\">Try the Amper-based KMP samples<\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">The future of standalone Amper and Gradle-based Amper<\/h2>\n\n\n\n<p>Amper was initially released as a Gradle-based configuration tool. Gradle\u2019s capabilities and plugin ecosystem helped us prototype quickly and supported early adoption patterns, including per-module migration and the ability to customize the build logic.<\/p>\n\n\n\n<p>Since then, we\u2019ve released a standalone version of Amper that handles the build process entirely on its own, without requiring users to interact with other build tools. Our goal was to answer a few key questions:<\/p>\n\n\n\n<ul>\n<li>Do we gain any user-visible benefits by writing and maintaining a full-fledged build system?<\/li>\n\n\n\n<li>Is it feasible to support most common scenarios out of the box without relying on third-party plugins?<\/li>\n\n\n\n<li>Can Amper provide enough flexibility to cover advanced real-life scenarios without sacrificing high-quality tooling support?<\/li>\n<\/ul>\n\n\n\n<p>Today, we\u2019re excited to share the results of this research. <strong>The standalone version of Amper is now the main path forward. Gradle-based Amper is deprecated and will be phased out in future releases.<\/strong><\/p>\n\n\n\n<p>The standalone version of Amper already supports core KMP and server-side scenarios. In fact, the Amper project itself has been built using standalone Amper for several releases now! Many existing Amper diagnostics, quick-fixes, refactorings, and other features are only possible because Amper controls the entire build process, and we see huge potential for further evolution.<\/p>\n\n\n\n<p>We\u2019re also confident that Amper can offer the flexibility and customizability needed for advanced use cases: custom packaging and deployment, environment-specific configuration (for example, for CI), and plugins. We\u2019re actively working on extensibility to enable all these use cases. We plan to share the first preview of Amper\u2019s extensibility API soon.<\/p>\n\n\n\n<p>If you\u2019re attending <a href=\"https:\/\/kotlinconf.com\/\" target=\"_blank\" rel=\"noopener\">KotlinConf<\/a> this week, watch our talk on May 22 to hear more about Amper\u2019s direction, and stop by our booth to discuss Amper!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Updated dependency versions<\/h2>\n\n\n\n<p>Amper now uses <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/05\/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready\/\">Compose Multiplatform 1.8.0<\/a> by default, which brings Compose Multiplatform support for iOS to Stable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting started with Amper 0.7.0<\/h2>\n\n\n\n<p>To update an existing standalone Amper project, run the update command:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.\/amper update<\/pre>\n\n\n\n<p>To start a new project, simply use init:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">amper init<\/pre>\n\n\n\n<p>For examples, see the <a href=\"https:\/\/github.com\/JetBrains\/amper\/tree\/HEAD\/examples-standalone\" target=\"_blank\" rel=\"noopener\">sample projects<\/a> in the Amper repository.<\/p>\n\n\n\n<p>To enjoy full support for the latest Amper features, use <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/IDEA-A-2100662347\/IntelliJ-IDEA-2025.1-Latest-Builds\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA 2025.1.2 Preview<\/a> (or newer).<\/p>\n\n\n    <div class=\"buttons\">\n        <div class=\"buttons__row\">\n                                                <a href=\"https:\/\/github.com\/JetBrains\/amper\" class=\"btn\" target=\"\" rel=\"noopener\">Try Amper<\/a>\n                                                    <\/div>\n    <\/div>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Share your feedback<\/h2>\n\n\n\n<p>Amper is still experimental and under active development. You can provide feedback about your experience by joining the discussion in the <a href=\"https:\/\/slack-chats.kotlinlang.org\/c\/amper\" target=\"_blank\" rel=\"noopener\">Kotlinlang Slack\u2019s #amper channel<\/a> or sharing your suggestions and ideas in a <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/AMPER\" target=\"_blank\" rel=\"noopener\">YouTrack issue<\/a>. Your input and use cases help shape the future of Amper!<\/p>\n","protected":false},"author":1388,"featured_media":568318,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[6355],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/amper\/568261"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/amper"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/amper"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/1388"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=568261"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/amper\/568261\/revisions"}],"predecessor-version":[{"id":601746,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/amper\/568261\/revisions\/601746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/568318"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=568261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=568261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=568261"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=568261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}