mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-15 09:14:08 +00:00
04952d91ed6f13df514e4ad7e6bde5a224d6a8b5
Closes the audit gaps from the original font system commit. The bundled NotoSans only covered Latin/Greek/Cyrillic but the descriptions claimed Arabic, Thai and Hindi too — that was false. DejaVu Sans, the prior dompdf default, did cover Hebrew, Arabic, Armenian and Georgian, so swapping it for NotoSans had silently regressed those scripts. The Thai conditional include was also dropped from every PDF template in that commit, leaving th locales rendering boxes despite THSarabunNew still sitting in resources/static/fonts/. Adds four on-demand Font Packages — Noto Sans Hebrew, Noto Naskh Arabic (covering Arabic, Persian, Urdu, Sorani Kurdish), Noto Sans Devanagari (Hindi, Marathi, Sanskrit, Nepali) and Sarabun (Thai) — sourced from openmaptiles/fonts and google/fonts as static TTF. Static is mandatory because dompdf's PHP-Font-Lib does not parse variable fonts. Sarabun replaces THSarabunNew as the Thai face: same designer, OFL-licensed, maintained on a stable upstream URL, and surfaces through the same install flow as every other non-Latin script. The bundled THSarabunNew TTF files and the dead app/pdf/locale/th.blade.php legacy partial are removed as part of the migration. Unifies the bundled Noto Sans into FONT_PACKAGES as a noto-sans entry with bundled => true and files served from resources/static/fonts/ instead of storage/fonts/. FontService::isInstalled, downloadPackage, getInstalledFontFaces and getPackageStatuses honor the flag through a new packageDir() helper. The hardcoded @font-face block in the PDF partial is gone — fonts.blade.php collapses to a single getInstalledFontFaces() call so the package array is the only source of truth for every face, bundled or on-demand. Admin → Font Packages now lists Noto Sans at the top with a primary-colored Bundled pill (new settings.fonts.bundled string) alongside the existing Installed badge / Install button states. Also fixes the misleading settings.fonts.description and settings.fonts.bundled_info copy to actually describe what ships out of the box vs. what's optional, and rebuilds the en locale chunk.
Introduction
InvoiceShelf is an open-source web & mobile app that helps you track expenses, payments & create professional invoices & estimates.
The Web Application is made using Laravel & VueJS while the Mobile Apps are built using React Native.
To get started with InvoiceShelf using Docker Compose, check out the Installation docs.
Table of Contents
Documentation
System Requirements
- Starting from v2.2.0 (Laravel 13 upgrade), InvoiceShelf requires PHP 8.4+.
- Before updating from the app settings, verify your server PHP version and required extensions.
- The in-app updater checks requirements and blocks the update if they are not met.
Download
Mobile Apps
- Andorid - Coming Soon
- IOS - Coming Soon
- Source
Discord
Join the InvoiceShelf discord server to discuss: Invite Link
Roadmap
~~Here's a rough roadmap of things to come (not in any specific order):
- Automatic Update
- Email Configuration
- Installation Wizard
- Address Customisation & Default notes
- Edit Email before Sending Invoice
- Available as a docker image
- Performance Improvements
- Customer View page
- Add and Use Custom Fields on Invoices & Estimates.
- Multiple Companies
- Recurring Invoices
- Customer Portal
- Accept Payments (Stripe Integration)
- Improved template system (invoices and estimate)
- Modules and templates marketplace
Credits
InvoiceShelf is made possible thanks to the contributions and support from many people and projects:
- Crater (project inspiration and code base)
- All contributors who have provided code, translations, reported issues, or supported the project in any way.
Translate
Help us translate on https://crowdin.com/project/invoiceshelf
Star History
License
InvoiceShelf is released under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3. See LICENSE for details.
Languages
PHP
59.9%
Vue
36.1%
Blade
3.2%
Shell
0.6%
Dockerfile
0.1%