An open API service indexing awesome lists of open source software.

https://github.com/galvez/plainbudget

Minimalist Plain Text Budgeting
https://github.com/galvez/plainbudget

nuxt plaintext spreadsheet vue

Last synced: about 2 months ago
JSON representation

Minimalist Plain Text Budgeting

Awesome Lists containing this project

README

        

# PlainBudget

Minimalist plain text budgeting.

[**Read the blog post.**](https://hire.jonasgalvez.com.br/2025/may/8/plainbudget)

[**Get the app.**](https://plainbudget.com/)

```
% npm i pbudget -g
% pbudget -s Budget.txt
% pbudget --stats Budget.txt
% cat Budget.txt | pbudget > Budget.txt
```

## Supported Syntax

- **Groups** start with `=` and are used to group values.

- **Flows** start with `+` and are used to express cash flow.

- **Groups** can be referenced in other groups or flows.

- **Multipliers** can added to any referenced group or value.

- Blocks of text with invalid syntax will be ignored and remain intact in the source.

- Circular dependencies (group references) will cause both groups to be ignored.

- Padding is automatically added to the value column.

**Input**

```
= Main
- 2000 Rent
- 1000 Utilities
- 500 Leisure

= Groceries
- 10 Coffee x 12
- 10 Milk x 12
- 20 Cereal x 6

= Income
- 5000 Salary
- 1000 Side hustle

+ Income
- Main
- Groceries
```

**Output**

```
= 3500 Main
- 2000 Rent
- 1000 Utilities
- 500 Leisure

= 360 Groceries
- 10 Coffee x 12
- 10 Milk x 12
- 20 Cereal x 6

= 6000 Income
- 5000 Salary
- 1000 Side hustle

+ 6000 Income
- 3500 Main
- 360 Groceries
= 2140
```

## Programmatic Usage

```js
import { readFileSync } from 'node:fs'
import { PlainBudget } from 'pbudget'

const budget = readFileSync('Budget.txt', 'utf8')

const pbudget = new PlainBudget(budget)

pbudget.process()

console.log(pbudget.renderWithPadding())

pbudget.computeStats()

console.log(pbudget.stats)
```