# \[ANN\] Ark.jl v0.4.0 - Archetype-based ECS, now with support for simulations on the GPU

**URL:** <https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786>\
**Category:** Package Announcements\
**Tags:** package, announcement, simulations\
**Created:** [February 23, 2026, 10:54am UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786 "2026-02-23T10:54:22Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tortar](https://avatars.discourse-cdn.com/v4/letter/t/6bbea6/32.png) [@Tortar](https://discourse.julialang.org/u/Tortar)\
**Post date:** [February 23, 2026, 10:54am UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/1 "2026-02-23T10:54:23Z")

</div>

Ark.jl v0.4 focuses on bringing parallelization and customization to the core of the system. This major release introduces three powerful new features: seamless integration with all major GPU backends for component storage, the ability to use custom user-defined storages, and support for parallel queries.

## Release highlights

### GPU Storage

Here, it is possible to appreciate how in the new [nbody demo](https://ark-ecs.github.io/Ark.jl/dev/demos.html#NBody) the performance on a NVIDIA GeForce GTX 1650 is almost 20 times better than using all the 6 cores of my AMD Ryzen 5 5600H CPU:

| CPU N-Body | GPU N-Body |
| --- | --- |
| | |

This is made possible by the new `GPUVector` and `GPUStructArray` component storages. These utilize unified memory to allow for efficient mixed CPU/GPU operations, and are fully compatible with many major backends like CUDA.jl, Metal.jl, oneAPI.jl, and OpenCL.jl.

### Custom Storages

Ark.jl now allows to easily plug any data structures into the ECS which implements the [storage interface](https://ark-ecs.github.io/Ark.jl/dev/manual/components.html#new-component-storages). As long as the new storage is a one-indexed subtype of `AbstractVector` and implements the interface, it can be used. For example, this flexibility allowed us to easily integrate UniqueVectors.jl to support components optimized for O(1) searches.

### Parallel Queries

Queries in archetype‑based ECS are already highly efficient, but this release introduces the necessary tooling to support parallel queries for even greater performance. With this, one can run multiple queries simultaneously thanks to a thread-safe locking mechanism.

### Benchmarks with Agents.jl

We also compared Ark.jl with Agents.jl by faithfully reimplementing the benchmarks at [GitHub - JuliaDynamics/ABMFrameworksComparison: Benchmarks and comparisons of leading ABM frameworks](https://github.com/JuliaDynamics/ABMFrameworksComparison). The [results](https://github.com/JuliaDynamics/ABMFrameworksComparison?tab=readme-ov-file#latest-results) show that Ark.jl is 2-7x faster than Agents.jl on those! A result which surprised me a bit, since the way those benchmarks are structured don’t really allow for an ECS to shine too much. We lose instead pretty much in the LOCS category since currently no spatial facility is implemented for Ark.jl which was then needed to be recreated inline to run these benchmarks.

### More

For a full list of all changes, see the [CHANGELOG](https://github.com/ark-ecs/Ark.jl/blob/main/CHANGELOG.md).

As always, your feedback contributions are highly appreciated!

---

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [February 23, 2026, 11:03am UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/2 "2026-02-23T11:03:59Z")

</div>

Would be great to have some animated demos in the docs. Difficult to understand what’s going on from a single picture.

---

<div class="post-metadata">

**Author:** ![Tortar](https://avatars.discourse-cdn.com/v4/letter/t/6bbea6/32.png) [@Tortar](https://discourse.julialang.org/u/Tortar)\
**Post date:** [February 23, 2026, 1:59pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/3 "2026-02-23T13:59:46Z")

</div>

Totally! Put on my TODO list for the package

---

<div class="post-metadata">

**Author:** ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)\
**Post date:** [February 23, 2026, 3:18pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/4 "2026-02-23T15:18:10Z")

</div>

I made a simple boids render in 3d with the new RayMakie backend:

[![](https://global.discourse-cdn.com/julialang/original/3X/9/c/9c13e8234db69b8ec66d545f215bc0956a8c9ea5.jpeg "boids3d with TraceMakie") ](https://vimeo.com/1163286661)

Somehow I lost the code for it though, so it didnt make it into the blogpost/announcement/RayDemo 😃  
Would be cool to make a 100% stay on the GPU demo with the new version and example!

---

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [February 23, 2026, 4:11pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/5 "2026-02-23T16:11:04Z")

</div>

Now idea how much effort this would be to create. But it would be so cool to visualize a swarm of birds (maybe without the poo…): [https://www.youtube.com/watch?v=UVko9jyAkQg](https://www.youtube.com/watch?v=UVko9jyAkQg)

---

<div class="post-metadata">

**Author:** ![Tortar](https://avatars.discourse-cdn.com/v4/letter/t/6bbea6/32.png) [@Tortar](https://discourse.julialang.org/u/Tortar)\
**Post date:** [February 23, 2026, 9:08pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/6 "2026-02-23T21:08:14Z")

</div>

It would be very nice for sure! Maybe we can try to assemble something, need to look into RayMakie.jl…actually I found now your code at [RayDemo/Ark/boids\_flocking.jl at main · SimonDanisch/RayDemo · GitHub](http://github.com/SimonDanisch/RayDemo/blob/main/Ark/boids_flocking.jl), is this the code you were talking about? Seems it could, actually I didn’t understand that you already had used Ark.jl into it!

---

<div class="post-metadata">

**Author:** ![Tortar](https://avatars.discourse-cdn.com/v4/letter/t/6bbea6/32.png) [@Tortar](https://discourse.julialang.org/u/Tortar)\
**Post date:** [February 23, 2026, 9:09pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/7 "2026-02-23T21:09:15Z")

</div>

isn’t this what @sdanisch is proposing too? (maybe in a less realistic way)

---

<div class="post-metadata">

**Author:** ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)\
**Post date:** [February 23, 2026, 9:29pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/8 "2026-02-23T21:29:10Z")

</div>

the one in raydemo is the first untweaked prototype that looks pretty bad, I only have the video of the nicer demo​😞 but the new GPU demo looks promising, to quickly make something nice 😉

---

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [February 23, 2026, 10:53pm UTC](https://discourse.julialang.org/t/ann-ark-jl-v0-4-0-archetype-based-ecs-now-with-support-for-simulations-on-the-gpu/135786/9 "2026-02-23T22:53:46Z")

</div>

Oh. The video above just looks like noise to me 😅

Sebastian Lague made a great video about it: [https://www.youtube.com/watch?v=bqtqltqcQhw](https://www.youtube.com/watch?v=bqtqltqcQhw)
