Alpine Js

Petit mais puissant

alpine-js
Philippe Escalle CTO

Dans le monde du développement web, on entend souvent parler de React, Vue ou encore Svelte. Pourtant, un outil simple et ultra efficace reste souvent sous-estimé : Alpine.js. C’est devenu mon arme secrète sur de nombreux projets où les délais de déploiement sont ultra courts.

Si je dois résumer AlpineJs je dirais "c'est la puissance du JavaScript sans la complexité"
Alpine.js est un micro-framework JavaScript conçu pour
ajouter facilement de l’interactivité à vos pages HTML. Il s’inspire de Vue.js avec une approche déclarative et réactive, mais sans le coût d’un framework lourd .

Qu'est ce qu'il fait qu'il met KO les plus gros ?
Il est léger et rapide. Avec moins de 10 kB , Alpine est idéal pour ajouter des fonctionnalités dynamiques sans charger une énorme librairie JS. Imbattable ! De plus il s’intègre parfaitement avec Laravel Livewire.
Livewire est une pépite pour le développement full-stack sans écrire une ligne de JavaScript. Mais parfois, on a besoin d’un peu d’interactivité sur le front. C’est là qu’Alpine excelle.
Avec Livewire, plus besoin de Vue ou React :  Livewire gère la logique côté serveur Alpine.js gère l’interactivité côté client. Ensemble, ils offrent une expérience fluide et performante. La console / réseau n'en croit pas ses yeux et vous non plus.

Alpine est parfait pour des composants Blade réutilisables. Je crée facilement des composants Blade autonomes qui peuvent être réutilisés sur plusieurs pages. Quelques exemples concrets :

  •  Tableaux interactifs avec recherche et filtres

  •  Accordéons dynamiques (FAQ, menus déroulants...)

  •  Actions AJAX sans recharger la page

  •  Affichage conditionnel (show/hide, tooltips, modales...)

  •  Animations fluides sans dépendance externe

  •  Remplissage dynamique de listes avec des templates

Pour une équipe junior, la montée en compétence est "insane".
Contrairement à React ou Vue, Alpine ne nécessite aucun build, aucun Webpack, aucun Babel. On l’ajoute simplement avec un <script> et on commence à coder immédiatement car  on garde un contrôle total sur le DOM , contrairement à React qui virtualise tout. Cela évite des bugs d’affichage et facilite la gestion des animations et transitions CSS.

Comparaison d’un toggle show/hide entre Alpine, Vue et React

Avec Alpine.js

<button @click="open = !open">Toggle</button>
<div x-show="open">Coucou !</div>

Avec Vue.js

<template>
  <button @click="open = !open">Toggle</button>
  <div v-if="open">Coucou !</div>
</template>

<script>
export default {
  data() {
    return { open: false };
  }
};
</script>

Avec React

import { useState } from "react";

function Toggle() {
  const [open, setOpen] = useState(false);

  return (
    <>
      <button onClick={() => setOpen(!open)}>Toggle</button>
      {open && <div>Coucou !</div>}
    </>
  );
}

export default Toggle;

On voit clairement que la solution Alpine est plus concise et rapide à implémenter !

Un tableau interactif avec recherche

<input type="text" x-model="search" placeholder="Rechercher...">
<table>
  <tr x-show="row.name.toLowerCase().includes(search.toLowerCase())" x-for="row in rows">
    <td x-text="row.name"></td>
  </tr>
</table>
Avec 3 lignes de code, j’ai un tableau filtrable sans une seule ligne de JavaScript impératif !


Une action AJAX avec fetch

<button @click="fetch('/api/data').then(r => r.json()).then(data => rows = data)">
  Charger les données
</button>

Alpine.js simplifie le travail avec fetch API sans avoir besoin d’un gestionnaire d’état complexe.

Une modal animée

<div x-show="open" x-transition.opacity class="fixed inset-0 bg-black bg-opacity-50"></div>
<div x-show="open" x-transition class="modal">Contenu de la modale</div>

Avec x-transition , on gère les animations fluides sans effort !



L'oeil du CTO

" Si vous cherchez une solution rapide, efficace et légère pour ajouter de l’interactivité à vos projets Laravel sans vous encombrer de React ou Vue, Alpine.js est fait pour vous. Je l’utilise au quotidien sur des projets à délais courts, et il me permet de livrer rapidement sans sacrifier la qualité. "