v3.2.0 < 18KB (Gzipped Full Ecosystem)

The Python
of JavaScript Frameworks

Zero config, zero build tools, zero complexity. 54 powerful native features including Directive Engine, Time Vault, and SEO Suite.

0
Build Steps
9.8KB
Gzipped
54
Native Features
v3.2.0
Enterprise Ready
Quick Access Tabs

The Anti-Build Manifesto

SimpliJS is more than a framework; it's a movement to reclaim the web from the complexity of build pipelines and ecosystem fragmentation.

Anti-Build Movement

Development belongs in the browser, not in a terminal full of build errors. No Vite, no Webpack, no Babel—just code.

HTML-First Logic

Reactivity belongs in the markup. JavaScript should be a powerful enhancement, not a requirement for fundamental structure.

Zero-Config Excellence

Stop wasting your talent on configuration. Every minute spent on setup is a minute lost on your innovative product.

📦 Installation & Setup

CDN (Fastest)

Perfect for quick demos and lean projects.

<script src="https://cdn.jsdelivr.net/.../simplijs.min.js"></script>

NPM (Production)

Full type support and tree-shaking.

npm install simplijs
ES Module Import
Zero-build native browser support
Copy
import { createApp, component, reactive } from 'https://esm.sh/simplijs@3.2.0';

component('hello-world', (el, props) => {
  return () => `<h1>Hello ${props.name || 'World'}!</h1>`;
});

Try editing the name in the input to see real-time proxy updates.

8 Robust Native Features

SimpliJS follows a "Lean-Core" philosophy. It provides the essential 8 features directly in the core, maintaining a tiny footprint.

1. Declarative Component Registration

Register custom elements with a simple setup function. No Webpack, no compilation.

Basic Component
Clean Web Component registration
Copy
import { component } from 'simplijs';

component('hello-world', (el, props) => {
  return {
    render: () => `
                        <div class="greeting">
                        <h1>Hello, ${props.name}!</h1>
                        <p>Running on SimpliJS v3.2.0</p>
      </div>
    `
  };
});

// HTML: <hello-world s-prop:name="World"></hello-world>

2. Deeply Reactive State (reactive)

Proxy-based reactivity that works with nested objects and arrays. Changes trigger automatic re-renders.

Reactive State
v3.2.0 · Proxies, Effects, Directives
Deeply nested reactivity with zero overhead
Copy
import { component, reactive } from 'simplijs';

component('user-profile', (el, props) => {
  const state = reactive({
    user: {
      name: props.initialName || 'Guest',
      preferences: { theme: 'dark' }
    },
    posts: ['Hello World']
  });

  return {
    toggleTheme: () => {
      state.user.preferences.theme = 
        state.user.preferences.theme === 'dark' ? 'light' : 'dark';
    },
    render: () => `
                        <div class="profile" s-class="state.user.preferences.theme">
                        <h3>${state.user.name}</h3>
                        <button s-click="toggleTheme">Toggle Theme</button>
        
                        <ul s-for="post in state.posts">
                        <li>${post}</li>
        </ul>
      </div>
    `
  };
});

Interact with the buttons to see deep reactivity in action.

3. Component Attributes (Props)

Access element attributes directly within your setup function. (Full reactive props coming in v1.0).

Component with Attributes
Reading static attributes on mount
Copy
import { component } from 'simplijs';

// Usage: 
component('user-badge', (el, props) => {
  return {
    render: () => `
                        <div class="badge">
                        <strong>${props.name}</strong>
                        <span class="role">(${props.role})</span>
      </div>
    `
  };
});

4. State Time Vault (reactive.vault)

Bind events using standard HTML attributes. Clean and predictable.

@event and on:event
Two syntaxes, same result
Copy
import { component } from 'simplijs';

component('interactive-demo', (el) => {
  return {
    handleClick: () => alert('Button clicked!'),
    handleMouseOver: () => console.log('Mouse over!'),
    render: () => `
                        <div>
                        <button onclick="this.closest('interactive-demo').handleClick()">
          Click Me
        </button>
        
                        <button onmouseover="this.closest('interactive-demo').handleMouseOver()">
          Hover Me
        </button>
      </div>
    `
  };
});

5. Computed Properties (computed)

Lazily evaluated, cached derived state that only recalculates when dependencies change.

Computed Properties
Automatic dependency tracking
Copy
import { component, reactive, computed } from 'simplijs';

component('shopping-cart', () => {
  const state = reactive({
    items: [
      { name: 'Laptop', price: 999, quantity: 1 }
    ],
    taxRate: 0.1
  });

  const subtotal = computed(() => {
    return state.items.reduce((sum, item) => sum + (item.price * item.quantity), 0);
  });

  const tax = computed(() => subtotal.value * state.taxRate);
  const total = computed(() => subtotal.value + tax.value);

  return {
    render: () => `
                        <div>
                        <h3>Shopping Cart</h3>
                        <p>Subtotal: $${subtotal.value}</p>
                        <p>Tax: $${tax.value}</p>
                        <p>Total: $${total.value}</p>
      </div>
    `
  };
});

6. Side Effects and Watchers (watch)

Watch reactive state changes and execute side effects with old and new values.

Watchers
React to specific state changes
Copy
import { component, reactive, watch } from 'simplijs';

component('search-field', () => {
  const state = reactive({
    query: '',
    results: [],
    loading: false
  });

  // Watch for search query changes
  watch(() => state.query, async (newQuery, oldQuery) => {
    console.log(`Search changed from "${oldQuery}" to "${newQuery}"`);
    
    if (newQuery.length < 3) {
      state.results = [];
      return;
    }

    state.loading = true;
    
    // Simulate API call
    await new Promise(resolve => setTimeout(resolve, 500));
    state.results = [
      `Result 1 for "${newQuery}"`,
      `Result 2 for "${newQuery}"`,
      `Result 3 for "${newQuery}"`
    ];
    
    state.loading = false;
  });

  return {
    updateQuery: (e) => state.query = e.target.value,
    render: () => `
                            <div>
                            <input type="text"
                                   placeholder="Search (min 3 chars)..."
                                   value="${state.query}"
                                   oninput="this.closest('search-field').updateQuery(event)" />
        
        ${state.loading ? '<p>Loading...</p>' : ''}
        
                            <ul>
          ${state.results.map(r => `<li>${r}</li>`).join('')}
        </ul>
      </div>
    `
  };
});

12. The Bridge (Roadmap)

Universal imports for React, Vue, and Svelte components. (Coming in v1.0).

13. The Time Vault (Advanced)

Time-travel debugging and state persistence. (Coming soon in v1.0).

7. DOM Refs (ref)

Access DOM elements manually after render. (Simplified engine in v0.1.0).

DOM References
Get native element access
Copy
import { component, ref } from 'simplijs';

component('auto-focus', (el) => {
  return {
    onMount: () => {
      const input = el.querySelector('input');
      input?.focus();
    },
    render: () => `
                                <div>
                                <input placeholder="I'm auto-focused" />
      </div>
    `
  };
});

8. Full Component Lifecycle Hooks (onMount, onDestroy)

Intersect the component timeline at critical moments: mount, update, destroy, and error.

Lifecycle Methods
Every moment matters
Copy
import { component, reactive } from 'simplijs';

component('lifecycle-demo', () => {
  const state = reactive({ count: 0, mountTime: null });

  return {
    onMount: () => {
      console.log('✅ Component attached to DOM');
      state.mountTime = new Date().toISOString();
      
      // Set up interval
      this.interval = setInterval(() => {
        console.log('Interval tick');
      }, 1000);
    },
    
    onUpdate: () => {
      console.log('🔄 Component re-rendered, count:', state.count);
    },
    
    onDestroy: () => {
      console.log('🗑️ Component removed, cleaning up...');
      clearInterval(this.interval);
    },
    
    onError: (err) => {
      console.error('⚠️ Component error:', err.message);
      // Log to error tracking service
    },
    
    increment: () => state.count++,
    
    render: () => `
                                <div>
                                <p>Mounted at: ${state.mountTime || 'Not mounted yet'}</p>
                                <p>Count: ${state.count}</p>
                                <button onclick="this.closest('lifecycle-demo').increment()">
          Increment (triggers onUpdate)
        </button>
      </div>
    `
  };
});

9. Content Projection (Slots)

Native Web Component slots for flexible content composition. Built directly into the core engine.

10. Global Event Bus (emit / on)

Decouple components with a lightning-fast native EventTarget bus. Perfect for cross-component communication.

Global Event Bus
Component A → Component B
Copy
import { component, emit, on } from 'simplijs';

// Component A: Sender
component('product-list', () => {
  return {
    selectProduct: (product) => {
      emit('product:selected', product);
      emit('analytics:event', {
        action: 'product_select',
        productId: product.id
      });
    },
    render: () => `
                                <div>
                                <button onclick="this.closest('product-list-demo').selectProduct({id: 2, name: 'Mouse'})">
          Select Mouse
        </button>
      </div>
    `
  };
});

// Component B: Receiver
component('product-details-demo', () => { // Renamed to avoid conflict with product-details
  const state = reactive({ selectedProduct: null });

  on('product:selected', (product) => {
    state.selectedProduct = product;
  });

  return {
    render: () => `
                                <div class="p-6 bg-white/5 rounded-2xl border border-white/10 h-full">
        ${state.selectedProduct 
          ? `<h3 class="text-xl font-bold text-white mb-2">Selected: ${state.selectedProduct.name}</h3>`
          : '<p class="text-slate-500">No product selected</p>'
        }
      </div>
    `
  };
});

Input Sync: s-bind & s-model

Bi-directional data binding for form inputs and custom components.

<div s-app s-state="{ text: 'Hello' }">
  <input s-bind="text" type="text" />
  <p>You typed: {text}</p>
</div>

HTML-First Engine

Powerful directives like s-app, s-if, and s-for for template-driven development.

Logic & Flow Control

s-if / s-else

Conditional rendering that removes elements from the DOM.

<div s-if="isAdmin">Admin Dashboard</div>
<div s-else>User Profile</div>

s-for

Elite list rendering with 0 compilation.

<ul>
  <li s-for="item in items" s-key="item.id">
    {item.label}
  </li>
</ul>

Visibility: s-show & s-hide

Toggle visibility using display: none without removing from DOM.

<div s-show="isVisible">Now you see me</div>
<div s-hide="!isVisible">Now you don't</div>

Advanced Event Handling

Browser Events: s-click, s-hover

Direct event listeners with scope awareness.

<button s-click="submit()" s-hover="tip = true">
  Submit Form
</button>

Keyboard Modifiers: s-key:*

Easy key filtering for common actions.

<input s-key:enter="save()" s-key:esc="cancel()" />

SimpliJS is the first framework with professional Time Travel Debugging built into the core.

The Vault
Undo, Redo, and Shareable Snapshots
Copy
import { reactive } from 'simplijs';

const state = reactive.vault({ count: 0 });

state.count++; 
state.count++;

state.vault.back();    // count is 1
state.vault.forward(); // count is 2
console.log(state.vault.share()); // Get unique debug URL

5. HTML-First Directive Engine (s-*)

Write complex logic directly in your HTML. SimpliJS's engine scans and reactive-binds directives for elite performance.

Directive Logic
s-if, s-for, and s-model usage
Copy
<div s-app="todoApp">
  <input s-model="newTask" s-key:enter="addTodo" />
  <button s-click="addTodo">Add</button>

  <ul s-for="todo in todos">
    <li s-if="!todo.done">${todo.text}</li>
  </ul>
</div>

6. Lifecycle Hooks & Global Refs

Hook into component creation, mounting, and destruction with ease. Use s-ref for direct DOM access.

Component Lifecycle
Full control over the element lifecycle
Copy
component('auto-focus', (el) => {
  return {
    onMount: () => {
      console.log('Mounted!');
      el.querySelector('input').focus();
    },
    render: () => `<input type="text" placeholder="I focus automatically" />`
  };
});

Async, Fetch & Components

Zero-JS Fetch: s-fetch & s-loading

Fetch data from any API and handle loading states declaratively.

<div s-fetch="'/api/users'" s-state="{ users: [] }">
  <div s-loading>Fetching users...</div>
  <div s-for="u in users">{u.name}</div>
</div>

Dynamic Components: s-component & s-prop

Mount components dynamically based on state.

<div s-component="currentTab" s-prop:data="activeData"></div>

Enterprise Optimizations

s-lazy

Intersection observer built-in for zero-config lazy loading.

s-memo

Static caching for expensive subtrees to maximize FPS.

The Plugin Ecosystem

Extend SimpliJS with 7 official plugins designed for production-grade reliability.

@simplijs/auth

Complete authentication solution with support for JWT, OAuth, and custom providers. Automatic session management.

View API Docs

@simplijs/router

High-performance SPA router with nested routes, guards, and smooth transitions. Zero config needed.

View API Docs

@simplijs/vault-pro

Advanced state persistence, server-side sync, and encrypted local storage for the core Vault feature.

View API Docs

@simplijs/bridge-adapters

Extended adapters for Angular, Alpine.js, and jQuery. Bridging 15 years of web history into one app.

View API Docs

@simplijs/devtools

Browser extension for visual state debugging, component inspection, and performance profiling.

View API Docs

@simplijs/forms

Multi-step form support, custom schemas, and automated file upload handling for complex forms.

View API Docs
Ultimate Choice

@simplijs/ssg

The crown jewel of our ecosystem. Generate blazing-fast static websites with optimized SEO, 100/100 Core Web Vitals, and instant hydration.

Built for Absolute Reliability

SimpliJS isn't just another framework; it's an engineering marvel built by SB Tech, a leader in AI and software innovation with over 25 years of combined experience in the tech industry.

Reliability & Performance Audit (v3.2.0)

Verified against the Simpli-Elite Test Suite: 61 rigorous tests covering reactivity, lifecycle, state persistence, and cross-framework bridging.

100%

Test Pass Rate

100/100

Web Vitals

<20KB

Runtime Size

Elite Verification Methodology

Every feature is verified through real-world/practical benchmarks using Chrome 131 and the official JS Framework Benchmark suite.

Modern Proxy Architecture

Bypass the Virtual DOM bottleneck. SimpliJS uses native JavaScript Proxies for precise, granular DOM updates.

The "Python of JS" Vision

"The JavaScript ecosystem has become unnecessarily complex. SimpliJS was created to bring back the joy of coding—where a single script tag gives you everything you need to build world-class applications."

Subhamoy

Subhamoy Bhattacharjee

Founder, SB Tech

Strategic Use Cases

Where SimpliJS outperforms everything else.

SEO-Critical Sites

Get 100/100 Lighthouse scores and instant indexing with built-in SSG and JSON-LD schema support.

Enterprise Dashboards

Manage massive reactive state with The Time Vault for instant debugging and session playback.

Legacy Modernization

The Bridge allows you to mount modern React components directly into legacy jQuery apps without a build step.

Start Building with SimpliJS Today

Experience the framework that 1,000+ elite developers trust for their mission-critical projects.

⭐ v3.2.0 • MIT License • Built by SB Tech