{"full_name":"InvoiceShelf/InvoiceShelf","owner":"InvoiceShelf","name":"InvoiceShelf","url":"https://github.com/InvoiceShelf/InvoiceShelf","description":"Open Source Invoicing Solution for Individuals & Businesses","homepage":"https://invoiceshelf.com","topics":[],"language":"PHP","license":"AGPL-3.0","avatar":"https://avatars.githubusercontent.com/u/157853350?v=4","created_at":"2024-01-26T23:09:28Z","pushed_at":"2026-10-28T04:24:10Z","metrics":{"stars":1895,"forks":403,"watchers":17,"issues":354,"prs":540,"releases":43,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":57},"growth":{"day":{"stars":0,"forks":0,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[1895,1895],"forks":[403,403],"watchers":[17,17],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[],"issues":[{"number":329,"title":"Ability to add pre-tax total column in sales reports","comments":4,"created_at":"2025-03-13T02:52:09Z"},{"number":295,"title":"Add Starting Sequence Number to Invoice Number Format","comments":17,"created_at":"2025-01-29T17:59:02Z"},{"number":191,"title":"Ability to specify offset day for financial year start","comments":12,"created_at":"2024-10-17T15:51:18Z"},{"number":316,"title":"Allow importing a custom certificate for sending mail","comments":9,"created_at":"2025-02-12T11:33:44Z"},{"number":77,"title":"Invoice Numbering: Restart Counter if Invoice Number Includes Year Prefix","comments":9,"created_at":"2024-05-20T14:35:49Z"},{"number":151,"title":"Please add more precise localizations or a region option","comments":6,"created_at":"2024-09-21T02:52:41Z"},{"number":563,"title":"Feature Request - Add ability to export/import estimate & invoice templates in web app","comments":1,"created_at":"2026-02-24T05:21:52Z"},{"number":541,"title":"Extend the health (/up) endpoint with more details (e.g. Database inconsistency, etc)","comments":5,"created_at":"2026-02-06T23:57:20Z"}],"discussions":[{"number":943,"title":"🇪🇺 Compliance: E-Invoicing Regulation","comments":2,"category":"General","created_at":"2026-10-24T12:09:48Z"},{"number":928,"title":"Live demo: demo.invoiceshelf.com","comments":0,"category":"Announcements","created_at":"2026-10-21T22:22:50Z"},{"number":927,"title":"InvoiceShelf 2.4.7: security update, please upgrade","comments":0,"category":"Announcements","created_at":"2026-10-21T21:15:04Z"},{"number":921,"title":"ishelf-ee — a command-line tool for InvoiceShelf (expenses, invoices, payments)","comments":0,"category":"Show and tell","created_at":"2026-10-20T15:26:27Z"},{"number":761,"title":"Custom Templates","comments":1,"category":"Q&A","created_at":"2026-08-25T08:10:33Z"},{"number":756,"title":"Reference API / Sandbox for deferred XRechnung & ZUGFeRD 2.2 exports","comments":1,"category":"Ideas","created_at":"2026-08-16T09:55:40Z"},{"number":734,"title":"migrate from postgres to mysql (mariadb)","comments":2,"category":"Q&A","created_at":"2026-07-30T16:25:34Z"},{"number":686,"title":"Trying to Use Updater to get to 2.4.1 - Only offering 3.0 update","comments":2,"category":"Q&A","created_at":"2026-06-18T22:26:41Z"}],"latest_release":{"name":"2.4.7","tag":"2.4.7","published_at":"2026-10-21T20:58:13Z","body":"Moves the Docker image to PHP 8.4.27, which fixes two critical PHP vulnerabilities, and makes recurring invoices generate however the scheduler is run. **Upgrade every Docker install**, and update PHP on manual installs.\n\n### Security\n\n- The Docker image ran PHP 8.4.25, which is affected by CVE-2026-109618 and CVE-2026-109619: remote code execution without signing in. The image is now built on serversideup/php v5.0.2 with PHP 8.4.27. Manual installs run the server's own PHP, which has to be updated separately (see the upgrade notes). (#922)\n\n### Fixes\n\n- **Recurring invoices were not generated** unless the scheduler happened to run in the exact minute a schedule was due, in the company's time zone. A crontab that ran less often than every minute, ran late, or was down for a while skipped the period, and nothing caught it up. The scheduler now bills every schedule whose next invoice date has passed, whenever it runs. (#924)\n- Saving a recurring invoice counted its next invoice date from the start date, so an edited schedule showed a date in the past. It now counts from today, or from the start date while that is still ahead, in the company's time zone. (#924)\n- When a recurring invoice is sent automatically and the email fails, the invoice is kept as a draft to send by hand. (#924)\n- An image built from the 2.x source since 8 October did not start, because the serversideup base it builds on moved to v5. The image now pins serversideup v5.0.2 and registers its scheduler where v5 expects it. (#922)\n\n### Upgrade notes\n\n- **Docker:** pull the new image and recreate the container, for example `docker compose pull && docker compose up -d`. The image runs the scheduler itself, so no cron is needed. `php -v` in the container reports 8.4.27.\n- **Manual installs:** update PHP to 8.4.27 or later through your operating system or host. The scheduler needs a crontab entry that runs every minute:\n\n  ```\n  * * * * * cd /path/to/invoiceshelf && php artisan schedule:run >> /dev/null 2>&1\n  ```\n\n  A less frequent entry no longer loses invoices; they are created at the first run after they fall due.\n- **Hosts without a crontab** that call `/api/cron` from an external scheduler: set `CRON_JOB_AUTH_TOKEN` in `.env` and send the same value in the `x-authorization-token` header. Since 2.4.3 the endpoint refuses every call without it.\n- **Invoices that were missed:** after upgrading, a recurring invoice whose latest period was never billed gets one invoice for it at the next scheduler run, dated that day. Periods missed before that are not billed retroactively; create those by hand. Afterwards, check that each recurring invoice shows the next invoice date you expect.\n- If you build the image yourself, rebuild it from the 2.4.7 source. Dockerfiles from earlier 2.x releases no longer start on the current serversideup base.\n\nDocker: `invoiceshelf/invoiceshelf:2.4.7` (also `:2.4`, `:2` and `:latest`).\n"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}