npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

clientlitejsx

v1.0.3

Published

Production JSX framework: client, server, server-side modes + custom syntax blocks

Downloads

3,980

Readme

ClientLiteJSX (CLJ)

One Tool. One Everything.
A production-grade JSX framework with intelligent bundling, worker-thread isolation, state-preserving HMR, and a revolutionary Power Mode with 50 built-in animations and zero npm dependencies.


🚀 What is ClientLiteJSX?

ClientLiteJSX (CLJ) is not just another build tool—it's a complete application runtime that orchestrates the fastest parts of the JavaScript ecosystem while adding revolutionary features not found anywhere else.

Dual-Mode Architecture

CLJ offers two distinct compilation modes:

| Mode | File | Bundle Size | Dependencies | Best For | |------|------|-------------|--------------|----------| | Standard | lib/compiler.js | 2805 KB | React, Three.js, etc. | Full-featured apps with 3D, charts, animations | | Power | lib/power.js | 22.62 KB | Zero | Ultra-lean apps with built-in animations |

The Core Philosophy

Traditional build tools force you to choose:

  • esbuild → Blazing fast, but limited plugin ecosystem
  • Vite → Great DX, but heavy packages block the main thread
  • webpack → Full compatibility, but painfully slow

CLJ gives you all three. It intelligently analyzes your project and routes your build through the optimal pipeline, all while adding worker-thread isolation that keeps your UI buttery smooth even with massive dependencies.


⚡ Key Features

🔨 Intelligent Bundler Orchestration

CLJ doesn't just use one bundler—it orchestrates three:

| Bundler | When It's Used | Why | |---------|---------------|-----| | esbuild | Development & small projects | 0.8s cold builds, 50-150ms HMR | | Vite | Medium projects (2-5MB) | Code splitting + balanced features | | webpack | Large/complex projects (>5MB) | Maximum compatibility |

📊 Project analysis: 0.09 MB, Large packages: Yes
🔨 Intelligent bundler selecting optimal tool...
✅ Bundled: App.jsx → bundle.js (2814 KB)
✨ Compiled successfully! (808ms)
🔒 Worker-Thread Module Isolation
This feature exists nowhere else in the JavaScript ecosystem.

Heavy libraries like Three.js, TensorFlow, and Chart.js are automatically detected and moved to separate Worker threads. Your main thread stays free for UI updates, eliminating jank even with 200,000+ rendered objects.

javascript
// Detected automatically - no configuration needed
📦 Detected 3 large packages, setting up isolation...
🔒 Loading three in worker thread...
✅ three worker ready (47ms)
⚡ CLJ Power Mode - 50 Animations Built-in
Power Mode (lib/power.js) is a revolutionary compilation mode that requires zero npm dependencies—not even React. It includes:

50 production-ready canvas animations: particleNebula, quantumWave, neuralNetwork, starfield, matrixRain, liquidGradient, fireflies, wormhole, pulsarRings, galaxy, fireworks, lightning, geometricMorph, constellation, cosmicDust, plasmaFlow, vortexSwarm, auroraBorealis, gravityWells, crystalMatrix, lightTrails, energyField, nebulaClouds, electricGrid, ripples, snowflakes, bubbles, kaleidoscope, tentacles, fractals, heartbeat, dnaHelix, blackHole, supernova, timeWarp, dimensionalRift, sonicBoom, tectonic, bioluminescence, hyperspace, molecularDance, solarFlare, oceanFloor, thunderstorm, northernLights, lavaFlow, crystalCave, magneticField, pulseWave, phoenixRise

Interactive system: Ripple effects, glow hover, pulse/shake/float animations built-in

Button system: .clj-btn class auto-enables all interactive effects

Card system: .clj-card class with hover lift animations

Device-responsive: Auto-detects mobile (480px), tablet (768px), desktop (1440px), wide (1920px)

22.62 KB bundle (vs 2805 KB with React/Three.js) - 124x smaller

Performance comparison on the official test app:

Metric	Power Mode	Standard Mode
Bundle Size	22.62 KB	2805.61 KB
Main Thread	0.1 ms	712.2 ms
Unattributed	175.2 ms	316.6 ms
Framework	Pure CLJ	React + ReactDOM
Dependencies	Zero	50+ npm packages
🔥 State-Preserving Hot Module Replacement
CLJ includes a completely custom HMR runtime that surgically replaces modules without full page reloads:

javascript
// Change a counter's color
📝 File changed: src/Counter.jsx
🔄 Recompiling...
✅ Recompiled successfully! (262ms)
🔥 HMR: 1 module affected, state preserved
Your 200 counters keep their values. Your Three.js scene doesn't reinitialize. Only what changed updates.

🧩 Built-In Plugin System
CLJ ships with eight production-ready HMR plugins that install automatically:

javascript
// clj.config.js
const { 
  reactHMREPlugin,    // React Fast Refresh
  threeHMRPlugin,     // Three.js with geometry disposal
  vueHMRPlugin,       // Vue 3 SFC support
  cssHMRPlugin,       // CSS/SCSS/Less hot reload
  tsHMRPlugin,        // TypeScript transpilation
  perfHMRPlugin,      // Performance monitoring
  assetHMRPlugin,     // Image/font reloading
  graphQLHMRPlugin    // GraphQL query refetching
} = require('clientlite/hmr-plugins');

module.exports = {
  plugins: [
    reactHMREPlugin(),
    threeHMRPlugin(),
    perfHMRPlugin({ logTimings: true })
  ]
};
📝 CLJ Language Support
CLJ includes a custom .clj file format—a concise syntax that transpiles to JSX:

clj
;; Before: App.clj
(defn App []
  (div {:className "container"}
    (h1 "Hello CLJ")
    (Counter {:initial 0})))

;; After: App.jsx
function App() {
  return (
    <div className="container">
      <h1>Hello CLJ</h1>
      <Counter initial={0} />
    </div>
  );
}
🎯 Matrix Error Overlay
When things break, you get a beautiful, actionable error display:

text
╔══════════════════════════════════════════════════════════════╗
║                    🌟 CLIENTLITE ERROR 🌟                    ║
║                      MATRIX DEBUG MODE                       ║
╚══════════════════════════════════════════════════════════════╝

📁 FILE: App.jsx
📍 PATH: /src/App.jsx

❌ ERROR: 'Counter' is not defined

📝 CODE CONTEXT (Line 15, Column 8):
   12 |   return (
   13 |     <div>
   14 |       <h1>My App</h1>
➡️   15 |       <Counter />
   16 |     </div>
   17 |   );
          ^── ERROR HERE

💡 SUGGESTED FIXES:
   → Import the missing component
   → Check component name spelling
📦 Installation
bash
npm install clientlitejsx
That's it. The postinstall script automatically sets up the plugin system.

🏗️ Project Structure
text
my-app/
├── src/
│   ├── App.clj          # CLJ syntax (optional)
│   ├── App.jsx          # or standard JSX
│   └── index.html       # Entry HTML
├── clj.config.js        # Optional configuration
├── package.json
└── node_modules/
    ├── clientlitejsx/   # Core framework
    └── clientlite/      # Auto-generated plugins
⚙️ Configuration
Create clj.config.js in your project root:

javascript
// clj.config.js
const { reactHMREPlugin, threeHMRPlugin } = require('clientlite/hmr-plugins');

module.exports = {
  // Plugin system
  plugins: [
    reactHMREPlugin(),
    threeHMRPlugin()
  ],
  
  // Worker-thread isolation
  isolation: {
    enabled: true,
    autoDetect: true,
    packages: ['three', 'chart.js']  // Manual override
  },
  
  // Build options
  build: {
    sourcemap: true,
    minify: process.env.NODE_ENV === 'production'
  },
  
  // Dev server
  server: {
    port: 3000,
    hmr: true
  }
};
🎮 CLI Commands
bash
# Standard development with hot reload
clj run client --hot

# ⚡ POWER MODE - No React required, 50 animations built-in
clj power client --hot

# Production build
clj build client

# Clone compiler for customization
clj clone

# Update compiler
clj update-compiler

# View compiler information
clj compiler-info

# Server-side rendering mode
clj run server

# Full-stack mode
clj run server-side

# Watch mode (no dev server)
clj watch

# Create new project
clj new my-app

# Generate language block
clj gen New L myLanguage

# Generate API endpoint
clj gen New API users

# Package management
clj package init my-package
clj package build
clj package publish --global
clj package install my-package --global
clj package list

# Backend server
clj server start --host=0.0.0.0 --port=80
clj server register my-server http://192.168.1.100:6002
📊 Official Power Mode Test App
The official Power Mode test app demonstrates every feature:

jsx
// CLJ Power App - No React Required
// @clj-animate particleNebula

function App() {
  const [count, setCount] = __CLJ_useState(0);
  const [theme, setTheme] = __CLJ_useState('dark');
  const [todos, setTodos] = __CLJ_useState([]);
  const [newTodo, setNewTodo] = __CLJ_useState('');
  const [userId, setUserId] = __CLJ_useState(1);
  const [user, setUser] = __CLJ_useState(null);
  const [loading, setLoading] = __CLJ_useState(false);
  const [activeTab, setActiveTab] = __CLJ_useState('counters');
  const [showVideo, setShowVideo] = __CLJ_useState(false);
  const [animIntensity, setAnimIntensity] = __CLJ_useState(1);
  const [rippleColor, setRippleColor] = __CLJ_useState('rgba(0,170,255,.4)');
  const [cardHoverEnabled, setCardHoverEnabled] = __CLJ_useState(true);
  const containerRef = __CLJ_useRef(null);

  const counterStates = Array(20).fill().map(() => {
    const [c, setC] = __CLJ_useState(0);
    return { count: c, inc: () => setC(c + 1), dec: () => setC(Math.max(0, c - 1)) };
  });

  __CLJ_useEffect(() => {
    console.log('⚡ CLJ Power App Mounted with 50 Animation Engine');
    setTimeout(() => setShowVideo(true), 1000);
    
    if (typeof __CLJ_interact !== 'undefined') {
      document.querySelectorAll('.tab-btn').forEach(btn => {
        __CLJ_interact.glowOnHover(btn, 'rgba(0,170,255,.4)', 25);
      });
      document.querySelectorAll('.action-btn').forEach(btn => {
        __CLJ_interact.glowOnHover(btn, 'rgba(40,167,69,.4)', 20);
      });
      document.querySelectorAll('.danger-btn').forEach(btn => {
        __CLJ_interact.glowOnHover(btn, 'rgba(220,53,69,.4)', 20);
      });
    }
  }, []);

  const addTodo = () => {
    if (newTodo.trim()) {
      setTodos([...todos, { id: Date.now(), text: newTodo, done: false }]);
      setNewTodo('');
    }
  };

  const toggleTodo = (id) => {
    setTodos(todos.map(t => t.id === id ? { ...t, done: !t.done } : t));
  };

  const deleteTodo = (id) => {
    setTodos(todos.filter(t => t.id !== id));
  };

  const fetchUser = async (id) => {
    setLoading(true);
    try {
      const res = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
      const u = await res.json();
      setUser(u);
    } catch(e) {}
    setLoading(false);
  };

  __CLJ_useEffect(() => { fetchUser(userId); }, [userId]);

  const handleRipple = (e, color) => {
    if (typeof __CLJ_interact !== 'undefined') {
      __CLJ_interact.rippleEffect(e, color || rippleColor);
    }
  };

  const Counter = ({ count, inc, dec, label, color }) => (
    <div className="clj-card" style={{ 
      background: `linear-gradient(135deg, ${color || 'rgba(255,255,255,0.1)'}, rgba(255,255,255,0.05))`,
      backdropFilter: 'blur(10px)',
      borderRadius: '15px',
      padding: '20px',
      margin: '10px',
      border: '1px solid rgba(255,255,255,0.2)',
      textAlign: 'center',
      transition: 'transform 0.3s ease'
    }}>
      <h2 style={{ fontSize: '24px', margin: '0 0 10px' }}>{label}: {count}</h2>
      <div style={{ display: 'flex', gap: '10px', justifyContent: 'center' }}>
        <button 
          className="clj-btn danger-btn"
          onclick={(e) => { handleRipple(e, 'rgba(220,53,69,.3)'); dec(); }}
          style={{
            padding: '12px 24px', borderRadius: '8px', border: 'none',
            background: 'linear-gradient(135deg, #dc3545, #a71d2a)',
            color: 'white', cursor: 'pointer', fontWeight: 'bold', fontSize: '18px'
          }}
        >-</button>
        <button 
          className="clj-btn action-btn"
          onclick={(e) => { handleRipple(e, 'rgba(40,167,69,.3)'); inc(); }}
          style={{
            padding: '12px 24px', borderRadius: '8px', border: 'none',
            background: 'linear-gradient(135deg, #28a745, #1e7e34)',
            color: 'white', cursor: 'pointer', fontWeight: 'bold', fontSize: '18px'
          }}
        >+</button>
      </div>
    </div>
  );

  return (
    <div style={{ minHeight: '100vh', background: 'linear-gradient(180deg, #020210 0%, #0a0a2a 50%, #020210 100%)', color: '#fff' }}>
      <header style={{ padding: '20px 40px', background: 'rgba(10,10,30,0.9)', backdropFilter: 'blur(20px)', display: 'flex', justifyContent: 'space-between', alignItems: 'center', borderBottom: '1px solid rgba(255,255,255,0.1)', position: 'sticky', top: 0, zIndex: 100 }}>
        <div>
          <h1 style={{ fontSize: '32px', background: 'linear-gradient(135deg, #00aaff, #aa44ff)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', margin: 0 }}>⚡ CLJ Power Engine</h1>
          <p style={{ margin: '5px 0 0', opacity: 0.7, fontSize: '14px' }}>No React Required • 50 Animations Built-in • Pure CLJ Runtime</p>
        </div>
        <div style={{ display: 'flex', gap: '10px', flexWrap: 'wrap' }}>
          <button className="clj-btn tab-btn" onclick={(e) => { handleRipple(e); setActiveTab('counters'); }} style={{ padding: '10px 20px', borderRadius: '8px', border: 'none', background: activeTab === 'counters' ? 'linear-gradient(135deg, #007bff, #0056b3)' : 'rgba(255,255,255,0.1)', color: 'white', cursor: 'pointer' }}>🎮 Counters</button>
          <button className="clj-btn tab-btn" onclick={(e) => { handleRipple(e); setActiveTab('todos'); }} style={{ padding: '10px 20px', borderRadius: '8px', border: 'none', background: activeTab === 'todos' ? 'linear-gradient(135deg, #007bff, #0056b3)' : 'rgba(255,255,255,0.1)', color: 'white', cursor: 'pointer' }}>📝 Todos</button>
          <button className="clj-btn tab-btn" onclick={(e) => { handleRipple(e); setActiveTab('users'); }} style={{ padding: '10px 20px', borderRadius: '8px', border: 'none', background: activeTab === 'users' ? 'linear-gradient(135deg, #007bff, #0056b3)' : 'rgba(255,255,255,0.1)', color: 'white', cursor: 'pointer' }}>👤 Users</button>
        </div>
      </header>
      {/* Counters, Todos, Users tabs */}
      <footer style={{ textAlign: 'center', padding: '30px', background: 'rgba(10,10,30,0.8)', borderTop: '1px solid rgba(255,255,255,0.1)', marginTop: '40px' }}>
        <p style={{ margin: 0, opacity: 0.7 }}>⚡ CLJ Power Engine • 50 Animations Built-in • No React • No Dependencies</p>
        <p style={{ margin: '5px 0 0', opacity: 0.5, fontSize: '14px' }}>Device: {window.__CLJ_device?.isMobile ? '📱 Mobile' : window.__CLJ_device?.isTablet ? '📋 Tablet' : '🖥️ Desktop'} • {window.__CLJ_device?.width}x{window.__CLJ_device?.height} • Animation: particleNebula</p>
      </footer>
    </div>
  );
}

__CLJ_mount(App, 'root');
Features demonstrated:

50 animation backgrounds (particleNebula shown)

20 interactive counters with ripple click effects

Todo list with add/delete/toggle

User explorer with JSONPlaceholder API

Tab navigation with glow hover

Responsive device detection

Sticky header with backdrop blur

Card hover lift animations

Loading spinner

Custom CLJ runtime (useState, useEffect, useRef, useCallback, useMemo)

📊 Performance Benchmarks
Tested on a stress-test application with 100,000 Three.js stars, 100,000 particle nebula, 5,000 rotating crystals, 2,000 orbiting orbs, 200 React counters, 50 forms, 20 charts, and 50 dynamic lights.

Standard Mode
Metric	CLJ	Vite	Create React App
Cold build	808ms	2.1s	34s
HMR rebuild	262ms	450ms	2.8s
Memory usage	256 MB	420 MB	680 MB
Main thread time	712.2ms	1,163ms	N/A
Unattributed work	316.6ms	607.8ms	N/A
Bundle size	2805 KB	N/A	N/A
Power Mode (22.62 KB, zero dependencies)
Metric	Value
Bundle Size	22.62 KB
Main Thread Time	0.1 ms
Unattributed Work	175.2 ms
Build Time (cached)	Instant (0ms)
Build Time (cold)	~700ms
🔧 How It Works
Standard Mode Build Pipeline
text
┌─────────────────┐
│   Source Files  │
│  (.jsx, .clj)   │
└────────┬────────┘
         ▼
┌─────────────────┐
│  CLJ Language   │
│   Processor     │
└────────┬────────┘
         ▼
┌─────────────────┐
│   Intelligent   │
│    Selector     │
└────────┬────────┘
         ▼
    ┌────┴────┬────────┬────────┐
    ▼         ▼        ▼        ▼
┌───────┐ ┌──────┐ ┌─────────┐
│esbuild│ │ Vite │ │ webpack │
│ <2MB  │ │2-5MB │ │  >5MB   │
└───┬───┘ └──┬───┘ └────┬────┘
    └────────┴──────────┘
              ▼
    ┌─────────────────┐
    │   Isolation     │
    │    Runtime      │
    └────────┬────────┘
             ▼
    ┌─────────────────┐
    │   Browser App   │
    └─────────────────┘
Power Mode Pipeline
text
┌─────────────────┐
│   Source Files  │
│  (.jsx, .clj)   │
└────────┬────────┘
         ▼
┌─────────────────┐
│  CLJ Animation  │  ← 50 built-in canvas animations
│     Engine      │
└────────┬────────┘
         ▼
┌─────────────────┐
│   CLJ Runtime   │  ← Custom React-compatible runtime
│   Generator     │     (useState, useEffect, useRef, etc.)
└────────┬────────┘
         ▼
┌─────────────────┐
│   Interactive   │  ← Ripple, glow, pulse, shake, float
│     System      │
└────────┬────────┘
         ▼
┌─────────────────┐
│     esbuild     │  ← Lightning-fast bundling
└────────┬────────┘
         ▼
┌─────────────────┐
│   22 KB Bundle  │  ← 124x smaller than standard mode
└─────────────────┘
Isolation Architecture
text
┌──────────────────────────────────────────────┐
│                  MAIN THREAD                  │
│  ┌────────────┐  ┌────────────┐  ┌─────────┐ │
│  │   React    │  │   Counters │  │  Forms  │ │
│  │ Reconciliation│  │   (200)   │  │  (50)  │ │
│  └────────────┘  └────────────┘  └─────────┘ │
│                                              │
│         ▲                                    │
│         │ RPC Proxy (postMessage)            │
│         ▼                                    │
├──────────────────────────────────────────────┤
│              WORKER THREAD 1                  │
│  ┌────────────────────────────────────────┐  │
│  │              Three.js                   │  │
│  │  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐  │  │
│  │  │100k  │ │100k  │ │5k    │ │2k    │  │  │
│  │  │Stars │ │Parts │ │Cryst │ │Orbs  │  │  │
│  │  └──────┘ └──────┘ └──────┘ └──────┘  │  │
│  └────────────────────────────────────────┘  │
├──────────────────────────────────────────────┤
│              WORKER THREAD 2                  │
│  ┌────────────────────────────────────────┐  │
│  │            Chart.js                     │  │
│  │         (20 charts)                     │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘
🎨 Power Mode Animation System
How to use animations
Add a single annotation to any JSX file:

jsx
// @clj-animate particleNebula

function MyComponent() {
  return <div>My animated app</div>;
}
Available animations (50 total)
Category	Animations
Particle Systems	particleNebula, cosmicDust, fireflies, bubbles, snowflakes
Wave Patterns	quantumWave, plasmaFlow, pulseWave, ripples
Space Effects	starfield, galaxy, wormhole, blackHole, supernova, constellation
Light Effects	lightTrails, lightning, auroraBorealis, northernLights, solarFlare
Matrix Effects	matrixRain, neuralNetwork, electricGrid, magneticField
Geometric	geometricMorph, crystalMatrix, crystalCave, fractals, kaleidoscope
Nature	fireflies, lavaFlow, oceanFloor, thunderstorm, bioluminescence
Dynamic	vortexSwarm, pulsarRings, gravityWells, timeWarp, hyperspace
Organic	heartbeat, dnaHelix, tentacles, molecularDance, phoenixRise
Atmospheric	liquidGradient, energyField, nebulaClouds, dimensionalRift, sonicBoom
Interactive System
All interactive effects are automatically available when using clj-btn and clj-card classes:

jsx
// Buttons with ripple effect on click
<button className="clj-btn" onclick={handleClick}>Click Me</button>

// Cards with hover lift animation
<div className="clj-card">Hover over me</div>
The interactive system provides:

rippleEffect(e, color) - Material-style ripple on click

glowOnHover(el, color, intensity) - Glow effect on mouse enter

pulseAnimation(el, duration, scale) - Continuous pulse animation

shakeAnimation(el) - Shake on error

floatAnimation(el, distance, duration) - Floating animation

📁 Complete File Structure
text
ClientLiteJSX/
├── bin/
│   └── clj.js              # CLI entry point
├── lib/
│   ├── compiler.js          # Standard mode compiler (2800+ lines)
│   ├── power.js             # Power mode compiler (700+ lines)
│   ├── server.js            # Express dev server
│   ├── tunnel.js            # LocalTunnel integration
│   ├── clj-language.js      # CLJ to JSX transpiler
│   ├── config.js            # Configuration manager
│   ├── customSyntax.js      # Custom language block parser
│   └── apiRouter.js         # API route loader
├── scripts/
│   └── setup-clientlite.js  # Post-install plugin setup
├── src/
│   ├── App.jsx              # Official Power Mode test app
│   └── index.html           # Entry HTML
├── dist/
│   └── client/              # Build output
│       ├── bundle.js
│       └── index.html
├── CLJ_MODULES/
│   └── example-module/      # Custom CLJ modules
│       ├── CLM.json
│       └── index.js
├── clj.config.js            # Configuration file
└── package.json
🔧 Power Mode Source Code
lib/power.js Core Components
The Power Mode compiler is built around the CLJAnimationEngine class:

javascript
class CLJAnimationEngine {
  constructor() {
    // 50 animation templates
    this.animationTemplates = {
      particleNebula: this.getParticleNebulaCode,
      quantumWave: this.getQuantumWaveCode,
      neuralNetwork: this.getNeuralNetworkCode,
      starfield: this.getStarfieldCode,
      matrixRain: this.getMatrixRainCode,
      // ... 45 more animations
    };
  }
  
  // Each animation returns self-executing canvas code
  getParticleNebulaCode() {
    return `(function() {
      const c=document.createElement('canvas');
      // ... 400 particle system with mouse interaction
    })();`;
  }
  
  // Transforms JSX to use CLJ runtime instead of React
  transformJSX(code, filePath) {
    // Replace React.createElement → __CLJ_createElement
    // Replace useState → __CLJ_useState
    // Replace useEffect → __CLJ_useEffect
    // etc.
  }
  
  // Generates custom React-compatible runtime
  generateCLJRuntime() {
    // useState, useEffect, useRef, useCallback, useMemo
    // createElement, mount, rerender
    // Device detection (mobile/tablet/desktop)
  }
  
  // Interactive effects system
  getInteractiveSystemCode() {
    // rippleEffect, glowOnHover, pulseAnimation
    // shakeAnimation, floatAnimation
    // CSS animations for buttons and cards
  }
}
🖥️ CLI Source Code
bin/clj.js
The CLI dynamically loads either compiler.js or power.js:

javascript
// Check for local compiler override
const localCompilerPath = path.join(process.cwd(), 'compiler.js');
const npmCompilerPath = path.join(__dirname, '..', 'lib', 'compiler.js');

let compilerModule;
if (fs.existsSync(localCompilerPath)) {
  compilerModule = await import('file:///' + localCompilerPath.replace(/\\/g, '/'));
} else {
  compilerModule = await import('../lib/compiler.js');
}

// Power mode switch
case 'power':
  const powerPath = path.join(__dirname, '..', 'lib', 'power.js');
  const powerCompiler = await import('file:///' + powerPath.replace(/\\/g, '/'));
  const { compileProject: powerCompile } = powerCompiler;
  const powerSuccess = await powerCompile(powerTarget, powerIsProd);
lib/server.js
The dev server with HMR, API routing, and Netlify export:

javascript
function startServer(mode) {
  const app = express();
  const server = http.createServer(app);
  
  // Setup HMR WebSocket server
  const hmrServer = setupHMRServer(server);
  
  // Serve static files from dist directory
  app.use(express.static(distDir));
  
  // API routing
  const apiRouter = loadApiRoutes(apiDir);
  app.use('/api', apiRouter);
  
  // Smart index.html serving with JSX fallback
  app.get('/', (req, res) => { /* ... */ });
}
📊 Build Log Example
text
PS D:\ClientLightJSx> node bin/clj.js power client --hot

📦 Detected 4 large packages, setting up isolation...
🔒 Loading @react-three/drei in isolated environment...
✅ @react-three/drei isolated and ready (648ms)
🔒 Loading @react-three/fiber in isolated environment...
✅ @react-three/fiber isolated and ready (2ms)
🔒 Loading chart.js in isolated environment...
✅ chart.js isolated and ready (16ms)
🔒 Loading three in isolated environment...
✅ three isolated and ready (33ms)
📦 Preloaded 4/4 isolated packages

⚡ CLJ POWER MODE - UI Transform Engine
   Using: lib/power.js
   No React required - Native CLJ Runtime

🔧 Initializing Power Compiler...
   UI Engine: 50 Animations Ready
   Prefetch: 6 modules cached
🎨 Transforming JSX UI: App.jsx
✅ Bundled: App.jsx → bundle.js (22.62 KB)

✨ Compiled successfully for mode: client

✅ Power build complete!
   Output: dist/client/

✅ Memory limit enforced: 4288 MB
🚀 ClientLite client mode running on http://localhost:3000
🤝 Contributing
CLJ is under active development. To contribute:

Fork the repository

Create a feature branch

Submit a pull request

Development Setup
bash
git clone https://github.com/sussybocca/clientlitejsx
cd clientlitejsx
npm install
npm link
📝 License
MIT © ClientLite Team

🙏 Acknowledgments
ClientLiteJSX builds upon the incredible work of:

esbuild - The extremely fast bundler by Evan Wallace

Vite - Next generation frontend tooling by Evan You

webpack - The battle-tested module bundler

React - The library for web interfaces by Meta

Three.js - 3D library for the web by Ricardo Cabello

FFMPEG - Complete multimedia framework

Express - Fast, unopinionated web framework for Node.js

LocalTunnel - Expose localhost to the world