Skip to content

Repository files navigation

Paca

Paca

A simple TUI app for task, timer and invoicing for projects.

License npm npm downloads

Track your time and bill for it without leaving the terminal. If Paca saves you a few minutes a week, a ⭐ on GitHub helps other freelancers find it.

Paca in action

Features

  • Project Management - Organize tasks by projects with color coding
  • Task Tracking - Create, edit, and manage tasks with priorities and statuses
  • Time Tracking - Start/stop timers with descriptions and hourly rates
  • Timesheets - View uninvoiced time entries grouped by project
  • Stripe Invoicing - Create draft invoices directly from time entries
  • Invoice Management - View and manage all your Stripe invoices
  • Dashboard - Overview of projects, tasks, and time stats
  • Reports - Weekly/monthly hour & earnings analytics, trends, client and project breakdowns, work patterns
  • Menu Bar - Native macOS menu bar companion for quick timer control
  • Offline-first - All data stored locally in SQLite
  • Vim-style Navigation - Keyboard-driven interface

Installation

Via npm (recommended)

npm install -g pacatui
paca

Via bun

bun install -g pacatui
paca

From source

git clone https://github.com/wes/paca.git
cd paca
bun install
bun run start

Usage

Simply run:

paca

On first run, Paca will automatically create its database at ~/.paca/paca.db.

Keyboard Shortcuts

Global

Key Action
1 Dashboard
2 Tasks
3 Timesheets
4 Invoices
5 Reports
6 Settings
? Help
t Start timer
s Stop timer (when running)
q Quit

Navigation

Key Action
j / Move down
k / Move up
Tab Switch panels
Enter Select/Confirm
Esc Cancel/Go back

Reports

Key Action
/ or h / l Previous/next report
[ / ] Previous/next report
j / k or / Scroll
PgUp / PgDn Page through a report
r Recalculate

Projects & Tasks

Key Action
n Create new
e Edit
d Delete
Space Toggle task status
p Cycle priority
a Archive/Unarchive project
A Toggle show archived
c Link customer to project

Timesheets

Key Action
Space Select entry for invoicing
e Edit time entry
d Delete time entry
i Create invoice from selected

Invoices

Key Action
Enter Open invoice in browser
r Refresh list
] Next page
[ Previous page

Configuration

Settings

Access settings by pressing 6:

  • Business Name - Your business name for invoices
  • Stripe API Key - Enable invoicing features
  • Timezone - Set display timezone (or auto-detect)
  • Menu Bar - Toggle the macOS menu bar companion
  • Export/Import - Backup and restore your data

Data Location

  • Database: ~/.paca/paca.db
  • Backups: ~/.paca/backups/ — exports and daily auto-backups, with the Stripe key removed

Both live in a 0700 directory with 0600 files, readable only by you.

Menu Bar (macOS)

Paca includes a native macOS menu bar companion that shows your running timer and lets you start/stop timers without opening the TUI.

Paca menu bar companion

Enable via Settings

  1. Press 6 to open Settings
  2. Select Menu Bar and press Enter to toggle it on

Enable via CLI

paca menubar enable    # Compile & launch
paca menubar disable   # Stop & remove
paca menubar status    # Show current status

The first time you enable it, Paca compiles a small native Swift helper binary (requires Xcode Command Line Tools). The paca mascot icon appears in your menu bar with live timer status.

Requires: Xcode Command Line Tools (xcode-select --install)

Stripe Integration

To enable invoicing:

  1. Create a restricted key at dashboard.stripe.com/apikeysCreate restricted key. Paca needs exactly two write permissions:

    • Customers — Write
    • Invoices — Write

    Leave everything else set to None. The key starts with rk_.

  2. Press 6 to go to Settings

  3. Add the key under Stripe API Key

  4. Link customers to projects using c in the Projects view

  5. Create invoices from the Timesheets view

Use a restricted (rk_) key, not a standard secret (sk_) key. A secret key can move money, read your full customer list and issue refunds; a restricted key scoped as above can only do what Paca actually does. Paca will warn you if you paste an sk_ key.

Where the key is stored

The key is stored in plain text in the SQLite database at ~/.paca/paca.db, which Paca keeps at 0600 inside a 0700 directory. That protects it from other users on the machine. It does not protect it from anything running as you, so:

  • Do not put ~/.paca in a synced folder (Dropbox, iCloud Drive, a dotfiles repo).
  • Exports and the daily auto-backup in ~/.paca/backups/ have the Stripe key stripped out, so those files are safe to copy elsewhere. After restoring from a backup, re-enter your key in Settings.
  • Rotate the key in the Stripe dashboard if you suspect the file has been copied.

Tech Stack

  • Runtime: Bun
  • TUI Framework: @opentui/react
  • Database: SQLite via libsql
  • ORM: Prisma 7
  • Payments: Stripe API

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

MIT - see LICENSE for details.

Releases

Packages

Contributors

Languages