A browser-based parametric design studio built with React, TypeScript, and WebAssembly for instant, high-performance 3D modeling and lighting design.
Minimystx is a sophisticated browser-only parametric design studio that combines React and TypeScript with WebAssembly for high-performance 3D operations. It features a professional node-based editing system similar to Houdini/Grasshopper with a split interface showing both the node editor and real-time 3D viewport simultaneously. The application includes advanced features like hierarchical subflow systems, comprehensive lighting tools, scene serialization, and performance-optimized computation with intelligent caching.
![]() |
![]() |
|---|
- Instant entry with minimal landing page and client-side navigation
- Split workspace with Three.js 3D viewport and React Flow node editor
- Node-based parametric design with real-time 3D feedback
- Hierarchical subflow system for complex project organization
- Comprehensive lighting design with 6 light types
- Professional keyboard navigation and shortcuts
- Persistent UI state and viewport management
- React 19.1.0 + TypeScript 5.2.2 frontend with Vite
- WebAssembly backend for performance-critical operations
- Three.js 0.178.0 with @react-three/fiber and @react-three/drei for hardware-accelerated 3D graphics
- @xyflow/react for interactive node-based workflows
- Zustand with Immer for reactive state management
- Cook-on-Demand computation system with intelligent caching
- Render Cone Scheduler for optimized selective updates
- Color-coded port types with context-aware node organization
- Streamlined node workflow with hover enlargement and inline controls
- Advanced node palette with fuzzy search and keyboard navigation
- Professional interaction patterns (space+drag, multi-view camera system)
- Responsive visual feedback with magnetized connections and hover highlights
- Export: MXSCENE format (custom ZIP-based project files with asset embedding)
- Import: OBJ and glTF/GLB geometry files
- Asset Management: OPFS-based caching with SHA256 integrity verification
- GeoNode - Hierarchical container for subflow organization and geometry output
- Box - Parametric box/cube geometry with width, height, depth controls
- Sphere - Parametric sphere geometry with radius and segment controls
- Cylinder - Parametric cylinder geometry with radius, height, and segment controls
- Cone - Parametric cone geometry with radius, height, and segment controls
- Plane - Parametric plane geometry with width, height, and subdivision controls
- Torus - Parametric torus (donut) geometry with major/minor radius controls
- TorusKnot - Parametric torus knot geometry with advanced mathematical parameters
- Point Light - Omnidirectional point light source with color and intensity
- Ambient Light - Global ambient lighting for scene illumination
- Directional Light - Directional lighting (sun-like) with shadow support
- Spot Light - Focused spot lighting with cone angle and penumbra controls
- Hemisphere Light - Ambient hemisphere lighting with sky/ground colors
- Rect Area Light - Rectangular area light source for architectural lighting
- Import OBJ - Import OBJ file format geometry with material support
- Import glTF - Import glTF/GLB files with full scene, animation, and material support
- Transform - Apply translation, rotation, and scale transformations to geometry
- Note - Add text annotations and documentation to node graphs
G- Toggle grid visibilityM- Toggle minimap visibilityC- Toggle flow controls visibilityS- Cycle through connection line styles (bezier, straight, step, simpleBezier)F- Fit nodes to viewShift+F- Fit nodes (alternative)L- Auto-layout cycleShift+L- Auto-layout (force all nodes)Delete/Backspace- Delete selected edges
G- Toggle grid visibilityW- Toggle wireframe modeX- Toggle x-ray modeF- Set front orthographic viewT- Set top orthographic viewL- Set left orthographic viewR- Set right orthographic viewB- Set bottom orthographic viewShift+F- Fit view to geometryP- Switch to perspective cameraO- Switch to orthographic cameraA- Toggle axis gizmo visibility
- Space+drag - Pan the canvas
- Mouse wheel - Zoom in/out
- Node.js (version 18 or higher recommended)
- Rust and Cargo (for WebAssembly compilation)
- wasm-pack (for building WebAssembly modules)
- Modern browser with WebGL support
-
Clone the repository:
git clone https://github.com/marko-koljancic/minimystx.git cd minimystx -
Install dependencies:
npm install
-
Build the WebAssembly core:
npm run build-core
-
Start the development server:
npm run dev
To build the complete project for production:
npm run build-allThis will:
- Build the WebAssembly components with
build-core - Compile TypeScript files and bundle the application with Vite using
build
You can also run these steps separately:
npm run build-core # Build WebAssembly components only
npm run build # Build TypeScript and bundle with Vite onlyMinimystx implements a reactive computation graph architecture with advanced performance optimizations:
- Cook-on-Demand System - Intelligent computation scheduling that only processes changed nodes
- Content Cache - LRU caching system with dependency tracking and validity hashing
- Render Cone Scheduler - Optimized rendering pipeline that selectively updates only visible geometry
- Subflow Manager - Hierarchical node graph system enabling complex project organization
- Node Registry - Central registry managing all node types with compute functions and metadata
- Graph Store - Zustand-based reactive state management with Immer for immutable updates
- Computation Engine - Topological sorting with cycle detection for efficient graph evaluation
- Scene Serialization - Complete project state persistence with the custom MXSCENE format
- Intelligent Caching - Content-aware caching with automatic invalidation on parameter changes
- Selective Rendering - Render cone optimization processes only nodes affecting final output
- Asset Management - OPFS-based browser storage with SHA256 integrity verification
- Memory Management - LRU eviction and dependency-aware cache pruning
minimystx/
├── src/
│ ├── App.tsx # Main application component
│ ├── main.tsx # Application entry point
│ ├── assets/ # Asset files (models, IFC samples)
│ ├── common/ # Shared UI components and design system
│ ├── components/ # Reusable React components
│ ├── engine/ # Core computation and graph engine
│ │ ├── cache/ # Content caching system
│ │ ├── compute/ # Cook-on-demand computation
│ │ ├── containers/ # Data container abstractions
│ │ ├── graph/ # Graph processing and adapters
│ │ ├── nodes/ # Node builder and management
│ │ ├── scheduler/ # Render cone scheduler
│ │ ├── subflow/ # Hierarchical subflow system
│ │ ├── types/ # Core type definitions
│ │ ├── computeEngine.ts # Main computation orchestration
│ │ ├── graphStore.ts # Reactive graph state management
│ │ ├── nodeRegistry.ts # Node type registry and search
│ │ └── parameterUtils.ts # Parameter validation utilities
│ ├── flow/ # Node-based visual editor
│ │ ├── edges/ # Connection components
│ │ └── nodes/ # Node UI and computation definitions
│ ├── hooks/ # Custom React hooks
│ ├── io/ # File I/O and scene management
│ │ └── mxscene/ # MXSCENE format implementation
│ ├── pages/ # Page components and routing
│ ├── panels/ # UI panels and interface components
│ ├── rendering/ # 3D rendering and Three.js integration
│ ├── store/ # UI state management
│ ├── styles/ # CSS and design system
│ ├── utils/ # Utility functions
│ └── wasm/ # WebAssembly integration
│ ├── src/ # Rust source code
│ └── pkg/ # Compiled WebAssembly modules
├── public/ # Static assets
└── docs/ # Architecture and API documentation
npm run dev- Start development servernpm run build- Build TypeScript and bundle with Vitenpm run build-core- Build WebAssembly componentsnpm run build-all- Build both WebAssembly components and TypeScript bundlenpm run lint- Run ESLintnpm run preview- Preview production build
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add some amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request

