Crash reports¶
KhataOS has no crash server and uses no third-party crash service. Nothing leaves your device unless you send it yourself.
When the app crashes, it writes a short note about the crash to a file on this device. On the next start it asks:
KhataOS closed unexpectedly last time. Send a report?
Review & report · Not now · Don't ask again
Review & report shows the exact text of the report first. If you go ahead, KhataOS opens a new GitHub issue in your browser with that text filled in. You can edit it there, and nothing is sent until you press Submit on GitHub. Not now asks again next time. Don't ask again turns crash notes off (see Turning it off).
You can also report a problem when nothing has crashed. Report a problem is in the Company menu (Alt+K), the Language menu (Ctrl+K, which works with no company open) and Go To (Alt+G). It opens a blank report with only the version and system details filled in.
The code is in apps/desktop/src-tauri/src/crash.rs (saving, scrubbing, the issue
link) and apps/desktop/src/crash.ts (the page's error handler and the dialogs). The
GitHub form is .github/ISSUE_TEMPLATE/crash_report.yml.
What a report holds¶
| Field | Example | Where it comes from |
|---|---|---|
| App version | 0.1.0 |
The build |
| OS and architecture | macos aarch64 |
The build target |
| Platform | desktop, android or ios |
The build target |
| Country pack | IN |
The open company's country code; empty if none was open |
| Display language | en, ar |
Your language setting |
| The error | called Option::unwrap() on a None value |
A Rust panic message and its file:line:column, or a JavaScript error message and stack |
| Screens visited | StartupScreen > HomeScreen > VoucherScreen |
The class names of the last 12 screens opened |
| Time | 2026-10-21T10:15:00Z |
The clock, in UTC |
The screen list holds class names only, never screen titles (a title can hold a ledger name) and never anything typed into a field.
What a report never holds¶
- Company files, or any data read from them: ledgers, vouchers, parties, items, amounts, balances, reports.
- Company names, company file names or folders.
- Your user name, home folder, email address, phone number, tax IDs or passwords.
- Settings, keys or tokens (relay keys, HMRC, IRP, ZATCA, PAC or Access Point credentials).
- Screenshots or files of any kind.
Error text can still mention a value, for example a ledger name in an error message. So before anything is saved, and again before the issue link is built, KhataOS scrubs the text:
| What | Becomes |
|---|---|
Your home folder (/Users/<you>, /home/<you>, C:\Users\<you>) |
~ |
The open company's path, file name and name, and any *.khata / *.khatapkg path |
<company> |
| Your OS user name and the signed-in company user | <user> |
| Anything that looks like an email address | <email> |
| GSTIN, PAN, and other upper-case tax IDs (TRN, VAT numbers, RFC) | <tax-id> |
| More than six digits in a row, or digit groups that add up to nine or more (phone, account, SSN) | <number> or <id> |
Decimal and grouped amounts (12,500.00, 1,23,456, 99.5) |
<amount> |
Quoted text that reads like a name or value ("Rahul Traders") |
"…" |
Version numbers (2.12.1), source locations (api.rs:812:31) and dates stay. The report
is cut to fit a GitHub link (about 7,000 characters): the stack is shortened first, then
the message.
The scrubber is a safety net, not a guarantee. Read the report before you submit it, both in KhataOS's review dialog and on GitHub, and delete anything you don't want public. GitHub issues are public. Never attach a company file.
Where the files are¶
Crash notes are JSON files in a crashes folder inside the app's data folder. Only your
OS user can read them (folder 0700, files 0600 on macOS, Linux, Android and iOS;
Windows keeps them in your own %APPDATA%). KhataOS keeps the last 20 and deletes older
ones. A crash that repeats while the first is still waiting is saved once, and no more
than five are saved in one run.
| OS | Folder |
|---|---|
| Windows | %APPDATA%\org.khataos.desktop\crashes\ |
| macOS | ~/Library/Application Support/org.khataos.desktop/crashes/ |
| Linux | ~/.local/share/org.khataos.desktop/crashes/ (or $XDG_DATA_HOME/org.khataos.desktop/crashes/) |
| Android | The app's private data folder (org.khataos.mobile), which other apps can't read. Clearing the app's storage removes it. |
| iOS | The app's private container (org.khataos.mobile). Deleting the app removes it. |
On a desktop, the review dialog for a crash has Show crash files, which opens this folder. You can read or delete the files at any time. Deleting them has no other effect.
Turning it off¶
Choose Don't ask again in the start-up prompt. KhataOS then stops asking and stops writing crash notes. Report a problem still works, because it only opens the issue page you review.
The choice is a device setting, not part of any company. It is stored in
crashes/settings.json in the folder above, as {"ask_on_start": false}. To turn crash
notes back on, delete that file or set the value to true.
Builds from a fork¶
The issue link goes to https://github.com/khataos/khataos/issues. A build can send
reports to another tracker by setting KHATA_ISSUES_URL when it is built:
KHATA_ISSUES_URL=https://github.com/<you>/<repo>/issues pnpm tauri build
The tracker needs .github/ISSUE_TEMPLATE/crash_report.yml. The app fills the fields
title, version, os, platform, country, language and details.