Skip to content

Bump io.github.charlietap.chasm:chasm from 1.4.8 to 2.0.0 - #172

Open
dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/gradle/io.github.charlietap.chasm-chasm-2.0.0
Open

dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/gradle/io.github.charlietap.chasm-chasm-2.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 21, 2026

Copy link
Copy Markdown
Contributor

Bumps io.github.charlietap.chasm:chasm from 1.4.8 to 2.0.0.

Release notes

Sourced from io.github.charlietap.chasm:chasm's releases.

2.0.0

Hey 👋🏼

I've been working hard over the last few weeks on a set of changes that lay the foundation for the 2.0 series of chasm, and I'm proud to say we're ready for a release. Chasm 1.0'd back in August of last year and since then we've made huge strides in maturing and stabilising the runtime, in order to continue to grow and move forward I've made some breaking changes now with a view for what comes next. As always feedback is welcome and feel free to raise a discussion or an issue if bump into any problems

Breaking Changes

  • A new Android target (min SDK 28)
  • JVM target is now minimum JDK 17
  • A redesigned Host Function API
  • The deprecated macosX64 and iosX64 targets have been removed
  • The Gradle plugin no longer supports AGP 8
  • Changes to plugin generated implementations as they are now private by default and constructed through top level factory functions
  • Previously deprecated APIs and configuration options have been removed, including producer mode and RuntimeConfig.bytecodeFusion

New Targets and version requirements

Chasm historically had a JVM target only, Android used this same implementation. One of the things I have decided with chasm is that I want to do everything I can inside of the native constraints of each platform, that means no FFI or anything like that. In order to achieve this I need to have both an Android target and a JVM target so I can do what's best for both platforms. Therefore we now have an Android target (min SDK 28) and a JVM target which is min JDK 17

I've also removed the deprecated macosX64 and iosX64 Kotlin/Native targets.

Host functions

The host function API is probably the biggest change here. Previously host functions received a list of values and returned another list of values. This was straightforward to work with but meant we were creating objects and marshalling values every time we crossed the host boundary.

Host functions now read their parameters and write their results directly into Chasms stack. There are helpers for reading and writing the different Wasm types, so you don't need to manually interpret the underlying representation.

The new API also gives host functions access to memories, tables, globals and tags, including growing memories and tables and performing bulk operations. You can create and inspect extern references, allocate and modify Wasm GC structs and arrays, and raise Wasm exceptions that guest code can catch.

There's also explicit control over reference lifetimes. If your host code needs to hold onto a reference after the function returns you can retain it, then release it when you're done.

Gradle plugin and generated interfaces

If you're using the Gradle plugin you'll need to update how you construct generated services. For example, a service named FibonacciService now gets a fibonacciService(bytes) factory function which returns the interface.

The implementation is private by default, and the interface, factory and implementation each have their own visibility setting. If you're using chasm-coroutines the generated factory function will be suspending

Android integration now requires AGP 9, and the old producer mode and global suspending factory option have been removed. The deprecated RuntimeConfig.bytecodeFusion option has also gone; fusion was already always enabled, so this doesn't change how the runtime executes your code.

Performance

It wouldn't be a Chasm release without more performance, and nothing has changed here. I'll go into the details below but you should see roughly 20% faster execution and considerably less memory usage... testing Chasms corpus of peak memory was half what it was previously but mileage will vary case by case. Some platforms will see more of an uplift than others Android in particular is much faster now we use a ByteArray, it transpires ART has suboptimal performance when dealing with byte buffers. The gains come from a couples of threads of work

Linear memory

The linear memory implementations have had a substantial rework across Native, JVM and Android.

Previously growing memory on Native meant allocating a larger array and copying the existing contents over. The JVM implementation reserved some spare capacity, but eventually had to do the same thing when that capacity was exhausted.

... (truncated)

Commits
  • 94dc2d3 prepare for release 2.0.0
  • a0fba6b plugin: avoid lookup in typesafe global accessors
  • 10c6f5d plugin: generate static factory functions and hide implementations by default
  • e8bce5e memory: rework jvm implementation to use mmap
  • 5deca0e memory: align out of memory error behaviour
  • 4bcd6a0 memory: reimpliment native linear memory on top of mmap
  • dfe2d59 build: move plugin function tests into separate conventions plugin
  • a3171ab libs: add cross platform mmap abstraction
  • a207e39 memory: rework jvm backend to use mmap and lower the minimum jdk to 17
  • e480dd8 build: set minimum java target to jdk 22
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [io.github.charlietap.chasm:chasm](https://github.com/CharlieTap/chasm) from 1.4.8 to 2.0.0.
- [Release notes](https://github.com/CharlieTap/chasm/releases)
- [Commits](CharlieTap/chasm@1.4.8...2.0.0)

---
updated-dependencies:
- dependency-name: io.github.charlietap.chasm:chasm
  dependency-version: 2.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file java Pull requests that update java code labels Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file java Pull requests that update java code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants