0.0.360 โ€ข Published 11 months ago

0x1 v0.0.360

Weekly downloads
-
License
TDLv1
Repository
github
Last release
11 months ago

โšก Features

๐Ÿ’จ Extreme Performance

  • Tiny runtime: <30KB total JS bundle size
  • Zero hydration cost: No client-side hydration overhead
  • Native ESM: Browser-native module loading without bundling
  • Precomputed content: Minimal JS for maximum speed
  • Sub-second builds: Bun-powered compilation and bundling

๐Ÿ”„ React/Next.js Drop-in Replacement

  • Full React Hooks API: useState, useEffect, useCallback, useMemo, useRef
  • Next.js-compatible Link: Drop-in replacement for next/link
  • App Directory Structure: Next15-style file-based routing
  • JSX Runtime: Custom JSX implementation without React dependencies
  • Efficient Server Actions: "use server" functions with automatic internal API generation (never exposed publicly)
  • Explicitly Split Client/Server: Simply use "use server" for server-side functions and "use client" for client-side components, or leave it up to 0x1 to automatically infer the context
  • Easy Migration: Simple find-and-replace from React/Next.js imports

๐Ÿงฉ Component System

  • TypeScript-Only: Exclusively built for TypeScript with full type safety
  • Simple API: Modern component system, Next15-compatible, but without the bloat
  • Minimal abstractions: Near-vanilla performance with type-checked templates
  • Custom Diffing: Optimized DOM updates with TypeScript safety
  • Compile-time validation: Catch errors early with strict typing
  • Smart Context Inference: Automatically detects client/server context and validates usage
  • Runtime Error Boundaries: Beautiful error display for development with helpful suggestions

๐Ÿ“ App Directory Structure

  • Next15-compatible: Modern app directory structure with file-based routing
  • Nested layouts: Component co-location and shared UI
  • Special file conventions: page.tsx, layout.tsx, loading.tsx, not-found.tsx, etc.
  • Zero configuration: Works out of the box

๐Ÿ›ฃ๏ธ Advanced Routing System

  • Dynamic routes: [slug], [...slug], [[...slug]] patterns
  • Route groups: (auth) folders that don't affect URL structure
  • Search params: Next15-style useSearchParams, useParams, usePathname
  • Route conflict detection: Automatic detection and resolution of conflicting routes
  • Hash fragment navigation: Proper #anchor link handling with auto-scroll
  • Nested layouts: Automatic composition of multiple layout levels

๐Ÿ”จ Developer Experience

  • Bun-first architecture: Fully optimized for Bun's capabilities
  • Lightning-fast hot reload: Sub-second refresh times using SSE + WebSocket
  • Beautiful dev server output: Clear status codes, routes, and component info
  • Tailwind CSS v4 integration: Zero-config styling with automatic optimization
  • Smart defaults: Sensible configurations out of the box

๐Ÿ“ฑ Progressive Web App Support

  • Auto-generated PWA assets: Icons, splash screens, and manifest
  • Offline support: Service worker with intelligent caching
  • Install prompts: Native app-like experience
  • Dark/light modes: Theme support for your PWA
  • Push notifications: Ready infrastructure

๐Ÿ’ก Philosophy

0x1's philosophy is radically different from most modern frameworks:

  1. Zero abstraction cost: No virtual DOM or complex state tracking
  2. Browser-native: Leverage what browsers are good at
  3. Minimal over comprehensive: Focused feature set, exceptional at few things
  4. No dependencies: Entire framework in one tiny package
  5. Extreme performance: Optimize for loaded page performance, not DX shortcuts
  6. TypeScript-first: Built exclusively for TypeScript with full type safety

๐Ÿš€ Quickstart

Prerequisites

  • Bun v1.0.0 or higher (REQUIRED)

Installation

# Install globally (recommended)
bun install -g 0x1

# Or use npx for one-off commands
npx 0x1@latest new my-app

Create a New Project

# Create a new project with default options
0x1 new my-app

# Select template complexity
0x1 new my-app --complexity=minimal|standard|full

# With additional options
0x1 new my-app --theme="royal-purple" --pwa

Development

# Navigate to your project
cd my-app

# Start the development server
0x1 dev

# Open http://localhost:3000 to view your app

Port Management: If port 3000 is in use, the dev server automatically finds the next available port.

Build and Deploy

# Create a production build
0x1 build

# Preview your production build locally
0x1 preview

# Deploy to production
0x1 deploy --provider=vercel

๐ŸŽจ CSS Configuration

0x1 provides intelligent CSS processing with multiple options for optimal performance. Configure your CSS processor in your 0x1.config.ts file:

Configuration Options

// 0x1.config.ts
export default {
  css: {
    processor: '0x1-enhanced', // or 'tailwind-v4'
    minify: true,
    sourcemap: true,
    outputPath: 'dist/styles/output.css',
    content: [
      'src/**/*.{js,ts,jsx,tsx,html}',
      'components/**/*.{js,ts,jsx,tsx,html}',
      'pages/**/*.{js,ts,jsx,tsx,html}',
      'app/**/*.{js,ts,jsx,tsx,html}'
    ],
    darkMode: 'class', // or 'media'
    theme: {
      extend: {
        colors: {
          brand: '#0066cc'
        }
      }
    },
    plugins: []
  }
};

CSS Processors

๐Ÿš€ 0x1 Enhanced (Recommended)

Intelligent Tailwind CSS processor with dramatic performance improvements

  • Performance: 88% faster builds (<400ms vs 4801ms baseline)
  • Bundle Size: 95% smaller bundles (5.76KB vs 97KB)
  • Smart Delegation: Automatically uses your installed Tailwind packages
  • Multi-Strategy Processing: CLI โ†’ PostCSS โ†’ File discovery โ†’ Fallback
  • Version Aware: Supports both Tailwind v3 and v4 automatically
  • Intelligent Caching: Hash-based cache invalidation with dependency tracking
export default {
  css: {
    processor: '0x1-enhanced' // Default for new projects
  }
};

๐ŸŒˆ Tailwind v4 (Standard)

Standard TailwindCSS v4 processing

  • Official Support: Uses the official TailwindCSS v4 engine
  • Full Features: Complete Tailwind feature set and plugin ecosystem
  • Predictable Output: Consistent with standard Tailwind builds
  • Slower Performance: Standard build times (3000ms+ for large projects)
export default {
  css: {
    processor: 'tailwind-v4'
  }
};

Performance Comparison

ScenarioTailwindCSS v40x1 EnhancedImprovement
Fresh build4,801ms559ms88% faster
Bundle size97KB5.76KB95% smaller
Large project8,000ms+<1000ms87% faster
Memory usageHighLow (streaming)60% less

Advanced Configuration

// 0x1.config.ts - Advanced CSS configuration
export default {
  css: {
    processor: '0x1-enhanced',
    
    // Output configuration
    minify: process.env.NODE_ENV === 'production',
    sourcemap: process.env.NODE_ENV === 'development',
    outputPath: 'dist/styles/app.css',
    
    // Content scanning
    content: [
      'app/**/*.{js,ts,jsx,tsx}',
      'components/**/*.{js,ts,jsx,tsx}',
      'lib/**/*.{js,ts,jsx,tsx}',
      // Add your content paths
    ],
    
    // Performance options (0x1-enhanced only)
    purge: true, // Remove unused styles
    
    // Tailwind configuration
    darkMode: 'class',
    theme: {
      extend: {
        fontFamily: {
          sans: ['Inter', 'system-ui', 'sans-serif'],
        },
        colors: {
          primary: {
            50: '#eff6ff',
            500: '#3b82f6',
            900: '#1e3a8a',
          }
        }
      }
    },
    
    // Tailwind plugins
    plugins: [
      // '@tailwindcss/forms',
      // '@tailwindcss/typography'
    ]
  }
};

How 0x1 Enhanced Works

The 0x1-enhanced processor uses intelligent delegation with multiple strategies:

  1. File Discovery: Automatically finds CSS files in standard locations
  2. Directive Detection: Identifies Tailwind v3 (@tailwind) vs v4 (@import "tailwindcss") syntax
  3. Smart Processing: Processes through your installed Tailwind packages via PostCSS
  4. Graceful Fallback: Provides essential CSS if processing fails
  5. Bundle Optimization: Avoids bundling large CSS utilities in JavaScript

Development vs Production

The CSS processor automatically optimizes for different environments:

Development Mode:

  • Fast incremental builds with caching
  • Source maps for debugging
  • Hot reload integration
  • Detailed build logging

Production Mode:

  • Minified output
  • Purged unused styles
  • Optimized file sizes
  • Cache-busting headers

Migration from TailwindCSS

If you're migrating from a pure TailwindCSS project:

  1. Keep your existing tailwind.config.js - 0x1 will automatically detect and use it
  2. Update your configuration to use 0x1's CSS system:
// Before: tailwind.config.js
module.exports = {
  content: ['./src/**/*.{js,ts,jsx,tsx}'],
  theme: { extend: {} },
  plugins: []
};

// After: 0x1.config.ts
export default {
  css: {
    processor: '0x1-enhanced',
    content: ['./src/**/*.{js,ts,jsx,tsx}'],
    theme: { extend: {} },
    plugins: []
  }
};
  1. Choose your processor: Start with '0x1-enhanced' for maximum performance, fallback to 'tailwind-v4' if needed

Troubleshooting

Slow builds?

  • Switch to processor: '0x1-enhanced' for 88% faster builds
  • Reduce content patterns to only include necessary files
  • Enable purge: true to remove unused styles

Missing styles?

  • Check your content patterns include all component files
  • Verify your Tailwind classes are spelled correctly
  • Use processor: 'tailwind-v4' as fallback for full compatibility

Large bundle sizes?

  • Use processor: '0x1-enhanced' for 95% smaller bundles
  • Avoid importing Tailwind CSS in JavaScript files
  • Enable purge: true for production builds

Cache issues?

  • The 0x1 Enhanced processor automatically invalidates cache when classes change
  • For manual cache clearing, delete .0x1-cache/ directory

๐Ÿ“‹ Template Options

๐Ÿ” Minimal Template

Ideal for: Small projects, landing pages, or developers who want full control

  • Basic structure with essential files only
  • Perfect for landing pages or simple sites
  • Tailwind CSS included
  • Extremely lightweight with minimal dependencies

๐Ÿงฉ Standard Template

Ideal for: Most web applications and sites

  • Complete project structure with organized files
  • Router implementation with multi-page support
  • Component architecture for building complex UIs
  • Tailwind CSS with dark mode support
  • Common utility functions and helpers

๐Ÿš€ Full Template

Ideal for: Production applications with advanced features

  • Everything in Standard, plus:
  • Built-in state management system
  • Progressive Web App (PWA) support
  • Service worker for offline capabilities
  • Advanced components with animations
  • Background sync for offline form submissions
  • Push notification infrastructure

๐ŸŽฏ Metadata & SEO Management

0x1 provides a Next15-compatible metadata system that works automatically without requiring manual imports or function calls.

Static Metadata Export

Simply export a metadata constant from any page or layout:

// app/page.tsx
export const metadata = {
  title: 'Home Page',
  description: 'Welcome to my awesome app',
  keywords: ['nextjs', '0x1', 'typescript'],
  openGraph: {
    title: 'Home Page',
    description: 'Welcome to my awesome app',
    images: ['/og-image.jpg'],
  },
  twitter: {
    card: 'summary_large_image',
    title: 'Home Page',
    description: 'Welcome to my awesome app',
  }
};

export default function HomePage() {
  return <h1>Welcome!</h1>;
}

Global Metadata Configuration

Create a global metadata configuration in app/metadata.ts:

// app/metadata.ts
export const metadata = {
  title: {
    template: '%s | My App',
    default: 'My App'
  },
  description: 'A modern web application built with 0x1',
  keywords: ['0x1', 'framework', 'typescript'],
  
  // SEO
  robots: {
    index: true,
    follow: true,
  },
  
  // Social Media
  openGraph: {
    type: 'website',
    locale: 'en_US',
    url: 'https://myapp.com',
    siteName: 'My App',
  },
  
  // PWA & Mobile
  viewport: {
    width: 'device-width',
    initialScale: 1,
  },
  themeColor: '#000000',
  manifest: '/manifest.json',
  
  // Icons
  icons: {
    icon: '/favicon.ico',
    apple: '/apple-touch-icon.png',
  },
};

Page-Specific Metadata

Override global metadata for specific pages:

// app/pages/about/page.tsx
export const metadata = {
  title: 'About Us',
  description: 'Learn more about our company',
  openGraph: {
    title: 'About Us',
    description: 'Learn more about our company',
  }
};

export default function AboutPage() {
  return <div>About us content...</div>;
}

Dynamic Metadata

For dynamic metadata based on props or data:

// app/pages/blog/[slug]/page.tsx
export async function generateMetadata({ params }: { params: { slug: string } }) {
  const post = await fetchPost(params.slug);
  
  return {
    title: post.title,
    description: post.excerpt,
    openGraph: {
      title: post.title,
      description: post.excerpt,
      images: [post.image],
    }
  };
}

export default function BlogPost({ params }: { params: { slug: string } }) {
  // Component implementation
}

Client/Server Directives

0x1 supports Next15-style client and server directives for clear separation of concerns.

Client Components

Use "use client" for browser-only components:

"use client";

import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
    </div>
  );
}

Server Actions

Use "use server" for server-side functions:

"use server";

// app/actions/user-actions.ts
export async function fetchUserData(userId: string) {
  const response = await fetch(`/api/users/${userId}`);
  return response.json();
}

export async function updateUserProfile(userId: string, data: any) {
  const response = await fetch(`/api/users/${userId}`, {
    method: 'PUT',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(data)
  });
  
  if (!response.ok) {
    throw new Error('Failed to update profile');
  }
  
  return response.json();
}

Using Server Actions in Client Components

"use client";

import { fetchUserData, updateUserProfile } from '../actions/user-actions';

export default function UserProfile({ userId }: { userId: string }) {
  const [user, setUser] = useState(null);
  
  useEffect(() => {
    fetchUserData(userId).then(setUser);
  }, [userId]);
  
  const handleUpdate = async (data: any) => {
    try {
      await updateUserProfile(userId, data);
      // Refresh user data
      const updatedUser = await fetchUserData(userId);
      setUser(updatedUser);
    } catch (error) {
      console.error('Update failed:', error);
    }
  };
  
  return (
    <div>
      {/* User profile UI */}
    </div>
  );
}

Automatic API Generation

Server actions automatically create internal API endpoints:

  • Functions in "use server" files become callable from client components
  • Zero exposed endpoints: Internal API generation means no public API routes to secure or document
  • Automatic type safety: Full TypeScript safety maintained across the client/server boundary
  • No manual API creation: Skip the boilerplate of creating /api/ routes manually
  • Built-in security: Server actions are never exposed to the client, only used for server-side logic
  • Simplified architecture: Call server functions directly from client components without HTTP overhead

Best Practices

  1. Metadata: Always export const metadata = {} for static metadata
  2. Client Components: Use "use client" only when necessary (state, events, browser APIs)
  3. Server Actions: Use "use server" for data fetching, mutations, and server-side logic
  4. Type Safety: Leverage TypeScript for full type safety across client/server boundaries

PWA Integration

When creating a PWA project, metadata is automatically configured:

0x1 new my-pwa-app --pwa --theme-color="#007acc"

This automatically generates:

  • Manifest file with proper metadata
  • Icon files in multiple sizes
  • Service worker for offline support
  • Metadata configuration with PWA-specific tags

๐Ÿ”„ Migration from React/Next.js

0x1 is designed as a drop-in replacement for React and Next.js applications. Migration is as simple as updating your imports:

Quick Migration Guide

1. Replace React imports:

// Before (React)
import React, { useState, useEffect } from 'react';

// After (0x1)
import { useState, useEffect } from '0x1';

2. Replace Next.js Link imports:

// Before (Next.js)
import Link from 'next/link';

// After (0x1)
import Link from '0x1/link';

3. Replace Next.js router imports:

// Before (Next.js)
import { useRouter } from 'next/router';

// After (0x1)
import { useRouter } from '0x1/router';

Automated Migration

Use this one-liner to migrate most imports automatically:

# Replace React imports
find ./src -name "*.tsx" -o -name "*.ts" | xargs sed -i 's/from ['\''"]react['\''"];/from "0x1";/g'

# Replace Next.js Link imports
find ./src -name "*.tsx" -o -name "*.ts" | xargs sed -i 's/from ['\''"]next\/link['\''"];/from "0x1\/link";/g'

# Replace Next.js router imports
find ./src -name "*.tsx" -o -name "*.ts" | xargs sed -i 's/from ['\''"]next\/router['\''"];/from "0x1\/router";/g'

Supported React Features

โœ… Fully Supported:

  • useState - State management
  • useEffect - Side effects and lifecycle
  • useCallback - Function memoization
  • useMemo - Value memoization
  • useRef - DOM references and mutable values
  • JSX syntax and components
  • Component props and children
  • Event handlers (onClick, onChange, etc.)

โœ… 0x1 Enhanced Features:

  • useFetch - Built-in data fetching with loading states
  • useForm - Form state management with validation
  • useLocalStorage - Persistent state with localStorage
  • useClickOutside - Click outside detection

โœ… Next.js Compatibility:

  • Link component with href prop
  • App directory structure (app/page.tsx, app/layout.tsx)
  • File-based routing
  • useRouter hook for navigation

Component Migration Example

Before (React/Next.js):

import React, { useState, useEffect } from 'react';
import Link from 'next/link';
import { useRouter } from 'next/router';

export default function MyComponent() {
  const [count, setCount] = useState(0);
  const router = useRouter();

  useEffect(() => {
    console.log('Component mounted');
  }, []);

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
      <Link href="/about">
        <a>About Page</a>
      </Link>
    </div>
  );
}

After (0x1):

import { useState, useEffect } from '0x1';
import Link from '0x1/link';
import { useRouter } from '0x1/router';

export default function MyComponent() {
  const [count, setCount] = useState(0);
  const router = useRouter();

  useEffect(() => {
    console.log('Component mounted');
  }, []);

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
      <Link href="/about">About Page</Link>
    </div>
  );
}

๐Ÿงฉ Component System

0x1 offers a simple but powerful component system built with TypeScript:

// No React import needed! 0x1 has its own JSX runtime

interface ButtonProps {
  onClick: () => void;
  children: string;
  variant?: 'primary' | 'secondary';
}

export function Button({ onClick, children, variant = 'primary' }: ButtonProps) {
  return (
    <button
      className={`btn btn-${variant}`}
      onClick={onClick}
    >
      {children}
    </button>
  );
}

// Usage
function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Count: {count}</h1>
      <Button onClick={() => setCount(count + 1)}>
        Increment
      </Button>
    </div>
  );
}

Hooks API

0x1 provides a complete React-compatible hooks API:

import { 
  useState, 
  useEffect, 
  useCallback, 
  useMemo, 
  useRef,
  useFetch,
  useForm,
  useLocalStorage 
} from '0x1';

function MyComponent() {
  // State management
  const [count, setCount] = useState(0);
  
  // Side effects
  useEffect(() => {
    document.title = `Count: ${count}`;
  }, [count]);
  
  // Memoization
  const expensiveValue = useMemo(() => {
    return count * 1000;
  }, [count]);
  
  // Callbacks
  const handleClick = useCallback(() => {
    setCount(prev => prev + 1);
  }, []);
  
  // Refs
  const inputRef = useRef<HTMLInputElement>(null);
  
  // Data fetching (0x1 enhanced)
  const { data, loading, error } = useFetch('/api/data');
  
  // Persistent state (0x1 enhanced)
  const [theme, setTheme] = useLocalStorage('theme', 'dark');
  
  return (
    <div>
      <input ref={inputRef} />
      <button onClick={handleClick}>
        Count: {count} (Expensive: {expensiveValue})
      </button>
      {loading && <p>Loading...</p>}
      {data && <pre>{JSON.stringify(data, null, 2)}</pre>}
    </div>
  );
}

๐Ÿ“ App Directory Structure

0x1 uses the modern Next15patible app directory structure:

my-app/
โ”œโ”€โ”€ app/                    # App directory (Next15-style)
โ”‚   โ”œโ”€โ”€ layout.tsx          # Root layout (required)
โ”‚   โ”œโ”€โ”€ page.tsx            # Home page
โ”‚   โ”œโ”€โ”€ not-found.tsx       # 404 page
โ”‚   โ”œโ”€โ”€ about/
โ”‚   โ”‚   โ””โ”€โ”€ page.tsx        # /about route
โ”‚   โ”œโ”€โ”€ blog/
โ”‚   โ”‚   โ”œโ”€โ”€ layout.tsx      # Nested layout for blog
โ”‚   โ”‚   โ”œโ”€โ”€ page.tsx        # /blog route
โ”‚   โ”‚   โ””โ”€โ”€ [slug]/
โ”‚   โ”‚       โ””โ”€โ”€ page.tsx    # /blog/[slug] dynamic route
โ”‚   โ””โ”€โ”€ api/
โ”‚       โ””โ”€โ”€ hello/
โ”‚           โ””โ”€โ”€ route.ts    # API route
โ”œโ”€โ”€ components/             # Reusable components
โ”‚   โ”œโ”€โ”€ Button.tsx
โ”‚   โ”œโ”€โ”€ Header.tsx
โ”‚   โ””โ”€โ”€ ThemeToggle.tsx
โ”œโ”€โ”€ lib/                    # Utilities and helpers
โ”œโ”€โ”€ public/                 # Static assets
โ”œโ”€โ”€ styles/                 # CSS files
โ”‚   โ””โ”€โ”€ globals.css
โ”œโ”€โ”€ 0x1.config.ts          # Framework configuration
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ tsconfig.json

Special Files

  • layout.tsx - Shared UI for a segment and its children
  • page.tsx - Unique UI of a route and makes it publicly accessible
  • loading.tsx - Loading UI for a segment and its children
  • error.tsx - Error UI for a segment and its children
  • not-found.tsx - UI for 404 errors

Example Layout

// app/layout.tsx
import { ThemeToggle } from '../components/ThemeToggle';
import Link from '0x1/link';

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>
        <header>
          <nav>
            <Link href="/">Home</Link>
            <Link href="/about">About</Link>
            <ThemeToggle />
          </nav>
        </header>
        <main>{children}</main>
      </body>
    </html>
  );
}

๐Ÿ—บ๏ธ Routing & Navigation

Link Component

0x1 provides a Next.js-compatible Link component:

import Link from '0x1/link';

function Navigation() {
  return (
    <nav>
      <Link href="/">Home</Link>
      <Link href="/about">About</Link>
      <Link href="/blog">Blog</Link>
      
      {/* With custom styling */}
      <Link href="/contact" className="nav-link">
        Contact
      </Link>
      
      {/* Hash fragment navigation */}
      <Link href="/docs/api#hooks">
        API Hooks Section
      </Link>
      
      {/* External links work normally */}
      <Link href="https://example.com" target="_blank">
        External Link
      </Link>
    </nav>
  );
}

Dynamic Routes

0x1 supports Next.js 15-style dynamic routing:

app/
โ”œโ”€โ”€ page.tsx                    // matches /
โ”œโ”€โ”€ about/page.tsx             // matches /about
โ”œโ”€โ”€ blog/
โ”‚   โ”œโ”€โ”€ [slug]/page.tsx        // matches /blog/hello-world
โ”‚   โ””โ”€โ”€ [...tags]/page.tsx     // matches /blog/tag1/tag2/etc
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ [[...path]]/page.tsx   // matches /docs, /docs/api, /docs/api/hooks
โ”‚   โ””โ”€โ”€ (auth)/                // Route group - doesn't affect URL
โ”‚       โ”œโ”€โ”€ login/page.tsx     // matches /login (not /auth/login)
โ”‚       โ””โ”€โ”€ register/page.tsx  // matches /register
โ””โ”€โ”€ [category]/
    โ””โ”€โ”€ [id]/page.tsx          // matches /electronics/123

Search Parameters & Navigation

Access URL search parameters and navigation in your components:

import { useSearchParams, useParams, useRouter } from '0x1/router';

function ProductPage() {
  const params = useParams<{ category: string; id: string }>();
  const searchParams = useSearchParams();
  const router = useRouter();
  
  const color = searchParams.get('color');
  const size = searchParams.get('size');
  
  const handleNavigate = () => {
    // Navigate with custom scroll behavior
    router.navigate('/products', true, 'smooth');
  };
  
  return (
    <div>
      <h1>Product {params.id} in {params.category}</h1>
      {color && <p>Color: {color}</p>}
      {size && <p>Size: {size}</p>}
    </div>
  );
}

Scroll Behavior

0x1 provides intelligent scroll management that follows modern SPA best practices:

Default Behavior:

  • New navigation: Scroll to top โœ…
  • Browser back/forward: Preserve scroll position โœ…
  • Hash fragments: Scroll to target element โœ…
  • External links: Normal browser behavior โœ…

Router Configuration:

// Global scroll behavior
const router = new Router({
  scrollBehavior: 'auto',    // Smart default (recommended)
  // scrollBehavior: 'top',     // Always scroll to top
  // scrollBehavior: 'preserve', // Never scroll
  // scrollBehavior: 'smooth',   // Smooth scroll to top
});

Per-Link Overrides:

import Link from '0x1/link';

function Navigation() {
  return (
    <nav>
      {/* Default behavior */}
      <Link href="/products">Products</Link>
      
      {/* Always scroll to top */}
      <Link href="/about" scrollBehavior="top">About</Link>
      
      {/* Preserve scroll position */}
      <Link href="/settings" scrollBehavior="preserve">Settings</Link>
      
      {/* Smooth scroll to top */}
      <Link href="/contact" scrollBehavior="smooth">Contact</Link>
      
      {/* Hash fragment navigation */}
      <Link href="/docs/api#hooks">API Hooks</Link>
    </nav>
  );
}

Programmatic Navigation:

const router = useRouter();

// Default behavior
router.navigate('/products');

// Custom scroll behavior
router.navigate('/about', true, 'smooth');
router.navigate('/settings', true, 'preserve');

๐ŸŽจ Styling with Tailwind CSS

0x1 includes automatic Tailwind CSS v4 processing:

Zero-Config Setup

# Install Tailwind CSS
bun add -d tailwindcss@next @tailwindcss/postcss autoprefixer

# Create config (optional - 0x1 provides defaults)
bunx tailwindcss init

# Start development (Tailwind is processed automatically)
0x1 dev

Usage in Components

export function Card({ children }: { children: React.ReactNode }) {
  return (
    <div className="p-6 bg-white dark:bg-gray-800 rounded-lg shadow-lg hover:shadow-xl transition-shadow">
      {children}
    </div>
  );
}

export function Button({ variant = 'primary', children, ...props }) {
  const baseClasses = "px-4 py-2 rounded-lg font-medium transition-colors";
  const variantClasses = {
    primary: "bg-blue-600 hover:bg-blue-700 text-white",
    secondary: "bg-gray-200 hover:bg-gray-300 text-gray-900"
  };

  return (
    <button 
      className={`${baseClasses} ${variantClasses[variant]}`}
      {...props}
    >
      {children}
    </button>
  );
}

๐Ÿ“ฑ Progressive Web App Support

Add PWA functionality to any project:

# Add PWA during project creation
0x1 new my-app --pwa --theme="royal-purple"

# Add PWA to existing project
0x1 pwa

PWA Features

  • Auto-generated assets: Icons, splash screens, manifest
  • Offline support: Service worker with intelligent caching
  • Install prompts: Native app-like experience
  • Theme support: Dark/light modes for your PWA
  • Push notifications: Ready infrastructure

PWA Configuration Options

# Full customization
0x1 pwa --name "My App" \
         --shortName "App" \
         --themeColor "#0077cc" \
         --backgroundColor "#ffffff" \
         --description "My awesome PWA application" \
         --icons \
         --offline \
         --skipPrompts

๐Ÿ”ง CLI Commands

CommandDescription
0x1 new <name>Create a new 0x1 project
0x1 devStart development server with hot reload
0x1 buildCreate optimized production build
0x1 previewPreview production build locally
0x1 deployDeploy to production (Vercel, Netlify)
0x1 pwaAdd Progressive Web App functionality
0x1 generate component <name>Generate a component
0x1 generate page <name>Generate a page

Development Options

# Start with custom port
0x1 dev --port=8080

# Enable debug logging
0x1 dev --debug

# Skip Tailwind processing
0x1 dev --skip-tailwind

Template Options

# Create with specific template
0x1 new my-app --complexity=minimal    # Basic structure
0x1 new my-app --complexity=standard   # Complete project structure
0x1 new my-app --complexity=full       # Everything + PWA + advanced features

# With theme and PWA
0x1 new my-app --theme="royal-purple" --pwa

๐Ÿš€ Deployment

0x1 projects are optimized for modern hosting platforms:

# Deploy to Vercel (recommended)
0x1 deploy --provider=vercel

# Deploy to Netlify
0x1 deploy --provider=netlify

# Custom deployment
0x1 build
# Then deploy the 'dist' directory

The framework is specially optimized for:

  • Vercel Edge Runtime - Maximum performance at the edge
  • Netlify Edge Functions - Fast global deployment
  • Cloudflare Workers - Ultra-low latency worldwide
  • Static hosting - Works with any static host

๐Ÿ“Š Performance Comparison

Metric0x1ReactNext.jsVueSvelte
Bundle Size (gzipped)5KB44KB80KB+31KB4-21KB
Time to Interactive0.3s1.1s1.5s+0.7s0.6s
Memory UsageLowHighHighMediumLow
Lighthouse Score10075-8570-8585-9590-95
Cold Start Time<100ms300ms+500ms+200ms+150ms+

๐Ÿ”ฎ Roadmap

Current State (v0.0.360)

  • โœ… Full React Hooks API compatibility
  • โœ… "use server" & "use client" directives
  • โœ… Next.js-compatible Link component
  • โœ… App directory structure support
  • โœ… Tailwind CSS v4 integration
  • โœ… PWA support with auto-generated assets
  • โœ… TypeScript-first development
  • โœ… Bun-optimized build system
  • โœ… SSE + WebSocket live reload
  • โœ… Zero-dependency architecture
  • โœ… Simplified, reliable hooks implementation
  • โœ… Auto-context inference with directive validation

Upcoming Features

  • ๐Ÿ”„ Enhanced Error Boundaries: React-error-boundary & next-error-boundary compatibility
  • ๐Ÿ”„ Streaming SSR: Server-side rendering with streaming (in progress)
  • ๐Ÿ”„ Edge Runtime: Optimized edge deployment
  • ๐Ÿš€ Crypto Template: Wallet Connect, NFT viewing, DeFi dashboard components

๐Ÿ› ๏ธ Configuration

0x1 configuration is minimal and straightforward:

// 0x1.config.ts
import { _0x1Config } from '0x1';

const config: _0x1Config = {
  app: {
    name: 'my-0x1-app',
    title: 'My 0x1 App',
    description: 'Built with 0x1 framework'
  },
  server: {
    port: 3000,
    host: 'localhost',
    basePath: '/'
  },
  routes: {
    '/': './pages/home',
    '/about': './pages/about',
    '/products/:id': './pages/product'
  },
  styling: {
    tailwind: true,
    darkMode: 'class',
    customTheme: {
      colors: {
        primary: '#0077cc'
      }
    }
  },
  optimization: {
    minify: true,
    precomputeTemplates: true,
    prefetchLinks: true
  },
  deployment: {
    provider: 'vercel', // or 'netlify', 'cloudflare', etc.
    edge: true
  }
};

export default config;

๐Ÿ”ง Troubleshooting

Global CLI Installation Issues

If you encounter command not found: 0x1 after installing globally:

# Alternative way to run any 0x1 command
bunx 0x1 <command>

# Or add Bun's bin directory to your PATH:
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"

Content Not Showing in Browser

  1. Check Browser Console: Look for MIME type errors
  2. Build Process: Run bun run build before starting dev server
  3. TypeScript Compilation: The dev server automatically handles TypeScript

๐Ÿ’ฌ Community & Support


๐Ÿ‘ท Contributing

Contributions are welcome! Here's how you can help:

# Clone the repository
git clone https://github.com/Triex/0x1.git
cd 0x1

# Install dependencies
bun install

# Run tests
bun test

# Build the framework
bun run build

Please see our Contributing Guidelines for more details.


Pending Features

Actual project intent is to allow development in Next/React styles-flows-APIs that everyone is used to, but allow devs to instantly spin up what usually takes hours of work, with the added benefit of Bun's speed and zero overhead dependencies (magnitudes' faster than Next/React bolt in replacement).

Another key point is that AI's understand Next/React, and can generate code for it. So this makes 0x1 a super speed way for vibe-coders to build websites, and apps as AI advances. (Currently quite stable for basics). Pending solid website & documentation.

Ultimately; adding crypto features to give the framework a real use case, and ability to grow rapidly. (Hence 0x1)

  • Create robust tests for all features, and ensure they are working as expected. (e2e & unit)
  • Crypto template option with various crypto features as options, inc;
    • Wallet Connect, basic connect for ERC20 EVM tokens, and SOL, etc. OR allow all chains.
    • Coin dApp / Dashboard, view connected wallet coin holdings, transactions + coin price, market cap, etc as appropriate.
    • NFT, NFT viewing UI, basic NFT minting and collection features.
  • Audit / ensure stable app router functionality ("use server", "use client" tags work, page.tsx actions.ts work)
  • Functional templates
    • Minimal
    • Standard (drafted, todo)
    • Full (drafted, todo)
  • Full ErrorBoundary support, like react-error-boundary or next-error-boundary
  • Initial draft of bolt-in react hooks, with loading states, error handling, and caching.
    • Properly tested, and documented. Confirmed functional.
  • Create 0x1 Website with documentation, examples, and tutorials.
    • Add in-browser AI Component IDE Generator tool (paid LLM API)

๐Ÿ“œ License

0x1 is licensed under the TDL v1 License.


0.0.360

11 months ago

0.0.359

11 months ago

0.0.358

11 months ago

0.0.357

11 months ago

0.0.356

11 months ago

0.0.355

11 months ago

0.0.354

11 months ago

0.0.353

11 months ago

0.0.352

11 months ago

0.0.351

11 months ago

0.0.350

11 months ago

0.0.349

11 months ago

0.0.348

11 months ago

0.0.347

11 months ago

0.0.346

11 months ago

0.0.345

11 months ago

0.0.344

11 months ago

0.0.343

11 months ago

0.0.342

11 months ago

0.0.341

11 months ago

0.0.340

11 months ago

0.0.339

11 months ago

0.0.337

11 months ago

0.0.336

11 months ago

0.0.335

11 months ago

0.0.334

11 months ago

0.0.333

11 months ago

0.0.332

11 months ago

0.0.331

11 months ago

0.0.330

11 months ago

0.0.329

11 months ago

0.0.328

11 months ago

0.0.327

11 months ago

0.0.326

11 months ago

0.0.325

11 months ago

0.0.324

11 months ago

0.0.323

11 months ago

0.0.322

11 months ago

0.0.321

11 months ago

0.0.320

11 months ago

0.0.319

11 months ago

0.0.318

11 months ago

0.0.317

11 months ago

0.0.316

11 months ago

0.0.315

11 months ago

0.0.314

11 months ago

0.0.313

11 months ago

0.0.312

11 months ago

0.0.311

11 months ago

0.0.310

11 months ago

0.0.309

11 months ago

0.0.308

11 months ago

0.0.307

11 months ago

0.0.306

11 months ago

0.0.305

11 months ago

0.0.304

11 months ago

0.0.303

11 months ago

0.0.302

11 months ago

0.0.301

11 months ago

0.0.300

11 months ago

0.0.299

11 months ago

0.0.298

11 months ago

0.0.297

11 months ago

0.0.296

11 months ago

0.0.295

11 months ago

0.0.294

11 months ago

0.0.293

11 months ago

0.0.292

11 months ago

0.0.291

11 months ago

0.0.290

11 months ago

0.0.289

11 months ago

0.0.288

11 months ago

0.0.287

11 months ago

0.0.286

11 months ago

0.0.285

11 months ago

0.0.284

11 months ago

0.0.283

11 months ago

0.0.282

11 months ago

0.0.281

11 months ago

0.0.280

11 months ago

0.0.279

11 months ago

0.0.278

11 months ago

0.0.277

11 months ago

0.0.276

11 months ago

0.0.275

11 months ago

0.0.274

11 months ago

0.0.273

11 months ago

0.0.272

11 months ago

0.0.271

11 months ago

0.0.270

11 months ago

0.0.269

11 months ago

0.0.268

11 months ago

0.0.267

11 months ago

0.0.266

11 months ago

0.0.265

11 months ago

0.0.264

11 months ago

0.0.263

11 months ago

0.0.262

11 months ago

0.0.261

11 months ago

0.0.260

11 months ago

0.0.259

11 months ago

0.0.258

11 months ago

0.0.257

11 months ago

0.0.256

11 months ago

0.0.255

11 months ago

0.0.254

11 months ago

0.0.253

11 months ago

0.0.252

11 months ago

0.0.251

11 months ago

0.0.250

11 months ago

0.0.248

11 months ago

0.0.247

11 months ago

0.0.246

11 months ago

0.0.245

11 months ago

0.0.244

11 months ago

0.0.243

11 months ago

0.0.242

11 months ago

0.0.241

11 months ago

0.0.240

11 months ago

0.0.239

11 months ago

0.0.238

11 months ago

0.0.237

11 months ago

0.0.236

11 months ago

0.0.235

11 months ago

0.0.234

11 months ago

0.0.233

11 months ago

0.0.232

11 months ago

0.0.231

11 months ago

0.0.230

11 months ago

0.0.229

11 months ago

0.0.228

11 months ago

0.0.227

11 months ago

0.0.226

11 months ago

0.0.225

11 months ago

0.0.224

11 months ago

0.0.223

11 months ago

0.0.222

11 months ago

0.0.221

11 months ago

0.0.220

11 months ago

0.0.219

11 months ago

0.0.218

11 months ago

0.0.217

11 months ago

0.0.216

11 months ago

0.0.215

11 months ago

0.0.214

11 months ago

0.0.213

11 months ago

0.0.212

11 months ago

0.0.211

11 months ago

0.0.210

11 months ago

0.0.209

11 months ago

0.0.208

11 months ago

0.0.207

11 months ago

0.0.206

11 months ago

0.0.205

11 months ago

0.0.204

11 months ago

0.0.203

11 months ago

0.0.202

11 months ago

0.0.201

11 months ago

0.0.200

11 months ago

0.0.199

11 months ago

0.0.198

11 months ago

0.0.197

11 months ago

0.0.196

11 months ago

0.0.195

11 months ago

0.0.194

11 months ago

0.0.193

11 months ago

0.0.192

11 months ago

0.0.191

11 months ago

0.0.190

11 months ago

0.0.189

11 months ago

0.0.188

11 months ago

0.0.187

11 months ago

0.0.186

11 months ago

0.0.185

11 months ago

0.0.184

11 months ago

0.0.183

11 months ago

0.0.182

11 months ago

0.0.181

11 months ago

0.0.180

11 months ago

0.0.179

11 months ago

0.0.178

11 months ago

0.0.177

11 months ago

0.0.176

11 months ago

0.0.175

11 months ago

0.0.174

11 months ago

0.0.173

11 months ago

0.0.172

11 months ago

0.0.171

11 months ago

0.0.170

11 months ago

0.0.169

11 months ago

0.0.168

11 months ago

0.0.165

12 months ago

0.0.164

12 months ago

0.0.163

12 months ago

0.0.162

12 months ago

0.0.161

12 months ago

0.0.160

12 months ago

0.0.159

12 months ago

0.0.157

12 months ago

0.0.156

12 months ago

0.0.155

12 months ago

0.0.154

12 months ago

0.0.153

12 months ago

0.0.152

12 months ago

0.0.151

12 months ago

0.0.150

12 months ago

0.0.149

12 months ago

0.0.147

12 months ago

0.0.146

12 months ago

0.0.145

12 months ago

0.0.144

12 months ago

0.0.143

12 months ago

0.0.142

12 months ago

0.0.141

12 months ago

0.0.140

12 months ago

0.0.138

12 months ago

0.0.137

12 months ago

0.0.136

12 months ago

0.0.135

12 months ago

0.0.134

12 months ago

0.0.133

12 months ago

0.0.132

12 months ago

0.0.131

12 months ago

0.0.130

12 months ago

0.0.129

12 months ago

0.0.128

12 months ago

0.0.127

12 months ago

0.0.126

12 months ago

0.0.125

12 months ago

0.0.124

12 months ago

0.0.123

12 months ago

0.0.122

12 months ago

0.0.121

12 months ago

0.0.120

12 months ago

0.0.119

12 months ago

0.0.118

12 months ago

0.0.117

12 months ago

0.0.116

12 months ago

0.0.115

12 months ago

0.0.114

12 months ago

0.0.113

12 months ago

0.0.112

12 months ago

0.0.111

12 months ago

0.0.110

12 months ago

0.0.109

12 months ago

0.0.108

12 months ago

0.0.107

12 months ago

0.0.106

12 months ago

0.0.105

12 months ago

0.0.104

12 months ago

0.0.103

12 months ago

0.0.102

12 months ago

0.0.101

12 months ago

0.0.100

12 months ago

0.0.99

12 months ago

0.0.98

12 months ago

0.0.97

12 months ago

0.0.96

12 months ago

0.0.95

12 months ago

0.0.94

12 months ago

0.0.93

12 months ago

0.0.92

12 months ago

0.0.91

12 months ago

0.0.90

12 months ago

0.0.89

12 months ago

0.0.88

12 months ago

0.0.87

12 months ago

0.0.86

12 months ago

0.0.85

12 months ago

0.0.84

12 months ago

0.0.83

12 months ago

0.0.82

12 months ago

0.0.81

12 months ago

0.0.80

12 months ago

0.0.79

12 months ago

0.0.78

12 months ago

0.0.77

12 months ago

0.0.76

12 months ago

0.0.74

12 months ago

0.0.72

12 months ago

0.0.71

12 months ago

0.0.70

12 months ago

0.0.69

12 months ago

0.0.68

12 months ago

0.0.67

12 months ago

0.0.66

12 months ago

0.0.65

12 months ago

0.0.64

12 months ago

0.0.63

12 months ago

0.0.62

12 months ago

0.0.61

12 months ago

0.0.60

12 months ago

0.0.59

12 months ago

0.0.58

12 months ago

0.0.57

12 months ago

0.0.56

12 months ago

0.0.55

12 months ago

0.0.54

12 months ago

0.0.50

12 months ago

0.0.49

12 months ago

0.0.48

12 months ago

0.0.47

12 months ago

0.0.46

12 months ago

0.0.45

12 months ago

0.0.44

12 months ago

0.0.43

12 months ago

0.0.42

12 months ago

0.0.41

12 months ago

0.0.40

12 months ago

0.0.39

12 months ago

0.0.38

12 months ago

0.0.36

12 months ago

0.0.35

12 months ago

0.0.34

12 months ago

0.0.33

12 months ago

0.0.32

12 months ago

0.0.31

12 months ago

0.0.30

12 months ago

0.0.29

12 months ago

0.0.27

12 months ago

0.0.26

12 months ago

0.0.25

12 months ago

0.0.24

12 months ago

0.0.22

12 months ago

0.0.21

12 months ago

0.0.20

12 months ago

0.0.19

12 months ago

0.0.18

12 months ago

0.0.17

12 months ago

0.0.16

12 months ago

0.0.15

12 months ago

0.0.14

12 months ago

0.0.13

12 months ago

0.0.12

12 months ago

0.0.11

12 months ago

0.0.10

12 months ago

0.0.9

12 months ago

0.0.8

12 months ago

0.0.7

12 months ago

0.0.6

12 months ago

0.0.4

12 months ago

0.0.3

12 months ago

0.0.1

12 months ago

0.0.0

12 months ago