NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1137 most downloaded on pub.dev
Money2 is a high-precision library for storing, parsing, formatting, and performing arithmetic on monetary values and currencies. Fixed-decimal math, multi-currency support and conversions, parsing and formatting. (Money.parse('$2010.00') * 10).format('SCC#,##0') -> $US20,100
Last release 8 months ago
27 Jan 2026
Release timing varies
gaps range from 8 days to 4 months
Most releases are documented
notes for 45 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
7 years old
100 releases · first in 2019
Nothing published for this version
BREAKING -the currency json format has three new fields, isIso, isDepreated, replacedBy; The fromJson method will set isIso to true, isDrerecated to f
BREAKING -the currency json format has three new fields, isIso, isDepreated, replacedBy; The fromJson method will set isIso to true, isDrerecated to false and replacedBy to null if they are not present.
FIX the Chilean Peso group and decimal separators where reversed, now corrected.
FIX spelling of the name of some currencies in line with theiso standards. Djibouti Franc -> Djiboutian Franc CFA Franc BEAC -> Central African CFA Franc
FIX some currency use a non-breaking space as per the ISO standard, for the group separator, these have been changed from a normal space for: GNF, XPF
FIX the number of decimal palces for the TWD has changed from 2 to 0.
Change the source of currencies to 'https://www.six-group.com/dam/download/financial-information/data-center/' 'iso-currrency/lists/list-one.xml'; 'https://raw.githubusercontent.com/unicode-org/cldr-json/48.0.0/cldr-json';
add some 30 missing currencies.
added some 12 digital currencies.
FIXED #99.
One column per quarter.
There is a merge (of most) of #97 submitted by @fabiocarneiro - thanks to fabio for his excellent work.
- added onepubl logo.
updated link to common currencies so it works from pub.dev
updated the readme with more detail and improved the pubspec description.
now allows a -ve sign before the currency symbol. Fixed a bug in the pattern which included = rather than -.
reverted to character 1.4.0 to support flutter_test.
removed the dependency on strings package by copying a the two functions we used into money2.
Fixeds #96. Change the generator so if the symbol contains a $ we prefix the string with 'r'.
Nothing published for this version
Fixes issue with trailing Currency isoCodes throwing a range exception as reported in #95.
BREAKING: Fixes #95. This problem was a regression caused as part of the 6.x release. The issue was that group separators after the first (right most)
We also fixed a long standing issue with common currences. All CommonCurrencies has been defined without group separators. This has now been changed so that all common currencies are defined with the appropriate group separators.
This means that the pattern for USD (and most other currencies) changes from S0.00 to S#,##0.00. All common currencies are now defined with group separators as appropriate for that currency.
The implication is that formatting with the old behavour would give $9000 whilst the new behavour would give $9,000. If you want to mimic the old behaviour you can simply set the pattern to the original 'S0.00'.
We have also changed how we are maintaing common currencies. We are are now generating common currencies from a yaml file. To regenerate common currences run: dart tool/generate_common_currencies.dart
Added method isNonZero as a convenience.
Breaking All occurances of the Precentage named arg 'scale' have been changed to decimalDigits.
Breaking: Money operator * now returns the same decimalDigits as the original Money instance. Previously we use the Currencies decimal Digits.
BREAKING: change fromCode and toCode to fromIsoCode and toIsoCode in the ExchangeRate.fromMinorUnits and ExchangeRate.fromNum methods to bring it in l
BREAKING: change fromCode and toCode to fromIsoCode and toIsoCode in the ExchangeRate.fromMinorUnits and ExchangeRate.fromNum methods to bring it in line with other methods. Change how ExchangeRates are stored to json to bring it in line with how we store money as json.
/// old format
Map<String, dynamic> toJson() => {
'integerPart': 0,
'decimalPart': 68
'decimals': 2,
'fromIsoCode': 'AUD'
'toIsoCode': 'USD'
'toDecimalDigits': 3,
};
/// new format
'minorUnits': '75312',
'decimals': 5,
'fromIsoCode': 'AUD',
'toIsoCode': 'USD',
'toDecimals': 3,
Note that 'minorUnits' is a string to avoid overflow issues when javascript parses the json and the integer is larger than a javascript num.
BREAKING: the 'precision' argument to Currencies.copyWith has been renamed from precision to decimalDigits
BREAKING: the 'precision' argument to Currencies.copyWith has been renamed from precision to decimalDigits
…it when it contained a large number. Given the breaking change we also took the opportunity to improve the format. We now have 'minorUnits', 'decimals…
Add: support for large numbers. Thanks to @nesquikm's significant contribution we now support numbers upto 100 digits (in both the integer and decimal components) and the library probably works for larger numbers as well - we use BigInt under the hood which is only limited by memory.
New formatting engine. We have done a complete rewrite of the engine that formats money amounts which has alowed us to fix a number of long time outstanding issue. In particular we now support the india clustering of thousands '##,###.##' and in general the engine should prove to be much more flexible.
Add: we now support the '+' character in a pattern. When present we will either print '+' or '-' based on the sign of the number. This compares with the '-' pattern which will print a '-' (if the amount is -ve) but never a '+' character.
Breaking: a pattern for the integer component like '0#' is now illegal and will throw. If used the '0' character can only come after any '#' character e.g. '#0' is allowed.
Breaking: a pattern for the decimal component like 'xxxx.#0' is now illegal and will throw. If used the '0' character must come before any '#' character e.g. 'xxx.0#' is allowed.
Breaking: change the json format as the current format was likely to break any javascript code that tried to parse it when it contained a large number. Given the breaking change we also took the opportunity to improve the format. We now have 'minorUnits', 'decimals' and 'isoCode' as the three fields.
For example to store the value USD $10.25
The old format contained four fields:
'integerPart': 10
'decimalPart': 25
'decimals': 2
'isoCode': 'USD"
The new format only has 3 fields and the minor units are a string to avoid javascript consumers throwing on big values:
final expectedJson = <String, dynamic>{
'minorUnits': '1025',
'decimals': 2,
'isoCode': 'USD',
};
modified Percentage.tryParse to return null if the amount can't be parsed. Previoulsy we returned zero which isn't in keeping with the expected signat
changed percentage.copyWith so it returns a Percentage not a Fixed.
Fixed a bug in the multipledByPercent, it was failing to divide by 100 after we changed the way percentages are represented.
fixed arg names to divide methods.
added additional tests.
fixed arg names to divide methods.
added methods multipliedByPercentage percentageOf
added helper class Percentage. as a whole number rather than a decimal e.g. 10% is stored as 10 not 0.1
Nothing published for this version
Nothing published for this version
added json serialisation to Money, Currency and ExchangeRate A big thanks to https://github.com/marcelomendoncasoares for this excellent contribution.
Merge pull request #88 from bryanoltman/bo/fix-typo
- added copyWith ctor for money.
added a test to check for inequality when the 'other' type is not a money now that we accept an Object? for other.
Added additional conversion operations. Upgraded to Fixed 5.0.
Nothing published for this version
The driver for this release and the breaking changes comes from: https://github.com/onepub-dev/money.dart/issues/79
The driver for this release and the breaking changes comes from: https://github.com/onepub-dev/money.dart/issues/79
The aim is to allow users to fully customise the group and decimal separators. We have also renamed 'scale' to 'decimalDigits' as this term is likely to be more familiar to users.
groupSeparator: '.',
decimalSeparator: ',',
This means that if you have been using 'invertSeparator: true' then you will need to modifiy any custom patterns from '#.###,##' to '#,###.##'. Note the change in the separators!
For methods that take a 'code' it has been renamed 'isoCode' to make the correct use of the code more apparent.
renamed PatterDecoder.isCode to isIsoCode
renamed CurrencyCode to CurrencyIsoCode
renamed all occurances of 'scale' to 'decimalDigits' as many people are not familiar with the concept of scale.
changed toScale on ExchangeRate members to be 'toDecimalDigits'.
Thanks to the work of fueripe-desu we now have a full set of currency codes and associated formatting built into common-currencies. An heroic piece of work - so much thanks to fueripe-desu from myself and the wider Dart community.
updated the list of supported platforms.
The driver for this release and the breaking changes comes from: https://github.com/onepub-dev/money.dart/issues/79
The driver for this release and the breaking changes comes from: https://github.com/onepub-dev/money.dart/issues/79
The aim is to allow users to fully customise the group and decimal separators. We have also renamed 'scale' to 'decimalDigits' as this term is likely to be more familiar to users.
groupSeparator: '.',
decimalSeparator: ',',
This means that if you have been using 'invertSeparator: true' then you will need to modifiy any custom patterns from '#.###,##' to '#,###.##'. Note the change in the separators!
For methods that take a 'code' it has been renamed 'isoCode' to make the correct use of the code more apparent.
renamed PatterDecoder.isCode to isIsoCode
renamed CurrencyCode to CurrencyIsoCode
renamed all occurances of 'scale' to 'decimalDigits' as many people are not familiar with the concept of scale.
changed toScale on ExchangeRate members to be 'toDecimalDigits'.
- upgraded to intl 0.19
test: add test for trailing symbol pattern
fix(pattern_encoder): handle trailing decimal when pattern has trailing symbol
upgraded to: fixed 2.4.0, intl 0.18, meta 1.9.0
Upgraded to fixed 2.3.0 and Decimal 2.3.0 to fixed a compilation problem caused by a breaking change in decimal. upgraded to lint_hard. Increased the…
updated to the latest version of decimal, fixed and meta.
Fixed: #69 - tryParse throws when Money empty - thanks to LewisHolliday
exported money_data.dart in the barrel file.
Nothing published for this version
Corrected the home page link
Corrected the home page link
Merge pull request #59 from niklasbartsch/Upraded-to-the-latest-version-of-fixed
Nothing published for this version
added notes on v2-v3 conversion.
Added additional tests for INR.
Change the common currency format for the inr currencies as it was inconsistent with all other default formats. This also sides steps bug #50.
Change the common currency format for the inr currencies as it was inconsistent with all other default formats. This also sides steps bug #50.
reverted meta to 1.3 as flutter_test isn't compatible with meta 1.7 Fixes: #47
added [] and []= operators to access Currencies.
Revised the Money constructors to take a currency 'code' rather than a currency.
Revised the Money constructors to take a currency 'code' rather than a currency.
Money.from(100, CommonCurrency.usd);
becomes
Money.from(100, 'USD');
Old methods are still available as:
Money.fromWithCurrency(100, CommonCurrency.usd);
To support this CommonCurrencies are now automatically registered.
re-implemented each of the == operator to use 'covariant' rather than taking a dynamic as this moves the type check to a compile time error rather tha
Breaking changes
Currencies.register() -> Currences().register();
Currencies.registerAll() -> Currences().registerAll();
Currencies.parse() -> Currences().parse();
In response to issue #53 we have modified how excess minorUnits (decimals) are parsed. Even if the parse pattern doesn't contain decimal places we wil
Nothing published for this version
Fix overflow issue when using high precision currencies - thanks to Bob Jackman for the contribution.
Improved documentation around the Currencies class.
Improved documentation around the Currencies class.
Add API to access currently registered currencies `dart Iterator Currencies.getRegistered() `
Iterator<Currency> Currencies.getRegistered()
replaced @deprecated with @Deprecated.
replaced @deprecated with @Deprecated.
Updated links in readme.
Updated links in readme.
Your coding agent can read these notes before it upgrades. Set up the MCP server →