https://github.com/aranair/pulse
Vim-like Finance and Portfolio Tracker
https://github.com/aranair/pulse
finance investment portfolio rust tracker vim
Last synced: 2 months ago
JSON representation
Vim-like Finance and Portfolio Tracker
- Host: GitHub
- URL: https://github.com/aranair/pulse
- Owner: aranair
- License: mit
- Created: 2026-03-07T17:27:19.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-07T22:38:01.000Z (4 months ago)
- Last Synced: 2026-03-08T01:23:58.707Z (4 months ago)
- Topics: finance, investment, portfolio, rust, tracker, vim
- Language: Rust
- Homepage:
- Size: 143 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pulse
A local-first, keyboard-driven Rust TUI for portfolio tracking.
`pulse` is an in-progress finance and investment tracker focused on:
- stocks / ETFs
- crypto spot
- cash / FX balances
- custom manual assets
- SQLite-backed local persistence
- ledger-first transaction tracking
- projection-based positions, cash, and P&L
## Current status
This project is under active development. The current build already supports:
- SQLite migrations and local database bootstrap
- entities, accounts, and currency pockets
- manual assets
- deposits, withdrawals, fees, interest, dividends
- buys and sells
- transaction void / soft delete / revisions
- cash transfers between accounts
- FX conversion inside an account
- manual quote entry
- manual FX rate entry
- projection-backed dashboard, positions, cash/FX, transactions, reports, and activity log screens
## Tech stack
- Rust
- ratatui
- crossterm
- rusqlite
- rust_decimal
## Getting started
### 1. Clone and enter the repo
```bash
git clone
cd pulse
```
### 2. Optional: create a local config
You can run without a config file, but the easiest setup is:
```bash
cp pulse.example.toml pulse.toml
mkdir -p data backups
```
The example config stores the SQLite database at:
- `./data/pulse.db`
`pulse` looks for config in this order:
1. `./pulse.toml`
2. your default OS config directory
3. built-in defaults
### 3. Run the app
```bash
cargo run
```
### 4. Run tests
```bash
cargo test
```
Optional:
```bash
cargo check
```
## Basic usage
When the TUI opens:
- `?` toggle help
- `:` enter command mode
- `q` quit
- `r` rebuild projections + reload
Command mode supports both direct commands and bare-command forms:
- type a full command like `:buy 1 AAPL 2 185.50 CAD 0 "starter position"`
- or type a bare command like `:buy`, `:sell`, or `:deposit` to open a modal form
- inside forms, use `Tab` or arrow keys to move, type to edit, `Enter` to submit, and `Esc` to cancel
- use `:help ` or `: help` for command-specific usage
Navigation:
- `gd` dashboard
- `ge` entities
- `ga` accounts
- `gp` positions
- `gt` transactions
- `gx` cash / FX
- `gr` reports
- `gs` settings
- `gl` activity log
## Quick smoke test
Paste these commands one by one in command mode:
```text
:entity new "Personal" person CAD
:account new 1 "Brokerage" Taxable CAD "Manual"
:pocket new 1 CAD "Main CAD" default
:pocket new 1 USD "USD Pocket"
:asset new AAPL USD equity "Apple Inc"
:deposit 1 CAD 1000 "initial funding"
:fx 1 CAD 200 USD 150 2 "convert cash"
:buy 1 AAPL 2 185 CAD 0 "starter position"
:price AAPL USD 210.50 "manual mark"
:fxrate USD CAD 1.35
```
Then inspect:
- `gp` for positions
- `gx` for cash / FX balances
- `gr` for valuation-backed report totals
## Supported commands
You can either enter the full command directly, or type a bare command keyword to open a form for many workflows.
Examples:
- `:buy` opens a buy form
- `:sell` opens a sell form
- `:deposit` opens a deposit form
- `:account` opens an account-creation form
- `:help buy` or `:buy help` shows command-specific help
### Setup
```text
:entity new [person|household|corporation|trust|custom] [reporting_currency]
:account new [AccountType] [reporting_currency] [Institution]
:pocket new [Label] [default]
:asset new [quote_currency] [asset_type] [Name]
```
### Market data
```text
:price [note]
:fxrate
```
### Cash flows
```text
:deposit [note]
:withdraw [note]
:fee [note]
:interest [note]
:dividend [note]
:transfer [note]
:fx [fee] [note]
```
### Trading
```text
:buy [fee] [note]
:sell [fee] [note]
```
### Transaction lifecycle
```text
:void [reason]
:delete [reason]
:revisions
:help
```
## Project principles
- local-first
- ledger-first
- transactions are the source of truth
- projection tables are derived and rebuildable
- weighted average cost basis for v1
- offline-friendly behavior with cached/manual market data
## Roadmap highlights
Planned or incomplete areas include:
- provider-backed quote / FX refresh
- richer revision inspection UI
- benchmark tracking
- broader reporting
- transaction edit flows
- import/export improvements
## Development notes
Project notes and planning artifacts live in:
- `notes/`
Example config:
- `pulse.example.toml`
## License
See `LICENSE`.