curo 3.0.1
curo: ^3.0.1 copied to clipboard
Powerful, modern Dart library for precise instalment credit calculations - from simple loans to advanced amortisation schedules.
Curo Dart #
Curo is a powerful, modern Dart library for performing instalment credit financial calculations - from simple loans to complex leasing and hire-purchase agreements.
This is a complete ground-up rewrite (version 3.0.0+) of the original curo package, now aligned with the latest Dart conventions and fully compatible in design and accuracy with its sister project, curo-python.
Explore the API documentation, try it live in the Curo Calculator app (built with this library), or browse the examples.
Why Curo? #
Curo goes beyond basic financial functions, offering features typically found only in commercial software:
- Solve for unknown payment/instalment amounts (
solveValue) - Compute implicit effective rates or regulatory APRs (
solveRate) - Support for multiple global day count conventions (US, EU, UK)
- Precise amortisation schedules and APR proof tables
- Weighted unknowns, charges, capitalised interest, and flexible series
Perfect for loan pricing, regulatory compliance (e.g., EU CCD, UK CONC, US Reg Z), leasing, or investment analysis.
Getting Started #
Installation #
Add Curo to your project:
dart pub add curo
# or
flutter pub add curo
Basic Usage #
Example: Solving for a monthly instalment
import 'package:curo/curo.dart';
void main() async {
final calculator = Calculator(precision: 2)
..add(SeriesAdvance(amount: 10000.0, label: 'Loan'))
..add(SeriesPayment(numberOf:6, amount: null, label: 'Instalment'));
final convention = const US30U360();
final value = await calculator.solveValue(
convention: convention,
interestRate: 0.12); // => 1708.4
final rate = await calculator.solveRate(
convention: convention); // => 0.12000094629126792
final schedule = calculator.buildSchedule(convention: convention, interestRate: rate);
schedule.prettyPrint(convention: convention);
}
Output:
post_date label amount capital interest capital_balance
---------------------------------------------------------------------------------------
2026-01-15 Loan -10,000.00 -10,000.00 0.00 -10,000.00
2026-01-15 Instalment 1,708.40 1,708.40 0.00 -8,291.60
2026-02-15 Instalment 1,708.40 1,625.48 -82.92 -6,666.12
2026-03-15 Instalment 1,708.40 1,641.74 -66.66 -5,024.38
2026-04-15 Instalment 1,708.40 1,658.16 -50.24 -3,366.22
2026-05-15 Instalment 1,708.40 1,674.74 -33.66 -1,691.48
2026-06-15 Instalment 1,708.40 1,691.48 -16.92 0.00
Example: Solving for the implicit rate (IRR or APR)
import 'package:curo/curo.dart';
void main() async {
final calculator = Calculator(precision: 2)
..add(SeriesAdvance(amount: 10000.0, label: 'Loan'))
..add(SeriesPayment(numberOf: 6, amount: 1708.40, label: 'Instalment'));
final irr = await calculator.solveRate(convention: const US30U360());
// => 0.1200009462912679 ~ 0.12 or 12.0% (matches the input rate within precision)
final apr = await calculator.solveRate(convention: EU200848EC());
// => 0.1268260858796374 ~ 0.127 or 12.7% (regulatory APR under EU rules)
}
Key Features #
Day Count Conventions #
Day count conventions determine how time intervals between cash flows are measured. Curo supports a wide range of conventions to meet global financial standards:
| Convention | Description |
|---|---|
| Actual ISDA | Uses actual days, accounting for leap and non-leap year portions. |
| Actual/360 | Counts actual days, assuming a 360-day year. |
| Actual/365 | Counts actual days, assuming a 365-day year. |
| EU 30/360 | Assumes 30-day months and a 360-day year, per EU standards. |
| EU 2023/2225 | Compliant with EU Directive 2023/2225 for APR calculations in consumer credit. |
| UK CONC App | Supports UK APRC calculations for consumer credit, secured or unsecured. |
| US 30/360 | Default for many US calculations, using 30-day months and a 360-day year. |
| US 30U/360 | Like US 30/360, but treats February days uniformly as 30 days. |
| US Appendix J | Implements US Regulation Z, Appendix J for APR in closed-end credit. |
Most conventions default to period-by-period timing. For XIRR-style calculations (time from first advance), pass useXirrMethod: true in the constructor. Actual365(useXirrMethod: true) matches Excel’s XIRR() exactly.
Cash Flow Diagrams #
Cash flow diagrams visually represent the timing and direction of financial transactions. For example, a €10,000 loan repaid in 6 monthly instalments would look like this:

- Down arrows: Money received (e.g., loan advance).
- Up arrows: Money paid (e.g., instalments).
- Time line: Represents the contract term, divided into compounding periods.
License #
Copyright © 2026, Andrew Murphy. Released under the MIT License.
Learn More #
- Examples: Dive into practical use cases in the documentation examples.
- Documentation: Refer to the code documentation for detailed class and method descriptions.
- Issues & Contributions: Report bugs or contribute on GitHub.