Gérez et lancez vos projets Laravel locaux sur votre réseau local —
URL d'accès et QR code pour téléphone, tablette et tout appareil du même Wi‑Fi.
- Présentation
- Fonctionnalités
- Stack technique
- Comment ça marche
- Démarrage rapide
- Interface en ligne de commande (CLI)
- Prise en charge Windows
- Structure du projet
- Tests
- Intégration continue & releases
- Périmètre v1
- Licence
Laralink est une application desktop Tauri 2 construite avec Nuxt 4 et Nuxt UI. Elle simplifie le lancement d'un projet Laravel sur une machine hôte (Windows en priorité, Linux supporté) :
- elle vérifie les prérequis techniques (chemin Laravel,
artisan, PHP, base de données, port libre) ; - elle lance
php artisan serveavec un binding réseau adapté ; - elle détecte l'adresse IPv4 locale et affiche une URL + un QR code utilisables sur n'importe quel appareil du même réseau.
Chaque projet garde sa propre configuration (runtime PHP, base de données, port, application de pré-lancement), le tout stocké durablement dans une base SQLite avec migrations versionnées.
| 🗂️ Multi-projets Laravel | Chaque projet a sa propre config : chemin, runtime PHP, base de données, port préféré, pré-lancement. Un seul projet actif à la fois (v1). |
| 🐘 Multi-runtimes PHP | system_php (PATH), custom_php (chemin explicite, validé avant enregistrement) ou phprs_experimental (avertissement : support Laravel « planned »). |
| 🚀 Launcher intégré | Vérification DB → validation PHP → port libre → php artisan serve --host=0.0.0.0 --port={port}, avec logs temps réel. |
| 🌐 Réseau local | Détection IPv4 (filtre Docker/virtual), URL construite automatiquement, QR code scannable, copie en un clic (presse-papiers natif). |
| 🩺 Diagnostics | Chemin Laravel, fichier artisan, PHP, base de données, port, réseau — exécutables à la demande, historisés. |
| 🔒 Réglages protégés | Mot de passe haché Argon2, verrouillage temporaire après 5 échecs. L'accueil reste libre d'accès. |
| 🔔 Notifications natives | Alerte « projet en ligne » au démarrage, notification de mise à jour disponible. |
| 💾 Persistance SQLite | 9 tables, migrations versionnées, historique des sessions de lancement et logs. |
| ⚡ Confiance & confort | Autostart au boot, instance unique (focus + CLI), démarrage auto du projet par défaut, tray icon. |
| ⌨️ CLI | laralink start <slug> / laralink stop <slug> depuis le terminal — même quand l'application tourne déjà. |
| 🔄 Mises à jour | Plugin updater connecté aux releases GitHub (latest.json auto-généré en CI). |
| Couche | Technologie | Version |
|---|---|---|
| Desktop shell | Tauri | 2.11 (Rust) |
| Frontend | Nuxt + Nuxt UI | 4.5 / 4.10 |
| UI | Vue 3 (Composition API, <script setup>) |
3.5 |
| État | Pinia | 4.0 |
| Base de données | SQLite (rusqlite, bundled) | 0.32 |
| Hachage | Argon2 | 0.5 |
| Checks DB | mysql + postgres (clients natifs) | 26 / 0.19 |
| QR code | qrcode (canvas) | 1.5 |
| Validation | zod | 4.3 |
| Plugins Tauri | dialog, clipboard, cli, autostart, log, notification, opener, single-instance, updater | 2.x |
Au lancement d'un projet, Laralink exécute le flux suivant (journalisé étape par étape dans l'UI) :
- Chargement de la configuration du projet
- Vérification du chemin Laravel
- Vérification de la présence du fichier
artisan - Lancement de l'application de pré-lancement si configurée (ex. Laragon, WampServer)
- Attente de la disponibilité de la base de données (MySQL / MariaDB / PostgreSQL / SQLite)
- Validation du runtime PHP choisi
- Choix d'un port libre (préféré → 8000+ → éphémère)
- Lancement de
php artisan serve --host=0.0.0.0 --port={port}(processus capturé, arrêt partaskkill /Tsur Windows) - Détection de l'IPv4 locale et construction de l'URL
http://<ip>:<port> - Affichage de l'URL + génération du QR code
- Bun ≥ 1.3
- Rust ≥ 1.77 + dépendances système Tauri
- PHP dans le PATH (ou runtime personnalisé par projet)
bun install
bun run tauri:devbun run tauri:build
# Linux : AppImage / .deb / .rpm — Windows : NSIS (.exe) + MSILaralink expose une CLI via le plugin Tauri :
laralink start <slug> # démarre le projet (ouvre l'app si nécessaire)
laralink stop <slug> # arrête le projet
laralink --project <slug> # équivalent de startLe slug est généré automatiquement depuis le nom du projet (ex. « Mon Blog » → mon-blog). Si l'application est déjà ouverte, la commande se transmet à l'instance existante (plugin single-instance) et la fenêtre reçoit le focus.
Laralink cible Windows en priorité (ainsi que Linux). Le code Rust est cross-platform :
- arrêt des processus via
taskkill /PID /T /F, détection viatasklist, - fenêtres console masquées (
CREATE_NO_WINDOW) lors du lancement de PHP, - chemins et exécutables gérés avec
std::path::PathBuf.
Le build natif Windows est réalisé par le pipeline GitHub Actions (.github/workflows/release.yml) sur un runner windows-latest — il produit l'installateur Laralink_<version>_x64-setup.exe, le MSI, leurs signatures, et régénère latest.json pour l'updater.
# 1. Taguer une version (ex. v0.1.1) et pousser :
git tag v0.1.1 && git push origin v0.1.1
# 2. Le workflow build les assets Windows + Linux et crée une release brouillon.
# Publiez-la depuis l'onglet Releases quand les checks sont verts.💡 Les secrets GitHub
TAURI_SIGNING_PRIVATE_KEY/TAURI_SIGNING_PRIVATE_KEY_PASSWORDdoivent être configurés pour signer les installateurs (clé générée viabunx tauri signer generate).
bun install
bun run tauri:dev # développement
bun run tauri:build # installateur NSIS/MSIPrérequis Windows : WebView2 (installé par l'installateur), PHP dans le PATH (ou runtime personnalisé), et les outils Visual Studio Build Tools pour Rust.
laralink/
├── app/ # Frontend Nuxt 4 (SPA)
│ ├── pages/
│ │ ├── index.vue # Accueil : statut, URL, QR code, contrôles, logs
│ │ └── settings.vue # Réglages (protégés) : projets, sécurité, diagnostics
│ ├── components/ # 18 composants (forms projet, cartes, gate…)
│ ├── stores/laralink.ts # Store Pinia (projets, statut, logs, réglages)
│ ├── services/commands.ts # Wrapper typed des commandes Tauri
│ ├── composables/ # useClipboard (natif), usePicker (dossier/fichier)
│ └── types/ # Contrat TypeScript ↔ Rust
├── src-tauri/ # Backend Rust
│ ├── migrations/ # SQL versionné (0001_init → 0003_sessions)
│ ├── src/
│ │ ├── lib.rs # Builder Tauri, plugins, CLI, updater, tray
│ │ ├── commands/ # projects, runtime, launcher, network, security, diagnostics
│ │ ├── services/ # laravel_launcher, process_manager, php_runtime,
│ │ │ # db_checker, port_scanner, network_detector, password
│ │ ├── models.rs # Contrat sérialisé des données
│ │ ├── db.rs # Connexion SQLite + migrations
│ │ └── tests.rs # 8 tests unitaires + 1 test e2e (serveur PHP réel)
│ ├── capabilities/main.json # Permissions minimales (principe du moindre privilège)
│ └── tauri.conf.json # Fenêtre, CLI, updater, bundle
├── .github/workflows/
│ ├── ci.yml # Tests Rust + build frontend (push/PR)
│ └── release.yml # Build Windows + Linux + release + latest.json
└── package.json
cd src-tauri && cargo test # 8 tests unitaires (migrations, CRUD, hash, ports…)
cd src-tauri && cargo test -- --ignored # + test e2e : lance un vrai `php artisan serve` (exige PHP)
bun run generate # build frontend de validationLe CI (ci.yml) exécute ces vérifications sur chaque push/PR.
| Workflow | Déclencheur | Actions |
|---|---|---|
ci.yml |
push/PR sur master |
deps Linux, bun run generate, cargo test |
release.yml |
tag v* ou manuel |
build matrix ubuntu-22.04 + windows-latest, signature, release brouillon, latest.json |
Les secrets nécessaires au repo : TAURI_SIGNING_PRIVATE_KEY et TAURI_SIGNING_PRIVATE_KEY_PASSWORD.
Inclus : desktop Tauri (Windows/Linux), multi-projets, multi-runtimes PHP, launcher LAN avec checks, QR code, mot de passe Argon2, SQLite versionné, CLI, notifications, updater, autostart, single-instance, presse-papiers natif.
Hors périmètre v1 : publication Internet publique, HTTPS automatique, exécution simultanée garantie de plusieurs projets, gestion d'équipe, déploiement cloud.
MIT © 2024–2026 STIFLEUR390


