Local-first invoicing desktop app for Lithuanian sole traders and small businesses (Electron, Windows/macOS/Linux)
翻譯準備中
正在載入完整 README。
檢視完整 README ↗SaskaitaGO is a desktop invoicing program for Lithuanian sole traders and small businesses. It runs locally and stores company details, clients, invoices, and settings on the current computer.
Website and downloads: saskaitago.lt. The full source of the app is in this repository.
Invoice templates support 21%, 9%, 5%, and 0% VAT rates. Verify tax treatment and invoice details for your business with an accountant before using issued documents for bookkeeping.
Linux and Windows installers are built locally (Windows inside a Docker image with Wine). Only the macOS disk image needs macOS, so the Desktop builds workflow builds it when started from the Actions tab with Run workflow or when a v* tag is pushed; on every push it only runs the tests.
| Operating system | Installer files |
|---|---|
| Windows | NSIS .exe installer |
| macOS | Universal .dmg for Intel and Apple Silicon |
| Linux | .AppImage and .deb |
Install from the command line (downloads from saskaitago.lt and checks the file against SHA256SUMS):
curl -fsSL https://saskaitago.lt/downloads/install.sh | bash # Linux (AppImage in ~/.local) or macOS
curl -fsSL https://saskaitago.lt/downloads/install.sh | bash -s -- --deb # Debian/Ubuntu .deb via apt
irm https://saskaitago.lt/downloads/install.ps1 | iex # Windows, per-user install
The app checks https://saskaitago.lt/downloads/ 10 seconds after start and every 6 hours. The Windows installer and the AppImage download the update in the background and offer to restart; otherwise it is installed when the app quits. The unsigned macOS app and the .deb cannot replace themselves, so they show a notice with a link to the website. SASKAITAGO_UPDATE_URL points a packaged build at another feed for testing.
The feeds are latest.yml (Windows; its version is also used by the macOS and .deb notice) and latest-linux.yml, which electron-builder writes to dist/ next to the installers. publish:downloads uploads them after the installers, along with the install scripts and SHA256SUMS. A release therefore needs a new version in package.json.
Builds are unsigned. Windows or macOS may show a security prompt when opening them. Signed and notarized distribution requires platform certificates and credentials.
The installers are named SaskaitaGO-Setup.exe, SaskaitaGO.dmg, SaskaitaGO.AppImage, and SaskaitaGO.deb. The product landing page is maintained in a separate repository. Build installers for each operating system using the commands below; macOS must be built on macOS.
Requirements: Node.js 22 or newer and pnpm 11.5.0.
pnpm install
pnpm dev
pnpm start launches the desktop app. pnpm serve starts only the local web server and does not provide desktop features such as choosing a folder for automatic PDF saving. pnpm test runs the server tests.
A release on Linux (Docker is required for the Windows build):
pnpm run dist:local # dist/SaskaitaGO.AppImage, SaskaitaGO.deb, SaskaitaGO-Setup.exe
git tag v0.3.0 && git push origin v0.3.0 # starts the macOS build in CI
pnpm run fetch:mac # dist/SaskaitaGO.dmg from the CI run of the current commit
pnpm run publish:downloads # uploads all four installers to the landing page server and the GitHub release
publish:downloads refuses to upload an incomplete set; ALLOW_PARTIAL=1 overrides that and skips the GitHub release. With the full set it creates the release for the v<version> tag (which must already be pushed), with notes from the commits since the previous tag, or replaces the files of an existing one; SKIP_GITHUB_RELEASE=1 leaves the release out. fetch:mac and publish:downloads use GH_TOKEN or the GitHub credential stored for git. On a Mac, pnpm run dist:mac builds the universal disk image directly, and on Windows pnpm run dist:windows builds the installer without Docker.
The desktop app keeps its data in the operating system's application data folder under the current user profile. Records stay in a local JSON workspace and are not automatically synced to a cloud service. In Program settings, export the workspace as JSON, an Excel-compatible .xls workbook, or a PDF report, then save the file wherever you choose. A JSON export can be restored with Import JSON; the current workspace is copied to workspace.backup-<time>.json in the data folder first.
Issued invoices keep a copy of the seller details at the time of issue, so later settings changes do not alter them. Invoice numbers within a series follow issue dates, and credit notes and applied advances cannot exceed the related invoice.
Only one app instance runs at a time; launching it again focuses the open window. Automatic backups, email delivery, Peppol/UBL, bank and accounting integrations, and editing issued invoices are not implemented.
The app's server listens only on 127.0.0.1 and rejects requests from other hosts and other websites. The only outgoing connection is the update check to https://saskaitago.lt/downloads/ (latest.yml or latest-linux.yml, and the installer when an update is downloaded). Invoices, clients, and settings are never sent anywhere. See server.mjs and electron/updater.mjs.
以上為 README 的開頭部分。其餘內容請閱讀原文。 檢視完整 README ↗