<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr" -->

---
title: Remove md5 as a module checksum hash | daily.dev
description: A proposal on the Erlang forums argues for replacing MD5 with a modern non-cryptographic hash like XXH3-128 for BEAM module checksums, citing benchmarks on OTP...
canonical: https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Remove md5 as a module checksum hash | daily.dev
og:description: A proposal on the Erlang forums argues for replacing MD5 with a modern non-cryptographic hash like XXH3-128 for BEAM module checksums, citing benchmarks on OTP...
og:url: https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr
og:image: https://api.daily.dev/og/posts/9PYgLZkZr.png
og:image:alt: Remove md5 as a module checksum hash
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.

# Remove md5 as a module checksum hash

**[Erlang Forums](https://daily.dev/sources/erlangforums)** · 8 min read · 1 upvotes · 0 comments

## Summary

A proposal on the Erlang forums argues for replacing MD5 with a modern non-cryptographic hash like XXH3-128 for BEAM module checksums, citing benchmarks on OTP 29.0.5 showing checksum time dropping from 19.5ms to 0.3ms when loading 168 stdlib modules, a meaningful chunk of VM boot time for short-lived processes. The proposal outlines deprecating the md5 field in module_info/1, adding a new checksum field returning an algorithm/digest tuple, and eventually returning undefined for md5. It also raises open questions about migrating MD5 usage in ETF's NEW_FUN_EXT Uniq field, including distribution protocol negotiation between nodes during a transition period.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://erlangforums.com/t/remove-md5-as-a-module-checksum-hash/5879>

## Questions this post answers

### Why is MD5 used for module checksums slow in Erlang/OTP and what's a faster alternative?

MD5 checksumming of BEAM modules took 19.563 ms versus 0.327 ms for XXH3-128 when loading 168 stdlib modules on OTP 29.0.5, a roughly 60x difference. This checksum share dropped from 11.17% to 0.20% of total boot time, saving about 13-19 ms depending on the benchmark run. Any modern non-cryptographic hash function with SIMD support is proposed as a viable replacement.

_Track proposals like the MD5 to XXH3-128 module checksum change on daily.dev before they land in a release._

### How would deprecating the md5 field in Erlang's module_info/1 work?

The proposed path deprecates the md5 field in module_info/1, adds a new beam_lib:checksum/1 function and a checksum field returning a tuple of (algorithm, digest) such as {xxh3_128, <<_:128>>}, and after a deprecation period returns undefined for the md5 field, potentially also affecting beam_lib:md5/1.

_Erlang maintainers weighing this deprecation path can follow the discussion's progress via daily.dev._

## Similar posts on daily.dev

- [Expose more of OpenSSL’s KDFs in \`crypto\` \(HKDF, scrypt, Argon2\)](https://daily.dev/posts/expose-more-of-openssl-s-kdfs-in-crypto-hkdf-scrypt-argon2--onzohlz6x) · Erlang Forums · 0 upvotes · 0 comments
- [Git 3.0's upcoming SHA-256 default will be a costly mistake](https://daily.dev/posts/git-3-0-s-upcoming-sha-256-default-will-be-a-costly-mistake-7bvdmnnws) · GitButler Blog · 52 upvotes · 10 comments
- [Linux 7.2 Gets Rid Of The Last Optimized MD5 Implementation](https://daily.dev/posts/linux-7-2-gets-rid-of-the-last-optimized-md5-implementation-f7yahau3j) · Phoronix · 1 upvotes · 0 comments
- [Patch package OTP 29.0-rc2 Released](https://daily.dev/posts/patch-package-otp-29-0-rc2-released-43r5cevzp) · Erlang Forums · 0 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#compiler](https://daily.dev/tags/compiler), [#erlang](https://daily.dev/tags/erlang)

[View this post on daily.dev](https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr)

```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":"Remove md5 as a module checksum hash","url":"https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr"},"datePublished":"2026-08-24T19:40:43.177Z","dateModified":"2026-09-13T19:21:13.003Z","description":"A proposal on the Erlang forums argues for replacing MD5 with a modern non-cryptographic hash like XXH3-128 for BEAM module checksums, citing benchmarks on OTP...","image":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","thumbnailUrl":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","isAccessibleForFree":true,"articleSection":"Erlang Forums","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":"Erlang Forums","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/b352c25bf0ad4af3b186d4cdf1c4f17c","url":"https://daily.dev/sources/erlangforums"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,compiler,erlang","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Erlang Forums","item":"https://daily.dev/sources/erlangforums"},{"@type":"ListItem","position":3,"name":"Remove md5 as a module checksum hash"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/remove-md5-as-a-module-checksum-hash-9pyglzkzr#faq","mainEntity":[{"@type":"Question","name":"Why is MD5 used for module checksums slow in Erlang/OTP and what's a faster alternative?","acceptedAnswer":{"@type":"Answer","text":"MD5 checksumming of BEAM modules took 19.563 ms versus 0.327 ms for XXH3-128 when loading 168 stdlib modules on OTP 29.0.5, a roughly 60x difference. This checksum share dropped from 11.17% to 0.20% of total boot time, saving about 13-19 ms depending on the benchmark run. Any modern non-cryptographic hash function with SIMD support is proposed as a viable replacement. Track proposals like the MD5 to XXH3-128 module checksum change on daily.dev before they land in a release."}},{"@type":"Question","name":"How would deprecating the md5 field in Erlang's module_info/1 work?","acceptedAnswer":{"@type":"Answer","text":"The proposed path deprecates the md5 field in module_info/1, adds a new beam_lib:checksum/1 function and a checksum field returning a tuple of (algorithm, digest) such as {xxh3_128, <<_:128>>}, and after a deprecation period returns undefined for the md5 field, potentially also affecting beam_lib:md5/1. Erlang maintainers weighing this deprecation path can follow the discussion's progress via daily.dev."}}]}
```

