- name
- dinero-best-practices
- description
- Core best practices for the Dinero.js money library. Use when writing, reviewing, or refactoring code that creates Dinero objects, performs arithmetic on monetary values, or handles money in JavaScript/TypeScript. Triggers on imports from 'dinero.js', monetary calculations, or price/cost handling logic.
- license
- MIT
- metadata
- {"author":"dinerojs","version":"1.0.0"}
# Dinero.js Best Practices
Core rules for working with [Dinero.js](https://v2.dinerojs.com), the JavaScript/TypeScript library for creating, calculating, and formatting money safely. Contains rules across 4 categories, prioritized by impact.
## When to Apply
Reference these guidelines when:
- Creating Dinero objects from user input, API responses, or database values
- Performing arithmetic on monetary values (adding, splitting, multiplying)
- Choosing between `number` and `bigint` calculators
- Importing from `dinero.js`, `dinero.js/currencies`, or `dinero.js/bigint`
- Working with prices, costs, taxes, or any financial calculation
## Rule Categories by Priority
| Priority | Category | Impact | Prefix |
| -------- | --------------- | -------- | ------------- |
| 1 | Object Creation | CRITICAL | `creation-` |
| 2 | Arithmetic | CRITICAL | `arithmetic-` |
| 3 | Precision | HIGH | `precision-` |
| 4 | Imports | MEDIUM | `imports-` |
## Quick Reference
### 1. Object Creation (CRITICAL)
- `creation-minor-units` - Always pass amounts as integers in minor currency units
- `creation-from-floats` - Use a helper to convert float inputs to minor units
- `creation-zero-exponent` - Currencies with exponent 0 (e.g., JPY) take major units directly
### 2. Arithmetic (CRITICAL)
- `arithmetic-immutability` - All operations return new objects; capture the return value
- `arithmetic-allocate-not-divide` - Use `allocate` for splitting money, not manual division
- `arithmetic-scaled-amounts` - Never multiply by a raw decimal; use scaled amounts
- `arithmetic-percentages` - Calculate percentages with `allocate` or scaled `multiply`
### 3. Precision (HIGH)
- `precision-bigint` - Use `dinero.js/bigint` for amounts exceeding `Number.MAX_SAFE_INTEGER`
- `precision-crypto` - Cryptocurrencies require bigint due to high exponents
- `precision-trim-scale` - Use `trimScale` to remove trailing zeros after chained operations
### 4. Imports (MEDIUM)
- `imports-tree-shaking` - Import only what you use; standalone functions enable tree-shaking
- `imports-bigint-currencies` - Match calculator type: use `dinero.js/bigint/currencies` with `dinero.js/bigint`
## How to Use
Read individual rule files for detailed explanations and code examples:
```
rules/creation-minor-units.md
rules/arithmetic-allocate-not-divide.md
```
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
View on GitHub