morok140719 downloadsFinancial control system directly without internet connection.
Track personal income, expenses, and account balances inside Obsidian. Financial Accounting keeps your records in your vault and works offline, without registration or a connection to your bank.
Requires Obsidian 1.8.0 or later. The plugin supports desktop and mobile layouts. The account section is titled Accounts; some internal names still use Bills.
Download main.js, manifest.json, styles.css, LICENSE-TWEMOJI.txt, and TWEMOJI-NOTICE.md from a release on the releases page.
Create the following folder in your vault:
<vault>/.obsidian/plugins/financial-accounting/
Copy these files into that folder. The Twemoji license and notice accompany the bundled flag graphics.
Restart Obsidian, enable community plugins if needed, and enable Financial Accounting in Settings → Community plugins.
If you use a custom Obsidian configuration folder, replace .obsidian with that folder's name.
Once the plugin is available in the community catalog, open Settings → Community plugins → Browse, search for Financial Accounting, then select Install and Enable. Until then, use manual installation.
Open Settings → Financial Accounting and configure:
| Setting | Purpose | Default |
|---|---|---|
| Initial year of accounting | First year to make available for accounting records | Current year |
| Main currency | Default currency selected when the plugin starts | USD |
On first launch, the plugin saves default settings and creates its database automatically. You do not need to open Settings first. Changing the main currency does not convert existing amounts.
Run Financial Accounting: Open the finance panel from the command palette, or select the dollar-sign ribbon icon, whose tooltip is Add operation. The panel opens in the right sidebar on desktop and in a workspace tab on mobile.
Open Accounts and use the + button, which is also available when the list is empty. Enter a name, emoji, currency, starting balance, and optional note.
Enable Take into account in the general balance for accounts you want to include in your total. Accounts in any currency can use this option; the displayed total includes only the currently selected currency.
Open Categories and use the + button to create income and expense categories, such as Salary and Groceries. Give each category a name and emoji; optionally add a note or parent category.
Create a category for the type of operation you want to record. You can create your first category from the empty Categories section. Transfers do not require categories.
Categories are shared across currencies. Their totals show actual transactions for the selected month and currency; editable budget targets are not supported.
Use the add-operation button. The form has three tabs: Expense, Income, and Transfer. For income or expenses, choose the corresponding tab. Enter the amount, choose an account and category, set the date, and optionally add a note. Select Add to save the operation and update the account balance.
Income and expenses use the currency of the selected account. Switch the currency in the panel header to work with other accounts. Select an entry in History to edit or delete it.
| Section | What you can do |
|---|---|
| Home | Review balance and summary cards, explore the expense chart, and inspect category breakdowns and filtered operations. |
| History | Browse the selected month's operations grouped by day, search them, and open entries for editing. |
| Categories | Review monthly income and expense totals by category, edit category details, and archive or restore categories. |
| Accounts | Review account balances, edit account details, and archive or restore accounts. |
Use the month selector at the top of the panel to open the calendar and choose a period. Use the adjacent flag-and-currency button to change currency without changing the selected month or section. The selection lasts for the current plugin session. Account balances represent current balances, including when you browse an earlier month.
Open the operation form and select Transfer, then choose the source and destination accounts. At least two non-archived accounts are required. This form can access accounts in different currencies regardless of the header filter.
Transfers update account balances directly. They do not create entries in transaction history or count toward income and expense totals.
The plugin does not make network requests, collect analytics, or send financial records to an external service. It has no built-in bank connection or synchronization service. Any backup or synchronization software you configure separately may copy these files according to its own settings.
Financial records are stored here by default:
<vault>/.obsidian/plugins/financial-accounting/db/
├── accounts.json
├── categories.json
└── YYYY.json
| File | Contents |
|---|---|
accounts.json |
Account details, currencies, balances, and archive status |
categories.json |
Income and expense category definitions |
YYYY.json |
Transaction records organized by month for that year |
Plugin settings are saved separately in data.json in the plugin folder. A custom Obsidian configuration folder replaces .obsidian in these paths.
Include the plugin's db folder and data.json in your backups. These are plain JSON files, not encrypted by the plugin or stored as Markdown notes. Back them up before uninstalling the plugin or replacing its folder; copying only your notes will not preserve these records. When updating manually, replace the release files and retain your data files.
Clone the repository and install its dependencies with Node.js and npm:
git clone https://github.com/Morok1407/Financial-Accounting.git
cd Financial-Accounting
npm ci
npm test
npm run build
The build checks TypeScript and writes the plugin files and Twemoji license notices to dist/. Copy the contents of dist/ into the plugin folder of a test vault to try the build. Flags are embedded in main.js; no separate image downloads are needed at runtime.
For development, npm run dev watches the TypeScript source and writes main.js to the repository root. The build copies the existing styles.css; it does not compile styles.scss.
npm test runs isolated tests against an in-memory vault: first launch without settings or database, reopening without data loss, currency filtering, category totals, operation creation/editing/deletion, same- and cross-currency transfers, exact decimal arithmetic, invalid amounts, and transfer write failures. Tests do not touch your financial records.
These tests mock the Obsidian API. Before a release, also check the interface in an actual desktop and mobile vault: create the first account and category, switch currencies and months, use all three operation tabs, and verify the layout in light and dark themes.
Do not include data.json or db/ in a release. Keep the package version, manifest version, and versions.json consistent when publishing a new version.
Report bugs and suggest improvements through GitHub Issues. For bug reports, include your Obsidian version, plugin version, platform, and steps to reproduce the problem. Use sample records instead of sharing private financial data.
Pull requests are welcome. For publishing requirements, see Obsidian's plugin submission guide.
MIT © 2026 Bugayev Daniil.
Flag artwork: Twemoji v17.0.3, © Twitter, Inc. and other contributors, licensed under CC BY 4.0. See graphics license and attribution.