https://github.com/andrewmurphy353/curo
Powerful, modern Dart library for precise instalment credit calculations - from simple loans to advanced amortisation schedules.
https://github.com/andrewmurphy353/curo
amortisation apr compound-interest dart finance financial-calculator fintech instalment-credit irr loan-calculator pub-dev xirr
Last synced: about 2 months ago
JSON representation
Powerful, modern Dart library for precise instalment credit calculations - from simple loans to advanced amortisation schedules.
- Host: GitHub
- URL: https://github.com/andrewmurphy353/curo
- Owner: andrewmurphy353
- License: mit
- Created: 2021-12-27T22:31:23.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2026-01-20T21:45:55.000Z (3 months ago)
- Last Synced: 2026-01-21T05:30:45.826Z (3 months ago)
- Topics: amortisation, apr, compound-interest, dart, finance, financial-calculator, fintech, instalment-credit, irr, loan-calculator, pub-dev, xirr
- Language: Dart
- Homepage: http://curocalc.app/curo/
- Size: 1.81 MB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Curo Dart

[](https://codecov.io/gh/andrewmurphy353/curo)
[](https://pub.dev/packages/curo)

**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`](https://github.com/andrewmurphy353/curo_python).
Explore the [API documentation](https://andrewmurphy353.github.io/curo/api), try it live in the [Curo Calculator](https://curocalc.app) app (built with this library), or browse the [examples](https://andrewmurphy353.github.io/curo/examples/overview).
## 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:
```shell
dart pub add curo
# or
flutter pub add curo
```
### Basic Usage
#### **Example: Solving for a monthly instalment**
```dart
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:
```shell
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)**
```dart
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](https://github.com/andrewmurphy353).
Released under the [MIT License](LICENSE).
## Learn More
- **Examples**: Dive into practical use cases in the documentation [examples](https://andrewmurphy353.github.io/curo/examples/overview/).
- **Documentation**: Refer to the code [documentation](https://andrewmurphy353.github.io/curo/api) for detailed class and method descriptions.
- **Issues & Contributions**: Report bugs or contribute on [GitHub](https://github.com/andrewmurphy353/curo/issues).