Migrating jackson-datatype-money to FasterXML: A Case Study in Open Source Consolidation

How we integrated jackson-datatype-money into the official FasterXML Jackson ecosystem.

photo of Sri Adarsh Kumar
Sri Adarsh Kumar

Senior Software Engineer

Posted on Mar 09, 2026

TL;DR

Zalando's jackson-datatype-money library was archived in November 2025. JSR 354 support is now part of the official FasterXML jackson-datatypes-misc repository.

If you're looking to migrate, the migration guide covers everything you need. The integrated modules are available starting from:

  • Jackson 2.x: com.fasterxml.jackson.datatype:jackson-datatype-javax-money from version 2.19.0 (Maven Central 2.19.0)
  • Jackson 3.x: tools.jackson.datatype:jackson-datatype-javax-money from version 3.0.0 (Maven Central 3.0.0)

The rest of this post covers how the migration came about.

Background

Jackson doesn't natively support JSR 354 monetary types. While FasterXML's jackson-datatypes-misc repository included official support for Joda-Money, JSR 354 support lived separately in Zalando's jackson-datatype-money repository. This created a fragmented ecosystem where developers had to choose between two competing money libraries with inconsistent support levels.

JSR 354 (JavaMoney) is the Java standard for handling monetary amounts and currencies. Led by Werner Keil, Anatole Tresch, and OtΓ‘vio Santana, it provides a robust API for representing money without floating-point precision errors. Zalando's jackson-datatype-money module has been battle-tested in production and adopted by multiple organizations.

When Werner Keil himself opened issue #224 asking about contributing the module to FasterXML, it was clear that consolidation would benefit the entire Jackson ecosystem.

The Problem

The fragmentation caused real issues:

  • New developers couldn't easily find JSR 354 Jackson support
  • The Zalando module had separate release cycles, unsynchronized with core Jackson
  • No clear "official" path for JSR 354 users
  • Maintenance effort split across organizations

After discussing with the maintainers, I took on the migration. Pull Request #48 moved the battle-tested Zalando module into jackson-datatypes-misc while preserving its functionality and aligning it with FasterXML conventions.

Technical Challenges

The migration wasn't a simple copy-paste. Several architectural decisions emerged during the process.

Module Separation

I refactored the codebase to split Moneta-specific logic into a separate moneta module. The original Zalando repository supported all monetary types in a single module, but splitting it into two focused modules made more sense: users could depend on generic JSR 354 support via javax-money, or use specialized Moneta support (FastMoney, RoundedMoney, etc.) which includes the generic functionality as a transitive dependency.

Package Naming

After review feedback, we changed the module names to JavaxMoneyModule and MonetaMoneyModule instead of keeping the original structure. This made each module's purpose immediately clear and improved discoverability.

Dependencies

Moving from an independent repository to a multi-module project required reviewing and streamlining dependencies. We eliminated unnecessary ones while keeping JSR 354 support robust and feature-complete.

Review Process

The pull request involved 4 reviewers from Zalando and FasterXML. Led by Tatu Saloranta (cowtowncoder), the FasterXML Jackson maintainer, the review covered code quality, licensing, architectural consistency, and alignment with Jackson conventions.

Licensing and Attribution

We ensured proper license compatibility and preserved attribution for all Zalando contributors. The history and acknowledgments for everyone who made the module production-ready remained intact.

Corporate Contributor License Agreement

Obtaining a Corporate Contributor License Agreement (CCLA) from Zalando was necessary for legal clarity. While this added time, it ensured the intellectual property transfer was properly documented.

Code Consistency

The FasterXML maintainers suggested improvements to align with other jackson-datatypes-misc modules. They recommended changing the module name from jackson-datatype-money to jackson-datatype-javax-money to distinguish it from the existing Joda-Money module. These alignment challenges were more complex than expected, but the result feels native to the Jackson ecosystem while preserving Zalando's battle-tested functionality.

What Users Gain

The migration to FasterXML jackson-datatypes-misc brings:

  • Official support: Better long-term maintenance, consistent release cycles, and alignment with core Jackson development
  • Easier discovery: Developers can find JSR 354 support directly in the official Jackson ecosystem
  • Consistency: The module follows FasterXML conventions familiar to Jackson users
  • Timely updates: The JSR 354 module evolves with core Jackson releases
  • Unified community: Bug fixes and features benefit everyone instead of being split across implementations

What I Learned

Clear communication between Zalando, FasterXML maintainers, and community users kept everyone aligned throughout the process. Transparent discussions about goals and trade-offs mattered more than technical decisions.

The formal processes around licensing, code review, and corporate agreements ensured long-term health and legal clarity. While they added time, they were necessary.

I learned that migration isn't about replacing work - it's about preserving it while making it more accessible. The Zalando module represented years of production testing. Adapting it to its new home while honoring that work was the real challenge.

The review process also identified opportunities to improve naming conventions, package structure, and test organization without changing core functionality.

Migration Path

For full steps and edge cases, see the official migration guide.

Generic JSR 354 Support

  • Jackson 2.x: Use com.fasterxml.jackson.datatype:jackson-datatype-javax-money (Maven Central)
  • Jackson 3.x: Use tools.jackson.datatype:jackson-datatype-javax-money (Maven Central)

Moneta-Specific Features

Use jackson-datatype-moneta for specialized support for Moneta types (FastMoney, RoundedMoney, etc.). This automatically includes javax-money as a transitive dependency.

Existing Users of Zalando's jackson-datatype-money

The migration is a drop-in replacement. Switch to jackson-datatype-moneta and update dependency coordinates. No code changes required.

Conclusion

Moving jackson-datatype-money to the official FasterXML repository unified JSR 354 support in the Jackson ecosystem. What started as a simple user request became a collaboration across organizations, involving proper licensing, code reviews, and architectural decisions.

The module is now part of jackson-datatypes-misc, giving developers a clear path for Jackson money handling support.


Thanks to the Zalando team, FasterXML maintainers, and the Jackson community for making this consolidation possible. Special thanks to Tatu Saloranta for his guidance throughout the process.


We're hiring! Do you like working in an ever evolving organization such as Zalando? Consider joining our teams as a Software Engineer!



Related posts