Modérateur
Salut les amis,

Je viens de passer plusieurs soirées (et quelques nuits) à retravailler TemplateEngine, ma petite librairie de templates JavaScript, et je suis trop content de vous présenter le résultat à nouveau !

Pour ceux qui ne connaissent pas : c’est un moteur de templates ultra-léger, avec échappement HTML automatique, cache intelligent, et un système de plugins modulaires. En gros, il fait le café sans prendre de place.

Ce qui a changé :
- Syntaxe épurée et évite les conflits avec d'autres moteurs de template (jinja, twig, etc.)

[[= variable ]], [[ if (cond) { ]], [[> partial ]]

- Plugins optionnels : partiels, helpers, mode strict, i18n, async… vous payez que ce que vous utilisez !
- Performances boostées : cache LRU intégré, compilation unique, rendu en ~0.3ms après la première fois.
- Sécurité renforcée :Mode strict pour attraper les variables undefined (parfait pour les refactorings hasardeux).

Un petit exemple pour la route :

npm i @niuxe/template-engine


import { TemplateEngine } from '@niuxe/template-engine'

const engine = new TemplateEngine()
const html = engine.render(`
  <h1>[[= title ]]</h1>
  [[ if (user.admin) { ]]
    <button>Panier secret de l’admin</button>
  [[ } ]]
`, { title: 'Bonjour le forum !', user: { admin: true } });


Taille comparative (pour les curieux) :
TemplateEngine (core) : 950 bytes
TemplateEngine (full plugins) : ~2150 bytes
Handlebars : 20 KB

Ce moteur de template tient dans un Tweet ou dans un SMS.

Ça vous tente ?
Il est parfait pour les SPAs/PWA, les emails, les petits projets où chaque octet compte. À éviter si vous voulez laisser vos utilisateurs écrire leurs templates. (Sécurité, quand tu nous tiens…)

N’hésitez pas à tester, ouvrir des issues, proposer des plugins, ou simplement rigoler de ma bataille avec npm.

Merci à ceux qui m’ont inspiré : EJS, Underscore, et tous les minimalistes du JavaScript.

Signaler un bug ? ouvrez une issue avec un exemple minimal, je vous offre un gif de chat en retour.

Bon code à tous
Modifié par Niuxe (16 Jan 2026 - 17:27)