No description
  • Python 75.3%
  • HTML 13.7%
  • JavaScript 11%
Find a file
Padreug 483e89163e Tag each pending approval row with an INCOME / EXPENSE badge
With both kinds of entry sharing the Pending Approvals list, the row
alone didn't tell the reviewer which direction the accounting goes.
Adds a small green INCOME / red EXPENSE badge as a caption line above
the description (so it doesn't compete with description wrapping),
driven by an isIncomeEntry(entry) helper that reads the Beancount tag
set the API already returns. Also drops the now-redundant orange
pending-icon avatar — the card title already says these are pending,
and the badge does the heavier lifting.
2026-05-17 15:26:34 +02:00
core Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
docs Clean up awkward "the Libra" phrasing left over from rename 2026-05-07 08:37:30 +02:00
helper Clean up awkward "the Libra" phrasing left over from rename 2026-05-07 08:37:30 +02:00
static Tag each pending approval row with an INCOME / EXPENSE badge 2026-05-17 15:26:34 +02:00
templates/libra Tag each pending approval row with an INCOME / EXPENSE badge 2026-05-17 15:26:34 +02:00
.gitignore initial commit 2025-10-22 12:33:45 +02:00
__init__.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
account_sync.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
account_utils.py Clean up awkward "the Libra" phrasing left over from rename 2026-05-07 08:37:30 +02:00
auth.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
beancount_format.py Record income receipts as a user receivable, not an entity asset 2026-05-16 23:40:08 +02:00
CLAUDE.md Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
config.json Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
crud.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
description.md Clean up awkward "the Libra" phrasing left over from rename 2026-05-07 08:37:30 +02:00
fava_client.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
manifest.json Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
MIGRATION_SQUASH_SUMMARY.md Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
migrations.py Expose SUBMIT_INCOME in permission management UI 2026-05-16 19:55:28 +02:00
migrations_old.py.bak Squash 16 migrations into single clean initial migration 2025-11-10 21:51:11 +01:00
models.py Record income receipts as a user receivable, not an entity asset 2026-05-16 23:40:08 +02:00
package.json Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
permission_management.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
README.md Clean up awkward "the Libra" phrasing left over from rename 2026-05-07 08:37:30 +02:00
services.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
tasks.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
views.py Rename Castle Accounting extension to Libra 2026-05-05 10:24:46 +02:00
views_api.py Record income receipts as a user receivable, not an entity asset 2026-05-16 23:40:08 +02:00

Libra Extension for LNbits

A full-featured double-entry accounting system for collective projects, integrated with LNbits Lightning payments.

Overview

Libra enables collectives like co-living spaces, makerspaces, and community projects to:

  • Track expenses and revenue with proper accounting
  • Manage individual member balances
  • Record contributions as equity or reimbursable expenses
  • Track accounts receivable (what members owe)
  • Generate Lightning invoices for settlements

Installation

This extension is designed to be installed in the lnbits/extensions/ directory.

cd lnbits/extensions/
# Copy or clone the libra directory here

Enable the extension through the LNbits admin interface or by adding it to your configuration.

Usage

For Members

  1. Add an Expense: Record money you spent on behalf of the collective

    • Choose "Liability" if you want reimbursement
    • Choose "Equity" if it's a contribution
  2. View Your Balance: See if the collective owes you money or vice versa

  3. Pay Outstanding Balance: Generate a Lightning invoice to settle what you owe

For Admins

  1. Create Accounts Receivable: Record when someone owes the collective money

  2. Record Revenue: Track income received by the collective

  3. View All Transactions: See complete accounting history

  4. Make Payments: Record payments to members

Architecture

Data Models

  • Account: Individual accounts in the chart of accounts
  • JournalEntry: Transaction header with description and date
  • EntryLine: Individual debit/credit lines (always balanced)

Account Types

  • Assets: Things the organization owns (Cash, Bank, Accounts Receivable)
  • Liabilities: What the organization owes (Accounts Payable to members)
  • Equity: Member contributions and retained earnings
  • Revenue: Income streams
  • Expenses: Operating costs

Database Schema

The extension creates three tables:

  • libra.accounts - Chart of accounts
  • libra.journal_entries - Transaction headers
  • libra.entry_lines - Debit/credit lines

API Reference

See description.md for full API documentation.

Development

To modify this extension:

  1. Edit models in models.py
  2. Add database migrations in migrations.py
  3. Implement business logic in crud.py
  4. Create API endpoints in views_api.py
  5. Update UI in templates/libra/index.html

Contributing

Contributions welcome! Please ensure:

  • Journal entries always balance
  • User permissions are properly checked
  • Database transactions are atomic

License

MIT License - feel free to use and modify for your collective!