
Security News
Vite+ Joins the Push to Consolidate JavaScript Tooling
Evan You announces Vite+, a commercial, Rust-powered toolchain built on the Vite ecosystem to unify JavaScript development and fund open source.
@oxog/praxis
Advanced tools
A high-performance reactive JavaScript framework with enterprise-grade features for modern web applications
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.
<!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 install @oxog/praxis
import praxis from '@oxog/praxis';
praxis.start();
npm install -g @oxog/praxis-cli
praxis create my-app
cd my-app
npm run dev
<!-- 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>
<!-- 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>
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
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>>;
}
requestIdleCallback
or MessageChannel
<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>
<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>
# 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
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:
# 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
Benchmark Results:
import { praxis } from '@oxog/praxis-vite-plugin';
export default {
plugins: [praxis({
optimize: true,
ssr: true
})]
};
module.exports = {
module: {
rules: [
{
test: /\.html$/,
use: '@oxog/praxis-webpack-loader'
}
]
}
};
# Analyze bundle size
praxis analyze
# Generate performance report
praxis report --performance
# Check for security issues
praxis audit --security
We welcome contributions! Please see our Contributing Guide for details.
MIT License - see LICENSE for details.
FAQs
A high-performance reactive JavaScript framework with enterprise-grade features for modern web applications
We found that @oxog/praxis demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Evan You announces Vite+, a commercial, Rust-powered toolchain built on the Vite ecosystem to unify JavaScript development and fund open source.
Security News
Ruby Central’s incident report on the RubyGems.org access dispute sparks backlash from former maintainers and renewed debate over project governance.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.