Track expenses, receivables, and balances for the collective
Configure Your WalletManage Permissions (Admin)Castle Settings (Super User Only)
Setup Required: Castle Wallet ID must be configured before the extension can function.
Setup Required: This extension requires configuration by the super user before it can be used.
Wallet Setup Required: You must configure your wallet before using this extension.
Pending Expense Approvals
Pending approval{% raw %}{{ entry.description }}{% endraw %}
{% raw %}{{ formatDate(entry.entry_date) }}{% endraw %}
User: {% raw %}{{ entry.username }}{% endraw %}
Ref: {% raw %}{{ entry.reference }}{% endraw %}
{% raw %}{{ formatSats(getTotalAmount(entry)) }} sats{% endraw %}
{% raw %}{{ getEntryFiatAmount(entry) }}{% endraw %}
Approve
Reject
Quick Actions
Add Expense
Castle wallet must be configured first
You must configure your wallet first
Add Receivable
Castle wallet must be configured first
Record when a user owes the Castle
View Transactions
Outstanding Balances by User
{% raw %}{{ props.row.username }}{% endraw %}
{% raw %}{{ props.row.user_id.substring(0, 16) }}...{% endraw %}
{% raw %}{{ formatSats(Math.abs(props.row.balance)) }} sats{% endraw %}
{% raw %}{{ formatFiat(Math.abs(amount), currency) }}{% endraw %}
Scan the QR code or copy the invoice to pay with your Lightning wallet.
Your balance will update automatically after payment.
Close
Request Manual Payment
Request the Castle to pay you manually (cash, bank transfer, etc.) to settle your balance.
Current balance: {% raw %}{{ formatSats(Math.abs(balance.balance)) }}{% endraw %} sats
{% raw %}{{ formatFiat(Math.abs(amount), currency) }}{% endraw %}
Submit Request
Cancel
Castle Settings
Super User Only: Only the super user can modify these settings.
Select the wallet that will be used for Castle operations and transactions.
Save Settings
{% raw %}{{ isSuperUser ? 'Cancel' : 'Close' }}{% endraw %}
Configure Your Wallet
Select the wallet you'll use for Castle transactions.
Save Wallet
Cancel
Add Receivable
Submit Receivable
Cancel
Create Balance Assertion
Balance assertions are written to your Beancount ledger and validated automatically by Beancount.
This verifies that an account's actual balance matches your expected balance at a specific date.
If the assertion fails, Beancount will alert you to investigate the discrepancy. Castle stores
metadata (tolerance, notes) for your convenience.
{% raw %}{{ scope.opt.name }}{% endraw %}{% raw %}{{ scope.opt.account_type }}{% endraw %}
Optional: Fiat Balance Check
Create & Check
Cancel
Settle Receivable
User
{% raw %}{{ settleReceivableDialog.username }}{% endraw %}
{% raw %}{{ settleReceivableDialog.user_id }}{% endraw %}
Amount Owed
{% raw %}{{ formatSats(settleReceivableDialog.maxAmount) }}{% endraw %} sats
{% raw %}{{ formatFiat(settleReceivableDialog.maxAmountFiat, settleReceivableDialog.fiatCurrency) }}{% endraw %}
Lightning Invoice Generated
Waiting for payment...
Generate Invoice
Settle Receivable
Cancel
Pay User
User
{% raw %}{{ payUserDialog.username }}{% endraw %}
{% raw %}{{ payUserDialog.user_id }}{% endraw %}
Amount Castle Owes
{% raw %}{{ formatSats(payUserDialog.maxAmount) }}{% endraw %} sats
{% raw %}{{ formatFiat(payUserDialog.maxAmountFiat, payUserDialog.fiatCurrency) }}{% endraw %}
Payment sent successfully!
Send Lightning Payment
Record Payment
{% raw %}{{ payUserDialog.paymentSuccess ? 'Close' : 'Cancel' }}{% endraw %}