Amper Update, November 2025 – Extensibility Preview
Amper 0.9.0 is out, and it brings the first version of our extensibility prototype! Read on for all of the details, and see the release notes for the full list of changes and bug fixes.
To get support for Amper’s latest features, use IntelliJ IDEA 2025.3 Beta (or newer).
New Amper website
We revamped our documentation and turned it into a brand new website! You no longer have to read Markdown files on GitHub. We hope you’ll enjoy the new structure, as well as the navigation and search functionality.
Check it out at https://amper.org.

Extensibility preview
It’s finally here: our first preview of Amper’s extensibility!
Our philosophy is to give a “batteries included” experience to our users, and this is why we want Amper to cover the most common use cases out of the box. However, a lot of projects have special needs, and the built-in behavior falls short eventually. To address this, Amper now offers the option to write custom tasks and expose them to your modules via plugins.
Note: Only local plugins are supported at the moment, but we will soon add the ability to publish and share plugins.
In Amper 0.9.0, you can create modules with the new jvm/amper-plugin product type. These modules contain the Kotlin code implementing your custom tasks, and a plugin.yaml file to register your tasks and their inputs and outputs.
Why do you need to use both Kotlin and YAML? As usual with Amper, tooling is paramount. Thanks to this approach, you will get nice diagnostics in case you make mistakes with your task wiring. Don’t worry, though, navigating between YAML and Kotlin is already seamless with the current basic IDE support.

Task dependencies are automatically inferred based on inputs and outputs, and task avoidance is already available by default. Inputs can be simple scalar values or files, or even your module’s compile or runtime classpath – thanks to the built-in Classpath type. Outputs can be regular files, but they can also be registered as generated sources or resources so the rest of the build takes them into account.
Build your own plugin from scratch by following our plugin quick-start guide, and tell us what you think in our Slack channel or in a YouTrack issue.
Please bear in mind that this preview is incomplete, and many more features will come in the future, including:
- The ability to publish plugins and share them with other projects.
- Templates that are bundled with your plugin to add configuration to the consumer module.
- Reduced boilerplate when writing tasks that are only used in a single module.
- Services and libraries for common task-authoring needs.
- More IDE quick-fixes and intention actions.
Learn more about the current and future state in our plugin documentation.
Dependency resolution performance improvements
The dependency resolution phase was previously a performance bottleneck, especially during IDE import and sync.
Even though all downloaded files are locally cached and reused, building the dependency graph itself takes time, as Amper needs to read all the local pom.xml and Gradle metadata files. Amper now caches the dependency graph itself and reuses it when your dependencies haven’t changed, which can sometimes save tens of seconds on hot caches!
There is certainly more we can do here, and we’ll continue improving dependency resolution performance, so stay tuned!
Incremental compilation for Java
Amper has had task avoidance since day one, which means that it skips the whole compilation task of a module if its sources and dependencies haven’t changed. However, this doesn’t help if you have a large module with lots of sources, because any change in any file will cause the recompilation of the whole module.
This is where incremental compilation comes in. In Amper 0.9.0, you can use our incremental Java compilation engine, which recompiles only what’s necessary based on the exact changes in the module sources. Any change in your sources will still cause the compilation task to run, but now the task itself will be faster.
To enable this feature, simply add the following to your module.yaml file:
settings:
java:
compileIncrementally: true
Maven-like layout support
Amper’s default directory layout is simple and concise, and we love it. That said, we do understand that transitioning from Maven or Gradle is quite tedious and error-prone if it involves moving all files around. This is particularly painful if you want to try out Amper in a separate long-lived Git branch and get updates from your main branch.
As of Amper 0.9.0, you can choose to keep your sources and resources in the conventional Maven directory layout, so you don’t have to move your existing files immediately:

To do so, add layout: maven-like to your module.yaml file. If you intend to do this for all your modules, use a template to handle this in a central place.
Note: The maven-like layout is only available for the “jvm/app” and “jvm/lib” product types.
Library catalog at the project root
Amper now supports placing your Gradle-style version catalog (libs.versions.toml) in the project root instead of in the gradle folder. Of course, you are free to keep using gradle/libs.versions.toml if you want to keep compatibility with your Gradle layout.
In the IDE, using intention actions to extract dependencies to a new catalog will now create the catalog in the project root.
Note: You can only use a single library catalog for your project, so you have to pick one of the locations.
IDE improvements
Auto-sync of the project configuration
Changes to your Amper configuration files are now automatically taken into account, which means you no longer need to manually click the Sync
button!
This was made possible by the improvements in dependency resolution caching we’ve seen above.
If syncing involves downloading new dependencies or other lengthy processes, you’ll see a progress indicator in the status bar; otherwise, the sync should be seamless.
Note: This behavior can be configured for the current project in “Settings | Build, Execution, Deployment | Build Tools”. If you want to change the default for future new projects, you can do so in “Settings | Advanced Settings | Build Tools. Amper”.
Sync details
The Build tool window now provides more insights into the stages of the sync process, and shows errors and warnings arising from them.


IDE assistance for setting the main class
You can configure the entrypoint of a jvm/app module using settings.jvm.mainClass. Finding the fully-qualified name of your main class is never fun, though. This is why IntelliJ IDEA now provides completion for it directly in your YAML file!
The completion list includes all class names that have a valid main function. By default, only classes present in the module itself are shown, but you can also invoke completion a second time to get results from your dependencies too:
That’s not all. IntelliJ IDEA also provides assistance with navigation and resolution, and it will even warn you about the infamous missing Kt suffix when referring to the class Kotlin generates for top-level main functions.

Improved quick-fix for overridden catalog versions
Amper warns you when your module doesn’t get the requested version of a dependency because of dependency conflicts. However, when this happens with a library catalog dependency, it isn’t obvious what the fix should be, as it depends on your intent.
To address this issue, IntelliJ IDEA now offers two different quick-fixes: one to replace the catalog reference with an explicit version in the problematic module, and one to update the version in the catalog itself. Use Alt+Enter or click the More actions… option in the warning tooltip to access these fixes:


Dedicated color theme settings
You can now customize the colors in your Amper YAML files.
Head over to File | Settings | Editor | Color Scheme | Amper and get creative!

Updated default versions
We updated some of our default versions for toolchains and frameworks:
- Kotlin 2.2.21
- Compose Hot Reload 1.0.0-rc01
- KSP 2.3.0
- JUnit Platform 6.0.1
Also, the default value for settings.jvm.release is now 21.
Try Amper 0.9.0
To update an existing project, use the ./amper update command.
To get started with Amper, check out our Getting started guide. Take a look at some examples, follow a tutorial, or read the comprehensive user guide depending on your learning style.
Share your feedback
Amper is still experimental and under active development. You can provide feedback about your experience by joining the discussion in the Kotlinlang Slack’s #amper channel or sharing your suggestions and ideas in a YouTrack issue. Your input and use cases help shape the future of Amper!