Für die Arbeit
Tab
Buchhaltung für Kleinunternehmer (§ 19 UStG).
Tab ist meine eigene Buchhaltung. Als Kleinunternehmer nach § 19 UStG brauchst du keine Buchhaltungs-Suite — du brauchst saubere Belege, richtige Kategorien und am Jahresende die Summen pro Zeile der Anlage EÜR.
Genau das macht Tab. Und bewusst nicht mehr: kein ELSTER-Direktversand, kein Bankabruf, keine Umsatzsteuer-Logik.
Was es kann
- Belege nach Zufluss/Abfluss (§ 11 EStG): Buchungsdatum ist Zahlungsdatum
- Beleg-Eingang: PDF, JPG oder PNG hochladen und später der Buchung zuordnen
- Eine Rechnung, mehrere Positionen — Aufteilung auf verschiedene Kategorien und Beträge
- EÜR-Summenblatt: je befüllte Zeile eine Summe, zum Übertragen ins Steuerprogramm oder ELSTER
- Beleg-Journal als CSV mit allen Einzelbuchungen
- Multi-Gewerbe: eine eigene Anlage EÜR pro Gewerbe, z. B. Makler und App-Geschäft getrennt
- AfA monatsgenau pro rata; Sofortabzug für Hardware und Software im Kaufjahr
- Sonderfälle eingebaut: Bewirtung mit 70 % in Zeile 63, km-Pauschale, GWG-Hinweis, Geschenke-Grenze
- Warnung an der Kleinunternehmer-Grenze (25.000 € / 100.000 €)
Kategorien statt Zeilennummern
Die Zeilennummern der Anlage EÜR verschieben sich von Jahr zu Jahr. Deshalb speichert Tab an der Buchung nie die Zeile, sondern nur die Kategorie — das Mapping Kategorie → Zeile ist jahresversioniert und wird erst beim Export aufgelöst.
Der Jahrgang 2025 ist gegen die ELSTER-Anleitung verifiziert, 2026 vorläufig. Korrekturen am Mapping ändern rückwirkend keine einzige Buchung.
Selbst hosten
Dein Server, deine Daten.
Das brauchst du
- Server mit Docker und Docker Compose, Domain mit A-Record
- Zwei Verzeichnisse als Bind-Mounts für SQLite-Datei und Beleg-Uploads — die gehören in dein Backup
- Ein Reverse-Proxy davor; ein Caddy-Snippet liegt im Repo bei
So läuft es an
- 1
Vorbereiten
mkdir -p /opt/appdata/tab/data /opt/appdata/tab/uploads git clone https://github.com/laarsv/tab.git && cd tab cp .env.example .env
- 2
Zugang erzeugen
Tab ist Single-User: ein bcrypt-Hash und ein JWT-Secret in der .env, kein User-Management.
python3 scripts/hash_password.py # fragt verdeckt, gibt ADMIN_PASSWORD_HASH aus openssl rand -hex 32 # als JWT_SECRET eintragen
- 3
Starten
Das Skript zieht den Code, baut die Container und wartet auf den Health-Check.
./scripts/deploy.sh
- 4
Caddy anbinden
caddy.snippet ans zentrale Caddyfile anhängen und reloaden: /api geht ans Backend, alles andere an die SPA.
Steckbrief
- Stack
- FastAPI · SQLite (eine Datei) · React + Vite
- Auth
- Single-User, bcrypt + JWT
- Lizenz
- AGPL-3.0
Tab ist eine technische Hilfe, keine Steuerberatung. Ob eine Buchung steuerlich richtig eingeordnet ist, entscheidest du — im Zweifel mit deiner Steuerberatung.