<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/anvil-time-for-a-change-xptiautfn" -->

---
title: Anvil: time for a change | daily.dev
description: Anvil, a virtual-layout Android view library, has been rewritten and released as version 0.1.0, merging the 'forge' development branch into master. The new...
canonical: https://daily.dev/posts/anvil-time-for-a-change-xptiautfn
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Anvil: time for a change | daily.dev
og:description: Anvil, a virtual-layout Android view library, has been rewritten and released as version 0.1.0, merging the 'forge' development branch into master. The new...
og:url: https://daily.dev/posts/anvil-time-for-a-change-xptiautfn
og:image: https://api.daily.dev/og/posts/xpTiAUTFN.png
og:image:alt: Anvil: time for a change
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Anvil: time for a change

**[zserge's blog](https://daily.dev/sources/zserge)** · 7 min read · 0 upvotes · 0 comments

## Summary

Anvil, a virtual-layout Android view library, has been rewritten and released as version 0.1.0, merging the 'forge' development branch into master. The new version is 5-7 times faster, produces less garbage collection overhead, and can render around 4000 cycles per second for a 100-view layout. It adds first-class Kotlin and Java 8 lambda support while retaining Java 6 compatibility, switches to imperative statements instead of return-value chains, splits distribution into separate SDK-level artifacts (sdk10, sdk15, sdk19) to reduce APK size, introduces reactive ViewHolder-based adapters that update without manual notifyDataSetChanged calls, and trims the overall API surface by 25%. The author warns that apps built on Anvil 0.0.12 will need breaking API changes to migrate, and that the Backstack class was removed (possibly to become its own library) while the animations API may still change again.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://zserge.com/posts/anvil-forge-merged>

## Questions this post answers

### What changed between Anvil 0.0.12 and Anvil 0.1.0 for Android view rendering?

Anvil 0.1.0 is a breaking rewrite that is 5-7 times faster than 0.0.12, keeps a single virtual layout tree that it patches in place instead of diffing two trees, and produces almost no garbage during rendering. It adds first-class Kotlin and Java 8 lambda syntax, switches from return-value chaining to imperative statements, and reduces the API by 25%. Apps built on 0.0.12 need code changes to migrate, since APIs were altered.

_Track breaking API changes like Anvil's before upgrading a production Android app on daily.dev._

### How does Anvil 0.1.0 reduce APK size compared to the previous version?

Anvil 0.1.0 splits its Maven artifact into separate builds per minSdk level - co.trikita:anvil-sdk10, anvil-sdk15, and anvil-sdk19 - instead of one co.trikita:anvil package containing generated bindings for both Android 2.3.3 and Android 4.0.3, which previously added roughly 500KB to APK size regardless of target platform.

_Developers weighing library footprint against APK size can follow packaging changes like this on daily.dev._

### How do reactive adapters work in Anvil 0.1.0 compared to the old Adapter implementation?

Anvil 0.1.0 uses a ViewHolder-based RenderableAdapter where existing, currently shown list items automatically update when Anvil.render() is called, without needing notifyDataSetChanged(). The older Anvil adapter required calling notifyDataSetChanged() to force any redraw. notifyDataSetChanged() is still needed only when items are added or removed, so new reactive item views get created.

_Anyone debugging stale list views in Android can compare adapter patterns like this via daily.dev._

## Similar posts on daily.dev

- [From Dagger to Metro](https://daily.dev/posts/from-dagger-to-metro-iwqblxioz) · Vinted · 0 upvotes · 0 comments
- [What's new in the Jetpack Compose April '26 release](https://daily.dev/posts/what-s-new-in-the-jetpack-compose-april-26-release-dsjkgpbni) · Android Developers Blog · 1 upvotes · 0 comments
- [15 Years of Android App Architectures](https://daily.dev/posts/15-years-of-android-app-architectures-tjc7domfh) · Medium · 2 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#java](https://daily.dev/tags/java), [#android](https://daily.dev/tags/android), [#kotlin](https://daily.dev/tags/kotlin)

[View this post on daily.dev](https://daily.dev/posts/anvil-time-for-a-change-xptiautfn)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Anvil: time for a change","url":"https://daily.dev/posts/anvil-time-for-a-change-xptiautfn","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/anvil-time-for-a-change-xptiautfn"},"datePublished":"2026-08-23T10:20:16.328Z","dateModified":"2026-08-23T10:21:35.177Z","description":"Anvil, a virtual-layout Android view library, has been rewritten and released as version 0.1.0, merging the 'forge' development branch into master. The new...","image":"https://media.daily.dev/image/upload/s--CxzD6vbw--/f_auto/v1722860399/public/Placeholder%2005","thumbnailUrl":"https://media.daily.dev/image/upload/s--CxzD6vbw--/f_auto/v1722860399/public/Placeholder%2005","isAccessibleForFree":true,"articleSection":"zserge's blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"zserge's blog","logo":"https://media.daily.dev/image/upload/s--KQnFBOIT--/f_auto,q_auto/v1787480407/logos/zserge","url":"https://daily.dev/sources/zserge"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/anvil-time-for-a-change-xptiautfn","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,java,android,kotlin","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"zserge's blog","item":"https://daily.dev/sources/zserge"},{"@type":"ListItem","position":3,"name":"Anvil: time for a change"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/anvil-time-for-a-change-xptiautfn#faq","mainEntity":[{"@type":"Question","name":"What changed between Anvil 0.0.12 and Anvil 0.1.0 for Android view rendering?","acceptedAnswer":{"@type":"Answer","text":"Anvil 0.1.0 is a breaking rewrite that is 5-7 times faster than 0.0.12, keeps a single virtual layout tree that it patches in place instead of diffing two trees, and produces almost no garbage during rendering. It adds first-class Kotlin and Java 8 lambda syntax, switches from return-value chaining to imperative statements, and reduces the API by 25%. Apps built on 0.0.12 need code changes to migrate, since APIs were altered. Track breaking API changes like Anvil's before upgrading a production Android app on daily.dev."}},{"@type":"Question","name":"How does Anvil 0.1.0 reduce APK size compared to the previous version?","acceptedAnswer":{"@type":"Answer","text":"Anvil 0.1.0 splits its Maven artifact into separate builds per minSdk level - co.trikita:anvil-sdk10, anvil-sdk15, and anvil-sdk19 - instead of one co.trikita:anvil package containing generated bindings for both Android 2.3.3 and Android 4.0.3, which previously added roughly 500KB to APK size regardless of target platform. Developers weighing library footprint against APK size can follow packaging changes like this on daily.dev."}},{"@type":"Question","name":"How do reactive adapters work in Anvil 0.1.0 compared to the old Adapter implementation?","acceptedAnswer":{"@type":"Answer","text":"Anvil 0.1.0 uses a ViewHolder-based RenderableAdapter where existing, currently shown list items automatically update when Anvil.render() is called, without needing notifyDataSetChanged(). The older Anvil adapter required calling notifyDataSetChanged() to force any redraw. notifyDataSetChanged() is still needed only when items are added or removed, so new reactive item views get created. Anyone debugging stale list views in Android can compare adapter patterns like this via daily.dev."}}]}
```

