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