Home

Awesome

Puffin

Terminal dashboard to manage personal finances. Built with hledger and bubbletea.

<p> <a href="https://github.com/siddhantac/puffin/releases"><img src="https://img.shields.io/github/release/siddhantac/puffin.svg" alt="Latest Release"></a> <a href="https://github.com/siddhantac/puffin/actions/workflows/go.yml"><img src="https://github.com/siddhantac/puffin/actions/workflows/go.yml/badge.svg" alt="Build Status"></a> </p> <a href="./altscreen-toggle/main.go"> <img width="750" src="assets/demo.gif" /> </a>

Table of Contents

💫 Features

All hledger reports are viewable using Puffin. Some of them are natively supported, others are displayed in a simple scrollable view.

📈 View reports

Puffin supports the following reports natively:

The following reports are also easily viewable:

🔎 Filter reports

The data can be filtered by:

🤖 Installation

Download binaries

If you just want to use it, you can download the binary from here.

Install from source

Pre-requisites

Build

Run demo

Run with your own journal file

or

It uses your hledger setup as it is. So there is no need to setup journal files if you are already using hledger.

Configuration

Puffin can use a config file written in json. It is not required though. Without a config file Puffin will use sane defaults.

The default config:

"reports": [
    {
        "name": "register",
        "cmd": "hledger register"
    },
    {
        "name": "expenses",
        "cmd": "hledger balance type:x"
    },
    {
        "name": "assets",
        "cmd": "hledger balance type:a"
    },
    {
        "name": "revenue",
        "cmd": "hledger balance type:r"
    },
    {
        "name": "liabilities",
        "cmd": "hledger balance type:l"
    },
    {
        "name": "income statement",
        "cmd": "hledger incomestatement"
    },
    {
        "name": "balance sheet",
        "cmd": "hledger balancesheet"
    },
    {
        "name": "accounts",
        "cmd": "hledger accounts --tree",
        "locked": true,
    }
]

Note about locked reports A report is considered "locked" if the locked field is set to true. A locked report remains unaffected by the filters. This means that they cannot be filtered by date, period, account name etc.

Locked reports are useful for 2 purposes

  1. Reports where filters don't make sense, such as a list of accounts or commodities
  2. Reports that you want to remain static. Such as a report with more a complex hledger command or other custom modifications.

See config.debug.json for more ideas.

Keys

Show this help with ?

keybindings