<p align="center">
  <img src="outlay-gtk/data/icons/com.outlay.Outlay-256.png?v=2" alt="Outlay" width="128" height="128">
</p>

<h1 align="center">Outlay</h1>

<p align="center">
  <strong>Personal finance for people, not corporations.</strong><br>
  Track expenses, plan budgets, and take direct control of your money.
</p>

<p align="center">
  <a href="#"><img src="https://img.shields.io/badge/License-CC0_1.0-brightgreen?style=flat-square" alt="License: CC0"></a>
  <a href="#"><img src="https://img.shields.io/badge/Language-Rust-orange?style=flat-square&logo=rust" alt="Rust"></a>
  <a href="#"><img src="https://img.shields.io/badge/Toolkit-GTK4-4a86cf?style=flat-square&logo=gnome" alt="GTK4"></a>
  <a href="#"><img src="https://img.shields.io/badge/UI-libadwaita_1.8-4a86cf?style=flat-square&logo=gnome" alt="libadwaita"></a>
  <a href="#"><img src="https://img.shields.io/badge/Database-SQLite-003B57?style=flat-square&logo=sqlite" alt="SQLite"></a>
  <a href="#"><img src="https://img.shields.io/badge/Platform-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"></a>
  <a href="#"><img src="https://img.shields.io/badge/Display-Wayland-yellow?style=flat-square" alt="Wayland"></a>
  <a href="#"><img src="https://img.shields.io/badge/Packaging-AppImage-blue?style=flat-square" alt="AppImage"></a>
  <a href="#"><img src="https://img.shields.io/badge/Tracking-Zero-success?style=flat-square" alt="No Tracking"></a>
  <a href="#"><img src="https://img.shields.io/badge/Ads-None-success?style=flat-square" alt="No Ads"></a>
</p>

---

Outlay is a desktop finance app built with Rust and GTK4. It runs entirely on your machine, stores everything locally in SQLite, and never phones home. No accounts, no cloud sync, no subscriptions, no data harvesting. Your financial data stays yours - no middlemen, no landlords between you and your own information.

It exists because tracking your spending shouldn't require handing your most intimate data to some company's servers. Every feature is available to everyone equally - no premium tiers, no artificial scarcity, no paywalls.

Released into the public domain under CC0. Take it, use it, change it, share it. It belongs to the commons.

---

## Table of contents

- [Features at a glance](#-features-at-a-glance)
- [Installation](#-installation)
- [Building from source](#%EF%B8%8F-building-from-source)
- [Views and functionality](#-views-and-functionality)
- [Import and export](#-import-and-export)
- [Multi-currency support](#-multi-currency-support)
- [Notifications](#-notifications)
- [System tray](#-system-tray)
- [Keyboard and workflow](#%EF%B8%8F-keyboard-and-workflow)
- [Architecture](#-architecture)
- [Data storage](#-data-storage)
- [Packaging](#-packaging)
- [Contributing](#-contributing)
- [License](#-license)

---

## 🧭 Overview

Outlay is a native Linux application for personal income and expense tracking. It is built from scratch in Rust using GTK4 and libadwaita 1.8 for a modern GNOME-native experience. Everything runs locally - the database is a single SQLite file on your disk, exchange rates are cached after fetching, and there is no telemetry or network activity beyond currency conversion lookups.

The goal is simple: give people a tool that is genuinely useful for managing their own money, without any of the usual strings attached. No venture capital, no growth metrics, no engagement loops. Just a straightforward app that does what it says.

---

## ✨ Features at a glance

| Area | What it does |
|---|---|
| **Transaction logging** | Quick expense/income entry with categories, notes, payees, tags, and inline math |
| **History browsing** | Day-grouped transaction list with search, category filters, batch operations |
| **Charts** | Donut charts, bar charts, and smooth trend lines with monthly navigation |
| **Budgets** | Per-category monthly budgets with progress bars, rollover, pace tracking, sparklines |
| **Recurring** | Automated transaction generation for daily/weekly/biweekly/monthly/yearly patterns |
| **Subscriptions** | Lifecycle tracking with monthly/yearly cost summaries, linked to recurring |
| **Savings goals** | Target amounts with deadlines, progress tracking, color-coded visualization |
| **Credit cards** | Balance and utilization tracking, statement cycle management |
| **Wishlist** | Want-to-buy items with priority, pricing, and purchase status |
| **Forecast** | Cash flow projections based on recurring patterns and historical averages |
| **Insights** | Spending anomaly detection, monthly recaps, year-over-year comparisons |
| **Achievements** | 16+ unlockable badges for financial milestones and healthy habits |
| **Streaks** | No-spend and on-budget streak tracking with personal bests |
| **Calendar** | Spending heatmap with per-day drill-down |
| **Multi-currency** | 40+ currencies with automatic exchange rate fetching and caching |
| **Import/Export** | CSV, JSON, OFX, QIF, PDF - bring your data in, take your data out |
| **Backup** | Full-state `.outlay` archive files for portability and safekeeping |
| **System tray** | Minimize to tray, quick-add popup, persistent background operation |
| **Notifications** | Budget alerts, bill reminders, weekly digests, achievement unlocks |
| **OCR** | Extract amounts from receipt images via Tesseract |
| **NLP** | Natural language parsing for quick transaction entry |

---

## 📦 Installation

### AppImage (recommended)

Download the latest AppImage from the releases page, make it executable, and run:

```bash
chmod +x Outlay-*.AppImage
./Outlay-*.AppImage
```

No installation required. It carries everything it needs. Works on any modern Linux distribution.

### From source

See [Building from source](#-building-from-source) below.

---

## 🛠️ Building from source

### Dependencies

You will need:

- Rust toolchain (stable, 2024 edition)
- GTK4 development libraries (4.10+)
- libadwaita development libraries (1.8+)
- SQLite3 development headers
- pkg-config

On Debian/Ubuntu:

```bash
sudo apt install libgtk-4-dev libadwaita-1-dev libsqlite3-dev pkg-config
```

On Fedora:

```bash
sudo dnf install gtk4-devel libadwaita-devel sqlite-devel pkg-config
```

On Arch:

```bash
sudo pacman -S gtk4 libadwaita sqlite pkg-config
```

### Build and run

```bash
git clone https://git.lashman.live/lashman/outlay.git
cd outlay
cargo build --release
./target/release/outlay-gtk
```

### Demo data

To populate the app with two years of realistic sample data for testing:

```bash
cargo run -p outlay-core --bin seed-demo
```

This wipes the existing database and creates a fresh one filled with transactions, budgets, recurring items, subscriptions, and goals across various categories.

---

## 🖥 Views and functionality

### 📝 Log view

The default view. A quick-entry form for logging transactions.

- Toggle between expense and income modes
- Amount field with auto-focus and inline arithmetic (type `12.50+3` and it evaluates to `15.50`)
- Currency selector with 40+ options
- Category dropdown filtered by transaction type
- Date picker defaulting to today
- Optional note and payee fields
- Toast confirmation on save

The form is designed for speed. Open the app, type a number, pick a category, save. Three seconds and you are done. No friction, no unnecessary steps - because tracking expenses should be easier than not tracking them.

### 📜 History

Browse all your transactions grouped by day.

- Month navigation with previous/next controls
- Full-text search across notes, payees, and categories
- Category filter chips for quick narrowing
- Tag-based filtering
- Day headers with date labels ("Today", "Yesterday", "Feb 27")
- Per-transaction display: category icon, name, amount (color-coded green/red), note
- Daily subtotals showing income, expenses, and net
- Selection mode for batch delete operations
- Inline edit and delete per transaction
- Spending anomaly banners when unusual patterns are detected

Every transaction you have ever logged is here, organized chronologically. Nothing hidden, nothing summarized away. Your complete financial record, accessible and transparent.

### 📊 Charts

Visual breakdowns of where your money goes and comes from.

- **Donut chart**: Category breakdown for the selected month, color-coded, with interactive segments
- **Bar chart**: Side-by-side monthly income vs expense comparison over time
- **Net trend line**: Smooth 12-month running balance curve using monotone Hermite interpolation (no jagged lines, no Bezier overshoot)
- Month and range selector for all chart types
- Theme-aware rendering (adapts to light and dark modes)
- Touch-friendly interactions

The charts use Cairo for rendering directly onto GTK DrawingAreas. The smoothing algorithm is Fritsch-Carlson monotone cubic Hermite interpolation, which guarantees the curve passes through every data point without overshooting between them.

### 💰 Budgets

Set spending limits per category and track progress through the month.

- Per-category budget amounts with visual progress bars
- Color coding: green (on track), yellow (75%+), red (over budget)
- Monthly overview card showing total budgeted vs total spent
- Sparkline mini-charts showing 4-month spending trend per category
- Budget rollover support (carry unused amounts to next month)
- Daily pace indicator: your actual daily spend vs what you can afford per day
- "Safe to spend" calculation
- Copy budgets from previous month for quick setup
- Three budget cycle modes:
  - **Calendar**: Standard month (1st to last day)
  - **Payday**: Custom start date (e.g. the 15th)
  - **Rolling**: 30-day sliding window
- Budget threshold notifications at 75%, 90%, and 100%

Budgets are a tool for self-awareness, not punishment. The pace indicator in particular is useful - it tells you "at your current rate, here is where you will end up" so you can make informed choices about the rest of the month.

### 🔄 Recurring transactions

Automate regular income and expenses.

- Define transactions that repeat: daily, weekly, biweekly, monthly, or yearly
- Set start and optional end dates
- Mark items as bills with configurable reminder days
- Pause and resume with optional resume date
- Active and paused sections displayed separately
- Linked to subscriptions for bidirectional sync (pause one, the other pauses too)
- Auto-generation on app launch catches up on any missed occurrences
- Toast notification: "Added N recurring transaction(s)"

When you open Outlay after being away for a week, it quietly generates all the recurring transactions that would have occurred. No manual intervention needed. The system respects end dates, pause states, and frequency rules.

### 🔔 Subscriptions

Track your subscription services separately from raw recurring transactions.

- Active and paused subscription lists
- Monthly cost summary across all active subscriptions
- Yearly cost projection
- Per-subscription details: name, amount, frequency, currency, next due date
- Add, edit, delete, and pause/resume controls
- Bidirectional link with recurring transactions:
  - Pausing a subscription pauses its linked recurring transaction
  - Deleting either cascades properly (no orphaned records, no constraint errors)
  - Status changes propagate instantly between views

The subscription view gives you a clear answer to "how much am I paying per month for services?" - a number that tends to creep up quietly if nobody is watching.

### 🎯 Savings goals

Set targets and track your progress toward them.

- Create goals with a name, target amount, currency, and optional deadline
- Track current savings against the target with progress bars
- Color and icon customization per goal
- Active and completed goal sections
- Mark goals as complete when reached
- Achievement unlocks tied to goal completion milestones

Goals work as a simple ledger - you set a target, and manually update your saved amount as you make progress. This keeps it flexible enough for any kind of saving, whether it is a vacation fund, an emergency cushion, or pooling resources with others for a shared purpose.

### 💳 Credit cards

Keep tabs on credit card balances and utilization.

- Track multiple cards with individual limits and balances
- Statement close day and payment due day per card
- Utilization percentage calculation and display
- Color-coded card entries
- Active/inactive toggle
- Total balance and total limit summary cards

This is a straightforward tracking tool - enter your balances manually to maintain awareness of where you stand. No bank API integration, no sharing credentials with third parties.

### 🛒 Wishlist

A place for things you want but have not bought yet.

- Item name, estimated cost, optional category and URL
- Priority levels for ordering
- Purchase status toggle
- Total wishlist value calculation

The wishlist is a cooling-off buffer. Writing something down instead of buying it immediately is one of the simplest ways to reduce impulse spending. If you still want it in a week, it will be here waiting. No algorithmic nudges pushing you to buy.

### 🔮 Forecast

Project your future cash flow based on existing patterns.

- Projections based on recurring transaction schedules
- 3-month average spending calculations
- Income projections from recurring income sources
- Estimated balance for upcoming months (3, 6, and 12 month horizons)
- Monthly net forecast: expected income minus expected expenses
- Visual comparison of projected income vs expenses

The forecast makes no assumptions about growth or lifestyle inflation. It simply extends your current patterns forward so you can see where things are heading and adjust if needed.

### 🏆 Insights and achievements

Analytics and light gamification to encourage healthy financial habits.

**Streaks:**
- No-spend streak: consecutive days without logging an expense
- Budget streak: consecutive months finishing under budget
- Current vs personal best tracking

**Achievements (16+ badges):**
- First Transaction
- 7-Day and 30-Day No-Spend streaks
- 1, 3, 6, and 12 Months Under Budget
- First Goal Completed, 5 Goals Completed
- 100, 500, and 1000 Transactions logged
- First Recurring Transaction set up
- Big Saver (50%+ savings rate in a month)
- Category Master (10+ categories used)
- Streak Champion (14+ day no-spend streak)
- Year Under Budget

**Monthly Recap:**
- Category-by-category spending breakdown with percentages
- Total income, expenses, and net for the month
- Transaction count
- Month-over-month and year-over-year change indicators
- Year and month navigation

**Anomaly Detection:**
- Automatic flagging of unusual spending patterns
- Category-specific insights ("You spent 200% of your average in Groceries this month")
- Interactive links to filtered history for investigation

The achievements are meant to be encouraging without being manipulative. There are no daily login rewards, no streaks designed to create anxiety, and no leaderboards. Just quiet recognition when you hit a milestone that matters to you.

### 📅 Calendar heatmap

A visual grid showing daily spending intensity.

- Month calendar layout with day-of-week headers
- Each cell colored by spending amount (darker green = higher spending)
- Click any day to see its transactions
- Daily totals calculated automatically

A quick way to spot patterns - maybe you spend more on weekends, or there is a consistent spike mid-month. The heatmap makes these rhythms visible at a glance.

### ⚙️ Settings

Configure Outlay to work the way you need.

- **Theme**: System, Light, or Dark mode
- **Base currency**: Set your home currency for conversions and reports
- **Categories**: Add, edit, reorder, and manage expense/income categories with icons and colors
- **Notifications**: Toggle recurring transaction alerts, budget warnings, and bill reminders
- **Backup**: Create and restore full-state `.outlay` backup archives
- **Export**: Generate PDF reports, CSV spreadsheets, and JSON data dumps
- **Import**: Bring in data from CSV, JSON, OFX, QIF, and PDF bank statements

---

## 📤 Import and export

Outlay believes your data should flow freely. No lock-in, no proprietary formats, no friction for leaving.

### Export formats

| Format | Description |
|--------|-------------|
| **CSV** | Standard comma-separated values. Opens in any spreadsheet. Date, category, amount, currency, note, type. |
| **JSON** | Complete structured export of the entire database. Includes schema version and all tables. Ideal for programmatic access or full migration. |
| **OFX** | Open Financial Exchange. Bank-compatible format for importing into other financial tools. |
| **QIF** | Quicken Interchange Format. Legacy compatibility with older financial software. |
| **PDF** | Formatted monthly financial report with summary, category breakdown, top expenses, and budget comparison. |

### Import formats

| Format | Description |
|--------|-------------|
| **CSV** | Configurable column mapping. Auto-detects categories by name, creates missing ones as needed. |
| **JSON** | Restore from a previous JSON export. Merge into existing data or replace entirely. Schema validation included. |
| **OFX** | Parse bank statements in OFX format. Multi-currency support. |
| **QIF** | Import from Quicken or other apps that export QIF. |
| **PDF** | Extract transactions from PDF bank statements using text parsing. Multi-page support. |

### Full backup

The `.outlay` backup format is a ZIP archive containing:

- `outlay.db` - Complete SQLite database
- `settings.json` - All application settings
- `meta.json` - App version, export date, schema version

Create a backup, copy it to another machine, restore it, and you have an exact replica of your entire financial history. Your data is portable because it should be - you should never feel trapped by the tools you use.

---

## 🌍 Multi-currency support

Outlay supports 40+ currencies with automatic exchange rate conversion.

<details>
<summary>Supported currencies</summary>

| Code | Currency |
|------|----------|
| USD | US Dollar |
| EUR | Euro |
| GBP | British Pound |
| JPY | Japanese Yen |
| CAD | Canadian Dollar |
| AUD | Australian Dollar |
| CHF | Swiss Franc |
| CNY | Chinese Yuan |
| INR | Indian Rupee |
| BRL | Brazilian Real |
| MXN | Mexican Peso |
| ARS | Argentine Peso |
| CLP | Chilean Peso |
| COP | Colombian Peso |
| PEN | Peruvian Sol |
| UYU | Uruguayan Peso |
| SGD | Singapore Dollar |
| HKD | Hong Kong Dollar |
| KRW | South Korean Won |
| THB | Thai Baht |
| TWD | New Taiwan Dollar |
| PHP | Philippine Peso |
| MYR | Malaysian Ringgit |
| IDR | Indonesian Rupiah |
| VND | Vietnamese Dong |
| PKR | Pakistani Rupee |
| BDT | Bangladeshi Taka |
| SEK | Swedish Krona |
| NOK | Norwegian Krone |
| DKK | Danish Krone |
| PLN | Polish Zloty |
| CZK | Czech Koruna |
| HUF | Hungarian Forint |
| RON | Romanian Leu |
| BGN | Bulgarian Lev |
| HRK | Croatian Kuna |
| RUB | Russian Ruble |
| ZAR | South African Rand |
| EGP | Egyptian Pound |
| NGN | Nigerian Naira |
| KES | Kenyan Shilling |
| TRY | Turkish Lira |
| ILS | Israeli Shekel |
| SAR | Saudi Riyal |
| AED | UAE Dirham |
| QAR | Qatari Riyal |

</details>

**How it works:**

- Set your base currency in Settings
- When logging a transaction in a different currency, the exchange rate is fetched automatically
- Primary rate source: [fawazahmed0/exchange-api](https://github.com/fawazahmed0/exchange-api) (free, open, no API key required, no rate limits)
- Fallback source: [Frankfurter](https://www.frankfurter.app/) (also free and open)
- Rates are cached in the database for 24 hours
- Every transaction stores the exchange rate at the time of entry, preserving historical accuracy
- Reports and charts convert everything to your base currency

The exchange rate sources are free and open services run by volunteers. No corporate API keys, no billing tiers, no rate limiting designed to push you toward a paid plan.

---

## 🔔 Notifications

Outlay uses native GNOME desktop notifications to keep you informed without being intrusive.

- **Budget alerts**: Warnings at 75%, 90%, and 100%+ of your budget threshold per category
- **Bill reminders**: Configurable advance notice (e.g. 3 days before due) for bills marked in recurring transactions
- **Recurring generation**: Confirmation when recurring transactions are auto-generated on launch
- **Weekly digest**: Summary of spending if 7+ days since last digest
- **Backup reminder**: Gentle nudge if 30+ days since last backup and you have 50+ transactions
- **Achievement unlocks**: Toast notification when you earn a new badge
- **Spending anomalies**: Alert on startup if unusual spending patterns are detected

Notifications are de-duplicated (you will not get the same budget warning twice) and can be toggled per type in Settings. They exist to help you stay aware, not to create anxiety or generate "engagement."

---

## 🗔 System tray

Outlay integrates with the freedesktop.org system tray specification via DBus.

- Minimize to tray instead of quitting
- Tray menu options:
  - **Show Outlay** - Restore the main window
  - **Quick Add** - Popup for rapid transaction entry without opening the full app
  - **Log Expense** - Open directly to expense entry
  - **Log Income** - Open directly to income entry
  - **Quit** - Actually close the application

The Quick Add popup is designed for those moments when you just bought something and want to log it in five seconds without switching context.

---

## ⌨️ Keyboard and workflow

The interface follows standard GTK4 and GNOME conventions.

- Amount field auto-focuses on the Log view for immediate typing
- Inline arithmetic in the amount field: type `24.99+tax` or `100/3` and the result is calculated
- Expression evaluator supports `+`, `-`, `*`, `/`, and parentheses
- Standard keyboard navigation throughout (Tab, Enter, Escape)
- Adaptive layout: sidebar collapses to a stack on narrow windows

---

## 🏗 Architecture

Outlay is structured as a Cargo workspace with two crates:

```
outlay/
  outlay-core/          # Library crate - all business logic
    src/
      lib.rs            # Module declarations
      models.rs         # Data structures and enums
      db.rs             # SQLite operations, migrations, queries
      exchange.rs       # Currency conversion service
      recurring.rs      # Recurring transaction generator
      notifications.rs  # Alert and reminder system
      backup.rs         # Full-state backup/restore
      nlp.rs            # Natural language transaction parsing
      ocr.rs            # Receipt image scanning
      expr.rs           # Arithmetic expression evaluator
      sankey.rs         # Sankey diagram layout engine
      seed.rs           # Demo data generator
      export_csv.rs     # CSV export
      export_json.rs    # JSON export
      export_ofx.rs     # OFX export
      export_qif.rs     # QIF export
      export_pdf.rs     # PDF report generation
      import_csv.rs     # CSV import
      import_json.rs    # JSON import
      import_ofx.rs     # OFX import
      import_qif.rs     # QIF import
      import_pdf.rs     # PDF statement import
      bin/
        seed_demo.rs    # Demo data seeder binary
  outlay-gtk/           # Binary crate - GTK4 user interface
    src/
      main.rs           # Application entry, initialization, notifications
      window.rs         # Main window scaffold, navigation, view wiring
      log_view.rs       # Transaction entry form
      history_view.rs   # Transaction browsing and filtering
      charts_view.rs    # Financial charts and visualization
      budgets_view.rs   # Budget management and progress
      recurring_view.rs # Recurring transaction management
      subscriptions_view.rs  # Subscription tracking
      goals_view.rs     # Savings goal management
      credit_cards_view.rs   # Credit card tracking
      wishlist_view.rs  # Wishlist management
      forecast_view.rs  # Cash flow projections
      insights_view.rs  # Analytics, achievements, streaks
      calendar_view.rs  # Spending heatmap
      settings_view.rs  # Configuration interface
      quick_add.rs      # Tray popup for rapid entry
      edit_dialog.rs    # Transaction editing dialog
      date_picker.rs    # Calendar date selector
      category_combo.rs # Filterable category dropdown
      numpad.rs         # On-screen calculator keypad
      month_nav.rs      # Month navigation controls
      sparkline.rs      # Mini trend line widget
      icon_theme.rs     # Tabler icon integration
      tray.rs           # System tray integration
      style.css         # Application stylesheet
    data/
      fonts/            # Bundled typefaces
      icons/            # App icon (all sizes) + action icons
    build.rs            # Build-time resource compilation
  scripts/
    build-appimage.sh   # AppImage packaging script
  docs/
    plans/              # Design documentation
```

### Key technical decisions

- **Raw GTK4 bindings** instead of a framework like Relm4. More verbose, but no hidden abstractions.
- **SQLite with WAL mode** for reliable concurrent reads during UI updates.
- **Foreign keys enforced** at the database level. Cascade deletes are explicit in application code to maintain control over what gets removed.
- **Schema migrations** built into the database module. The app upgrades the database automatically on launch.
- **Exchange rates cached locally** to minimize network requests. Only fetched when needed, only re-fetched after 24 hours.
- **All chart rendering via Cairo** on GTK DrawingAreas. No web views, no JavaScript, no Electron.
- **Monotone Hermite interpolation** for chart curves. Guarantees smooth lines that pass through every data point without overshooting.

### Dependencies

The core dependencies, all freely licensed:

| Crate | Purpose |
|-------|---------|
| `gtk4` | GUI toolkit |
| `libadwaita` | GNOME UI patterns |
| `rusqlite` | SQLite bindings (bundled) |
| `cairo-rs` | 2D rendering for charts |
| `reqwest` | HTTP client for exchange rates |
| `tokio` | Async runtime |
| `serde` / `serde_json` | Serialization |
| `chrono` | Date and time handling |
| `genpdf` | PDF report generation |
| `pdf-extract` | PDF statement parsing |
| `csv` | CSV reading/writing |
| `zip` | Backup archive creation |
| `ksni` | System tray (freedesktop DBus) |
| `rand` | Demo data generation |
| `thiserror` | Error type definitions |

---

## 💾 Data storage

All data lives in a single SQLite file:

```
~/.local/share/outlay/outlay.db
```

The database contains 19 tables covering transactions, categories, budgets, recurring items, subscriptions, goals, credit cards, wishlist items, tags, splits, templates, rules, streaks, achievements, attachments, exchange rates, notifications, and settings.

**There is no cloud component.** Your financial history never leaves your machine unless you explicitly export or back it up. This is by design - financial data is deeply personal, and keeping it local is the most straightforward way to ensure it stays under your control.

Schema migrations happen automatically. When a new version adds tables or columns, the app detects the current schema version and applies the necessary changes on launch.

---

## 📦 Packaging

### AppImage

The recommended distribution format. Built on Ubuntu 22.04 for broad glibc compatibility.

The AppImage bundles:
- GTK4 and libadwaita libraries
- GLib schemas and Adwaita theme
- Bundled fonts (JetBrains Mono for the UI, Liberation Sans for PDF reports)
- All icon assets
- Optional: Tesseract OCR engine and language data

Build it yourself:

```bash
./scripts/build-appimage.sh
```

The resulting AppImage is a single file that runs on any modern Linux distribution without installation. Download it, make it executable, run it. When a new version comes out, replace the file. No package managers, no repositories, no gatekeepers.

### Environment variables

The AppImage sets:
- `GDK_BACKEND=wayland,x11` - Wayland-first with X11 fallback
- Font configuration for bundled typefaces
- GSettings schema paths for desktop integration

---

## 🤝 Contributing

Outlay is public domain software. There are no contributor license agreements, no copyright assignment forms, and no corporate ownership to navigate. If you want to help, help. If you want to fork it and take it in a different direction, do that. The code belongs to everyone equally.

Some ways to contribute:

- **Report bugs**: Open an issue describing what happened and how to reproduce it
- **Suggest features**: Ideas are welcome, especially ones that help people manage money without being patronizing about it
- **Submit patches**: Fork, branch, make your changes, open a pull request
- **Translate**: The UI strings could use localization for non-English speakers
- **Test**: Run it on different distributions, window managers, and screen sizes
- **Share**: Tell someone who might find it useful

There is no formal governance structure. Good ideas get merged. Decisions are made by the people doing the work.

---

## ⚖️ License

<p align="center">
  <a href="https://creativecommons.org/publicdomain/zero/1.0/">
    <img src="https://img.shields.io/badge/License-CC0_1.0_Universal-brightgreen?style=for-the-badge" alt="CC0">
  </a>
</p>

Outlay is released under the **CC0 1.0 Universal** public domain dedication.

To the extent possible under law, the author has waived all copyright and related or neighboring rights to this work. You can copy, modify, distribute, and perform the work, even for commercial purposes, all without asking permission.

This is not "open source with conditions." This is public domain. It belongs to no one and everyone simultaneously. Use it however you see fit.

See [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) for the full legal text.

---

<p align="center">
  <sub>
    Built with care for people who want to understand where their money goes.<br>
    No tracking. No ads. No subscriptions. No data collection. No corporate interests.<br>
    Just software that belongs to the commons.
  </sub>
</p>
