A React-powered pixel art tool that lets you paint on a customizable grid (16Γ16, 32Γ32, 64Γ64, or 128Γ128) with the full RGB color spectrum.
Built with React, GridCraft demonstrates how modern component-based architecture can create interactive, stateful applications without complexity. It's a lightweight, accessible alternative to heavy art software that showcases clean React patterns and efficient state management.
- Multiple Grid Sizes - Draw on a 16Γ16, 32Γ32, 64Γ64, or 128Γ128 canvas depending on your project
- Full RGB Color Support - Choose any color using an intuitive RGB color picker
- Export as PNG - Download your creations to save and share
- Right-Click to Draw - Intuitive drawing mechanism using right mouse button
- Color Selection - Easily select and switch between different colors
- Undo/Redo - Never lose your work with full undo/redo support
- Erase Mode - Quickly correct mistakes with the eraser tool
- Clear Canvas - Start fresh with a single click
- Real-time Updates - See your changes instantly as you draw
Shortcuts work while the drawing grid is visible:
| Action | Shortcut |
|---|---|
| Undo | Ctrl + Z |
| Redo | Ctrl + Y |
| Paint brush | A |
| Fill enclosed cells | B |
| Fill transparent cells | C |
| Clear canvas | D |
| Eraser | E |
Experience GridCraft here: GridCraft Live
Need step-by-step usage instructions? Read the GridCraft Manual.
rohan-shridhar-gridcraft/
βββ README.md # Project overview and usage documentation
βββ CODE_OF_CONDUCT.md # Community code of conduct
βββ CONTRIBUTING.md # Contribution guidelines
βββ google53f3f4f7aefc7ea4.html # Verification file for Google indexing
βββ index.html # Main HTML entry point for the app
βββ LICENSE # MIT license details
βββ Manual.md # Step-by-step user guide
βββ package.json # Project scripts and dependencies
βββ vercel.json # Vercel deployment configuration
βββ vite.config.js # Vite configuration for local dev/build
βββ public/ # Static public assets
β βββ fonts/ # Custom font files
β βββ Minecraft.otf # Game-like font used in the UI
βββ src/ # Application source code
β βββ App.jsx # Main app state management and UI composition
β βββ Contributors.jsx # Contributors section component
β βββ ErrorPage.jsx # Error page fallback component
β βββ Footer.jsx # Footer content and links
β βββ Grid.jsx # Pixel grid rendering and drawing logic
β βββ Header.jsx # Header/navigation component
β βββ index.css # Global styles and layout
β βββ main.jsx # React app entry point
β βββ Menu.jsx # Toolbar/menu controls
β βββ toastMessages.js # Toast notifications for user feedback
β βββ Tools.jsx # Drawing tools and controls
βββ .github/ # GitHub project metadata
βββ ISSUE_TEMPLATE/ # Issue templates for bug reports and features
βββ bug_report.md # Bug report issue template
βββ feature_request.md # Feature request issue template- React 18 (CDN) - Loaded via unpkg, no build step required
- In-Browser JSX Transpilation - Babel Standalone converts JSX syntax to JavaScript at runtime
- Component Architecture - Modular design with seven specialized components:
App.jsx- Root component managing core state and download logicGrid.jsx- Renders the drawing grid (16Γ16 up to 128Γ128) and handles cell paintingTools.jsx- Drawing tools (color picker, eraser, undo/redo, clear)Menu.jsx- Download button and high-level controlsHeader.jsx&Footer.jsx- Layout componentsmain.jsx- React entry point withcreateRoot
- State Management - React hooks for grid state, color selection, and undo/redo history
- PNG Export System - Multi-step process for high-quality exports:
- Temporarily removes grid borders and gaps for clean output
- Uses html2canvas with
scale: 8for high-resolution captures - Maintains transparent background with
backgroundColor: null - Restores original styling after capture
- Triggers download via dynamically created anchor tag
- Undo/Redo System - History tracking with
past,present,futurestate pattern - Event Handling - Mouse event listeners for right-click drawing
- Props Communication - Download function passed from App to Menu (
<Menu downloadImage={downloadImage} />)
Checkout CONTRIBUTING.md for instructions.
Thanks to these amazing people who contributed β€οΈ
- Keep pull requests focused on a single feature or fix
- Test your changes locally before submitting
- Update documentation if your changes affect usage
- Be respectful and constructive in discussions
- If adding a new feature, consider adding a brief explanation of why it's useful
This project is licensed under the MIT License - see the LICENSE file for details.


