AI-powered bookkeeping for freelancers and small businesses.
FiBuKI automates the tedious parts of accounting: importing bank transactions, scanning receipts, matching invoices to payments, and preparing tax reports — so you can focus on your business.
📄 Who FiBuKI is for — the audience, the scope, and what FiBuKI deliberately isn't.
- Bank Transaction Import — CSV upload or direct bank connections via TrueLayer / finAPI / Plaid
- Receipt & Invoice Scanning — AI-powered extraction from PDFs, images, and emails (Gemini via Vertex AI)
- Automatic Matching — Smart scoring engine connects receipts to transactions with confidence scores
- Partner Management — Auto-detects vendors/clients, learns billing patterns, validates VAT IDs via VIES
- Gmail Integration — Scans your inbox for invoices and receipts automatically
- AI Chat Assistant — Ask questions about your finances using Claude with tool access
- Tax Reports — UVA (Austrian VAT return) generation, BMD export, FinanzOnline submission
- Multi-Country Expansion — Community-backed rollout to additional EU countries
- MFA & Passkeys — WebAuthn passkey support alongside TOTP and backup codes
- Browser Extension — Capture receipts from web portals directly into FiBuKI
- MCP Server — Expose your financial data to AI assistants via Model Context Protocol
All data mutations flow through Cloud Functions, ensuring a single source of truth regardless of the caller:
┌─────────────────────────────────────────────────────────────────┐
│ CONSUMERS │
│ React UI │ MCP Server │ LangGraph Agent │ Browser Ext │
└─────────────────────────────────────────────────────────────────┘
│
httpsCallable / HTTP
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ CLOUD FUNCTIONS (europe-west1) │
│ createCallable() wrapper — auth, usage logging, error handling │
│ │
│ transactions/ │ files/ │ partners/ │ matching/ │ billing/ │
└─────────────────────────────────────────────────────────────────┘
│
Admin SDK
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ FIRESTORE │
│ transactions │ files │ partners │ sources │ subscriptions │
└─────────────────────────────────────────────────────────────────┘
Frontend reads use realtime Firestore listeners (onSnapshot) in React hooks. Writes always go through Cloud Functions via callFunction().
- Node.js 22.x (on Node 20, npm silently skips dependencies the server needs)
FiBuKI runs on its self-host stack (Postgres + fibuki-api + fibuki-web), locally
as in production. With no DATABASE_URL the API uses an in-memory database, so a
first run needs no Postgres; set one for data that survives a restart.
git clone <your-fork-url> && cd fibuki
npm ci && (cd functions && npm ci)
# API on :8788 (signs every request in as the dev user)
cd functions
FIBUKI_DEV_UID=dev-user FIBUKI_STORAGE=memory \
FIBUKI_WEB_ORIGIN=http://localhost:3000 npm run selfhost:api
# Web on :3000, in a second terminal
FIBUKI_BACKEND=selfhost NEXT_PUBLIC_FIBUKI_API_URL=http://localhost:8788 \
NEXT_PUBLIC_FIBUKI_DEV_UID=dev-user NEXT_PUBLIC_FIBUKI_DEV_EMAIL=dev@example.com \
npx next dev -p 3000AI features (CSV column matching, extraction, chat) need keys: put
FIBUKI_GEMINI_API_KEY (and optionally ANTHROPIC_API_KEY) plus
GOOGLE_CLOUD_PROJECT in functions/.env.local, which is gitignored. The full
containerised stack (Postgres, SeaweedFS, Caddy) is in
deploy/selfhost/README.md.
Once running, navigate to Sources (/sources) and toggle Enable Test Data to create a test bank account with 100 sample transactions.
app/
├── (auth)/ # Login, registration pages
├── (dashboard)/ # Main app (sources, transactions, files, partners, settings)
├── (marketing)/ # Landing pages
└── api/ # Next.js API routes (banking, Gmail, MCP proxy)
components/ # React components (Radix UI + CVA)
hooks/ # Custom React hooks (realtime listeners, mutations)
lib/ # Utilities, Firebase clients, banking providers
types/ # Shared TypeScript interfaces
functions/
└── src/
├── auth/ # Registration, admin claims, MFA, passkeys
├── billing/ # Stripe integration, quotas, AI budget
├── extraction/ # Document parsing (Gemini, Vision API)
├── files/ # File CRUD, connect/disconnect
├── imports/ # CSV import, column matching
├── matching/ # Score engine, partner detection, learning
├── partners/ # Partner CRUD, VIES lookup
├── transactions/ # Transaction CRUD, bulk operations
└── utils/ # createCallable wrapper, AI usage logger
extensions/
└── taxstudio-browser/ # Chrome extension for receipt capture
Hosted on Firebase App Hosting. Auto-deploys on push to main.
Cloud Functions are not auto-deployed. After changes:
firebase deploy --only functions
# Or deploy specific functions:
firebase deploy --only functions:functionNamefirebase deploy --only firestore:rules
firebase deploy --only firestore:indexesThe Chrome extension lives in extensions/taxstudio-browser/. See extensions/taxstudio-browser/RELEASING.md for release instructions.
Contributions are welcome! See CONTRIBUTING.md for guidelines, architecture overview, and key rules.
GNU Affero General Public License v3.0 (AGPL-3.0-only).
You may run, study, modify and share FiBuKI freely, including commercially. The condition is reciprocity: if you distribute a modified version, or run one as a network service that other people use, those users must be able to obtain your modified source under the same licence. That network clause is the difference between AGPL and GPL, and it is the reason it was chosen here — self-hosting is a first-class way to use this project, and it should not be a way to fork it away from everyone else.
Running an unmodified instance for yourself, your business or your clients carries no obligation to publish anything.
Contributors sign a CLA assigning rights to Infinity Vertigo GmbH (Austrian law, with a
Werknutzungsrecht grant where copyright itself is not assignable), so the project can
be relicensed as a whole if that is ever needed. See docs/licensing/.
