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

nine-slice

v1.0.4

Published

A visual tool for creating scalable UI components from pixel art using [9-slice scaling](https://en.wikipedia.org/wiki/9-slice_scaling).

Readme

9-Slice Spritesheet Builder

A visual tool for creating scalable UI components from pixel art using 9-slice scaling.

What is 9-Slice Scaling?

9-slice scaling (also called 9-patch) is a brilliant technique that lets you resize images—especially UI elements like buttons, panels, and windows—without distorting the corners and edges. It's a lifesaver for pixel artists and UI designers!

How It Works

Imagine slicing a button image like a tic-tac-toe board into 9 pieces:

┌───┬─────────┬───┐
│ 1 │    2    │ 3 │  ← Top (corners stay fixed)
├───┼─────────┼───┤
│ 4 │    5    │ 6 │  ← Middle (stretches/tiles)
├───┼─────────┼───┤
│ 7 │    8    │ 9 │  ← Bottom (corners stay fixed)
└───┴─────────┴───┘

When you resize:

  • Corners (1,3,7,9): Stay exactly the same - no stretching!
  • Edges (2,4,6,8): Stretch or tile in one direction
  • Center (5): Stretches in both directions

This means your beautiful pixel-perfect corners and borders stay crisp no matter how big or small you make the element. Perfect for retro games, pixel art UIs, and any interface where you want that handcrafted look at any size!

Why This Tool is Brilliant

Manually creating 9-slice assets is tedious:

  1. You'd need to carefully measure slice positions
  2. Calculate border widths by hand
  3. Write CSS for each UI element
  4. Extract individual images from spritesheets
  5. Hope you didn't make any math errors!

This tool does all of that automatically with a visual interface. Just draw boxes on your image and get ready-to-use CSS, spritesheets, and coordinate data. It saves hours of work!

Features

  • Visual Editor: Draw boxes directly on your source image to define 9-slice regions
  • Pan & Zoom: Navigate large images easily with the built-in panner-zoomer
  • Multiple Widgets: Extract several UI elements from one source image
  • Auto-Generated CSS: Get ready-to-use border-image CSS for each widget
  • Spritesheet Export: Combine all widgets into one optimized spritesheet
  • Shell Script: Auto-generate ImageMagick commands to split sprites
  • JSON Export: Save widget positions for reuse or programmatic access
  • Pixel-Perfect: Designed for pixel art with no interpolation/smoothing

Quick Start

Installation

npm install nine-slice

Or clone and open index.html in a browser:

git clone https://github.com/catpea/nine-slice.git
cd nine-slice
npm install
open index.html

Basic Usage

  1. Load Your Image

    • Click "🖼️ Load Image" to upload your pixel art or UI mockup
    • Or replace example.png with your own image
  2. Create Selection Boxes

    • Click "➕ Add Widget" to create a selection
    • Red box: The area to extract from your source image
    • Blue box: The "safe zone" that can stretch (defines slice borders)
  3. Position Your Slices

    • Drag red box: Move the entire selection
    • Drag blue box: Reposition the stretchable area
    • Resize red: Change what gets extracted
    • Resize blue: Adjust the 9-slice borders
  4. Generate Output

    • Click "🎯 Generate Spritesheet" to process all widgets
    • Review the generated CSS in the output panel
  5. Export Everything

    • 💾 Spritesheet (PNG): Combined sprite image
    • 📄 Stylesheet (CSS): Ready-to-use CSS classes
    • 🔧 Shell Script (SH): ImageMagick commands to split the spritesheet
    • 📋 Coordinates (JSON): Widget positions and slice data

Example Output

The tool generates CSS like this:

/* Widget 1: w1 */
.ui-widget-1 {
  border-width: 8px 8px 8px 8px;
  border-style: solid;
  border-color: transparent;
  border-image-source: url('ui-widget-1.png');
  border-image-slice: 8 8 8 8;
  border-image-repeat: round;
}

Use it on any <div>:

<div class="ui-widget-1" style="width: 200px; height: 100px;">
  Button content here!
</div>

The corners stay crisp, edges tile perfectly, and you can make it any size you want!

Use Cases

Pixel Art Games

Create retro game UIs with dialog boxes, health bars, and inventory panels that scale to any resolution while keeping that authentic pixel look.

Responsive Web Design

Build unique, branded UI components (buttons, panels, tooltips) that resize gracefully without complex CSS or SVG.

Design Systems

Maintain consistent, scalable UI elements across your app without needing separate assets for every possible size.

Rapid Prototyping

Sketch your UI in any image editor, then instantly convert it to working HTML/CSS components.

Tips for Best Results

  1. Start with pixel art: 9-slice works best with crisp, non-anti-aliased images
  2. Keep borders consistent: Make sure your decorative borders are the same width all around
  3. Test the blue box: The area inside the blue box should be tile-able or stretchable
  4. Save your widgets: Use "💾 Save Widgets" to preserve your selections for later editing
  5. Use the shell script: Run bash spritesheet.sh cut to automatically split your spritesheet into individual images

Keyboard Shortcuts

  • Delete/Backspace: Remove the selected widget (click a red box to select it)

Technical Details

  • Built with vanilla JavaScript (ES6 modules)
  • Uses HTML5 Canvas for pixel-perfect rendering
  • Leverages CSS border-image for 9-slice scaling
  • Zero image smoothing for pristine pixel art
  • Integrates panner-zoomer for navigation

Browser Support

Works in all modern browsers that support:

  • ES6 modules
  • Custom elements
  • Canvas API with imageSmoothingEnabled

Contributing

Found a bug? Have a feature idea? Contributions are welcome!

  • Report issues: https://github.com/catpea/nine-slice/issues
  • Submit pull requests
  • Share your creations!

License

MIT License - See LICENSE file for details

Author

catpea - GitHub | Sponsor

Acknowledgments

  • Inspired by Unity's 9-slice sprite editor and Android's 9-patch tool
  • Thanks to the pixel art community for keeping retro aesthetics alive!
  • Built with love for developers who appreciate tools that just work

Save yourself hours of tedious work. Try it now at https://catpea.github.io/nine-slice

Happy slicing! ✂️