---
title: Invoice Ninja
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, accounting, invoice, facturation, laravel, php, crm, paiements]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Accounting, https://github.com/invoiceninja/invoiceninja, https://invoiceninja.com/]
---

# Invoice Ninja 🦊

> Plateforme complète de facturation, devis, gestion clients et paiements en ligne — alternative open source à FreshBooks et Harvest, en Laravel.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://invoiceninja.com/ |
| **GitHub** | https://github.com/invoiceninja/invoiceninja |
| **License** | AGPL-3.0 (code) + Elastic License v2 (certaines briques) |
| **Langage principal** | PHP (Laravel) + Vue.js (React Native pour les apps mobiles) |
| **Étoiles GitHub** | ⭐2649 |
| **Dernière MAJ** | 2026-05-28 |
| **Catégorie** | [[cat-accounting]] |

## Description

Invoice Ninja est une **plateforme de facturation et de gestion commerciale** écrite en **Laravel** (PHP 8+) avec un frontend Vue.js. L'outil s'adresse aux **freelances, agences et PME** qui ont besoin d'émettre des factures professionnelles, suivre leurs paiements, gérer leurs clients et accepter des règlements en ligne — le tout depuis une interface web élégante et une API REST documentée.

Les fonctionnalités natives couvrent la **création de factures/devis/avoirs en PDF personnalisable**, la **gestion des clients et contacts**, le **suivi des temps** (timesheet) et la conversion temps → facture, la **gestion des dépenses et notes de frais**, les **rappels automatiques de paiement**, la **facture récurrente/abonnement**, et un **portail client** où le destinataire peut consulter et payer ses factures. Les **passerelles de paiement** (Stripe, PayPal, Mollie, Checkout, Braintree, Square, GoCardless, etc.) sont intégrables via des modules et permettent l'encaissement direct depuis la facture.

Le projet est distribué sous une **double licence** : le code principal est **AGPL-3.0** (donc libre et auto-hébergeable), mais l'éditeur a progressivement basculé certaines briques (notamment le v5 et le SDK mobile) sous **Elastic License v2**, ce qui interdit la revente en SaaS concurrent. Pour un auto-hébergeur, l'usage reste gratuit et conforme à l'esprit open source. La v5 (UI refondue) coexiste avec la v4 (LTS) qui reste très utilisée.

## Installation

### Via Docker (recommandé)

```yaml
# docker-compose.yml
services:
  server:
    image: invoiceninja/invoiceninja:latest
    container_name: invoice-ninja
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      - APP_URL=https://facture.example.com
      - APP_KEY=base64:GénérerAvecArtisanKey:Generate
      - DB_HOST=db
      - DB_DATABASE=ninja
      - DB_USERNAME=ninja
      - DB_PASSWORD=ChangeMoiDbPass
      - MAIL_HOST=smtp.example.com
      - MAIL_PORT=587
      - MAIL_USERNAME=facture@example.com
      - MAIL_PASSWORD=ChangeMoiMailSMTP
      - MAIL_FROM_ADDRESS=facture@example.com
      - MAIL_FROM_NAME="Ma Société"
      - PHANTOMJS_PDF_GENERATOR=false
    volumes:
      - ninja-data:/var/www/html/storage
      - ninja-public:/var/www/html/public
      - ninja-logs:/var/www/html/storage/logs

  db:
    image: mysql:8.0
    container_name: ninja-db
    restart: unless-stopped
    environment:
      - MYSQL_DATABASE=ninja
      - MYSQL_USER=ninja
      - MYSQL_PASSWORD=ChangeMoiDbPass
      - MYSQL_RANDOM_ROOT_PASSWORD=ChangeMoiRootMysql
    volumes:
      - ninja-db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10

  # Cron pour les relances et factures récurrentes
  cron:
    image: invoiceninja/invoiceninja:latest
    container_name: ninja-cron
    restart: unless-stopped
    depends_on:
      - server
    entrypoint: |
      sh -c 'while true; do
        php /var/www/html/artisan schedule:run;
        sleep 60;
      done'

volumes:
  ninja-data:
  ninja-public:
  ninja-logs:
  ninja-db:
```

### Installation manuelle

1. Pré-requis : PHP 8.1+, MySQL 8 ou MariaDB 10.5+, Composer, Node 18+ (build), Nginx, Redis (optionnel mais recommandé pour le cache).
2. `git clone https://github.com/invoiceninja/invoiceninja.git && cd invoiceninja`
3. `composer install --no-dev` puis `php artisan key:generate`
4. Configurer `.env` (DB, APP_URL, MAIL, REDIS).
5. `php artisan migrate --seed` pour initialiser la base.
6. `npm ci && npm run build` pour le frontend.
7. Servir `public/` via Nginx + PHP-FPM, en redirigeant toutes les requêtes vers `index.php`.
8. Configurer un cron : `* * * * * cd /var/www/invoiceninja && php artisan schedule:run >> /dev/null 2>&1`.

## Configuration

- **Premier compte** : créer un super-admin via `php artisan ninja:create-account --email=admin@example.com --password=...`.
- **Personnalisation PDF** : designer les templates (logos, couleurs, mentions légales FR : SIRET, TVA intracommunautaire, numéro RCS).
- **Numérotation** : format configurable par type de document (ex : `F{YYYY}{MM}{SEQ}` pour des factures numérotées par mois).
- **Devises** : multi-devises activable, taux de change stockés par facture (figés à l'émission).
- **Paiements en ligne** : configurer au moins Stripe ou Mollie dans `Settings → Payment Gateways` — la clé API secrète reste côté serveur.
- **Espace client** : activable par client, permet de consulter / payer / refuser une facture sans login tiers.
- **Intégrations** : Zapier, webhooks sortants, API REST v1 (très utilisée par les intégrateurs).

## Alternatives

### Open source
- [[app-akaunting]] — concurrent direct, plus axé comptabilité pure qu'UX facturation.
- [[app-invoiceplane]] — facturation PHP minimaliste, plus léger, sans le volet paiement en ligne aussi riche.
- [[app-odoo]] — ERP complet avec module facturation très puissant, mais lourd.
- **Crater** — facturation open source plus jeune, stack Node.js/React, interface moderne.
- **SolidInvoice** — fork/équivalent PHP pour la facturation simple.

### Propriétaires
- **FreshBooks** — référence pour les freelances, non libre et données hébergées.
- **Harvest + Forecast** — suivi du temps et facturation, lissé sur le cloud.
- **Wave** — gratuit en ligne, modèle freemium publicitaire.
- **Pennylane** — français, plus axé compta + sync bancaire que facturation pure.

## Sécurité

- **HTTPS obligatoire** : les factures portent des informations clients et des liens de paiement — à chiffrer en transit.
- **`APP_KEY`** : clé de chiffrement Laravel pour les sessions/cookies — sauvegarder hors conteneur, sa perte rend les sessions illisibles.
- **Stockage S3** : pour les PDF de factures à fort volume, basculer le disque sur S3 (ou MinIO auto-hébergé) plutôt que le volume local.
- **Sauvegardes** : `mysqldump` quotidien + `tar` de `ninja-data` (logos, PDF générés, documents attachés).
- **Rotation des clés API** : Stripe/Mollie — surveiller l'usage, configurer des alertes.
- **Mises à jour** : suivre la v5 stable ; les montées de version impliquent souvent des migrations DB.

## Ressources
- Site officiel : https://invoiceninja.com/
- Documentation : https://invoiceninja.readthedocs.io/
- Dépôt GitHub : https://github.com/invoiceninja/invoiceninja
- API REST : https://api-docs.invoiceninja.com/
- Forum communautaire : https://forum.invoiceninja.com/
- selfh.st : https://selfh.st/apps/?tag=Accounting

## Pages Liées
- [[cat-accounting]] (catégorie parente)
- [[app-akaunting]] — comptabilité Laravel, plus complète
- [[app-invoiceplane]] — facturation PHP simple
- [[app-crater]] — alternative Node.js moderne
- [[recettes-docker-compose]] — templates de déploiement
- [[securisation-home-lab]] — bonnes pratiques
