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

@oxog/praxis

v1.0.1

Published

A high-performance reactive JavaScript framework with enterprise-grade features for modern web applications

Downloads

7

Readme

⚡ Praxis

npm version Bundle Size License Tests Coverage

A high-performance reactive JavaScript framework with enterprise-grade features for modern web applications.

Praxis delivers exceptional performance, security, and accessibility with declarative data binding and reactive components in just 8.5KB.

✨ Why Praxis?

  • 🚀 High Performance with fine-grained reactivity and optimized updates
  • 📦 Lightweight - Only 8.5KB minified and gzipped
  • 🔒 Enterprise Security with XSS prevention and CSP compliance
  • Accessibility First - WCAG 2.1 AA compliance out of the box
  • 🛠️ Complete Toolchain with CLI, testing, and build optimization
  • 🔄 Familiar Syntax - Easy to learn and migrate to

🚀 Quick Start

CDN (Fastest way to try)

<!DOCTYPE html>
<html>
<head>
    <script src="https://unpkg.com/@oxog/praxis@latest/dist/praxis.min.js"></script>
</head>
<body>
    <div x-data="{ count: 0 }">
        <button x-on:click="count++">Count: <span x-text="count"></span></button>
    </div>
    
    <script>
        praxis.start();
    </script>
</body>
</html>

NPM Installation

npm install @oxog/praxis
import praxis from '@oxog/praxis';
praxis.start();

Create New Project

npm install -g @oxog/praxis-cli
praxis create my-app
cd my-app
npm run dev

📖 Documentation

🎯 Core Features

Reactive Directives

<!-- Data binding -->
<div x-data="{ message: 'Hello World' }">
    <p x-text="message"></p>
    <input x-model="message">
</div>

<!-- Conditional rendering -->
<div x-data="{ show: true }">
    <p x-show="show">Visible content</p>
    <p x-if="show">Conditionally rendered</p>
</div>

<!-- Event handling -->
<button x-on:click="alert('Clicked!')" x-on:keydown.enter="handleEnter()">
    Click me
</button>

<!-- List rendering -->
<ul x-data="{ items: ['Apple', 'Banana', 'Cherry'] }">
    <template x-for="item in items" :key="item">
        <li x-text="item"></li>
    </template>
</ul>

Advanced Directives

<!-- Intersection Observer -->
<div x-intersect="handleVisible()" x-intersect.threshold-50>
    Triggers when 50% visible
</div>

<!-- Resize Observer -->
<div x-resize="updateDimensions()" x-resize.debounce>
    Handles resize events
</div>

<!-- Click outside detection -->
<div x-clickaway="closeModal()" x-clickaway.escape>
    Click outside or press escape to close
</div>

<!-- Keyboard shortcuts -->
<div x-hotkey="'ctrl+k'" x-on:keydown="openSearch()">
    Global keyboard shortcuts
</div>

<!-- Focus management -->
<div x-focus-trap.auto x-show="modalOpen">
    Automatically manages focus
</div>

<!-- Screen reader announcements -->
<div x-live-region.polite x-text="announcement">
    Announces changes to screen readers
</div>

Global State Management

import { defineStore } from '@oxog/praxis-store';

const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
    history: []
  }),
  
  getters: {
    doubleCount: (state) => state.count * 2,
    lastChange: (state) => state.history[state.history.length - 1]
  },
  
  actions: {
    increment() {
      this.$state.count++;
      this.$state.history.push({ action: 'increment', timestamp: Date.now() });
    },
    
    async fetchInitialCount() {
      const response = await fetch('/api/count');
      this.$state.count = await response.json();
    }
  }
});

// Use in components
const store = useCounterStore();
store.increment();
console.log(store.doubleCount); // Reactive getter

🏗️ Architecture

Signal System

interface Signal<T> {
  value: T;
  peek(): T;              // Read without tracking
  subscribe(fn: () => void): () => void;
}

interface ComputedSignal<T> extends Signal<T> {
  readonly value: T;
}

interface Effect {
  execute(): void;
  dispose(): void;
  dependencies: Set<Signal<any>>;
}

Performance Features

  • Batch Updates: Updates are batched using requestIdleCallback or MessageChannel
  • Fine-grained Reactivity: Only updates what actually changed
  • Memory Management: Automatic cleanup with WeakMaps and FinalizationRegistry
  • Efficient Scheduling: Smart update scheduling prevents unnecessary work

🧪 Examples

Counter with Computed Values

<div x-data="{ count: 0 }">
  <button x-on:click="count++">+</button>
  <span x-text="count"></span>
  <button x-on:click="count--">-</button>
  
  <p x-show="count > 0">Positive!</p>
  <p x-show="count < 0">Negative!</p>
  <p x-show="count === 0">Zero!</p>
</div>

Form Handling

<div x-data="{ name: '', email: '' }">
  <input x-model="name" placeholder="Name">
  <input x-model="email" type="email" placeholder="Email">
  
  <div x-show="name && email">
    <p>Hello <span x-text="name"></span>!</p>
    <p>Email: <span x-text="email"></span></p>
  </div>
</div>

🚀 Development

# Install dependencies
npm install

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Build
npm run build

# Run benchmarks
npm run benchmark

📊 Performance

Praxis is designed for performance. Run the benchmarks to see the framework capabilities:

# Core reactivity benchmarks
npm run benchmark

# DOM manipulation benchmarks (open in browser)
open benchmarks/dom-benchmark.html

Key performance advantages:

  • Signals: Efficient reactive system with fine-grained updates
  • Batch Updates: Prevents layout thrashing
  • Memory Efficient: WeakMap-based tracking prevents memory leaks
  • Smaller Bundle: Lightweight core with tree-shakeable modules

🔒 Security

  • XSS Prevention: Expression sandboxing and HTML sanitization
  • CSP Compliant: Works with strict Content Security Policy
  • Trusted Types: Supports browser security APIs
  • Input Validation: Comprehensive validation and sanitization

🧪 Testing

# Run all tests
npm test

# Test with coverage
npm run test:coverage

# Test specific features
npm run test:security
npm run test:accessibility
npm run test:performance

🚀 Performance

Benchmark Results:

  • 📊 Fast initial render with optimized DOM updates
  • 🔄 Efficient reactive updates with minimal overhead
  • 📦 Small bundle size at 8.5KB minified+gzipped
  • 💾 Memory efficient with WeakMap-based tracking

🛠️ Build Tools

Vite Plugin

import { praxis } from '@oxog/praxis-vite-plugin';

export default {
  plugins: [praxis({
    optimize: true,
    ssr: true
  })]
};

Webpack Loader

module.exports = {
  module: {
    rules: [
      {
        test: /\.html$/,
        use: '@oxog/praxis-webpack-loader'
      }
    ]
  }
};

🌐 Browser Support

  • ✅ Chrome 63+
  • ✅ Firefox 60+
  • ✅ Safari 13+
  • ✅ Edge 79+

📊 Bundle Analysis

# Analyze bundle size
praxis analyze

# Generate performance report
praxis report --performance

# Check for security issues
praxis audit --security

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

📄 License

MIT License - see LICENSE for details.

🌐 Links