Skip to content

Hexeption/FastPack

Repository files navigation

FastPack

crates.io CI rustc 1.85+

Texture atlas packer written in Rust. Ships as a Tauri desktop app and a headless CLI. Designed as an open-source replacement for TexturePacker.

Screenshot 2026-03-07 at 12 47 08 pm

Features

Packing

  • MaxRects (5 heuristics), Grid, and Basic strip algorithms
  • Trim modes: None, Trim, Crop, CropKeepPos, Polygon (convex hull)
  • Extrusion, rotation, nine-patch metadata, pivot points
  • Alias detection — deduplicates pixel-identical sprites
  • Multipack — overflow sprites across multiple sheets
  • Multi-resolution scale variants with per-variant suffix

Export

  • Data formats: JSON Hash, JSON Array, Phaser 3, PixiJS
  • Texture formats: PNG (oxipng lossless), JPEG (mozjpeg), WebP, DXT1 (BC1), DXT5 (BC3)
  • Pixel formats: RGBA8888, RGB888, RGB565, RGBA4444, RGBA5551, Alpha8

Desktop app

  • Real-time atlas preview
  • Collapsible sprite tree with thumbnail previews
  • Watch mode — repacks on file change
  • .fpsheet project files (TOML)
  • Nine-patch and pivot editors per sprite
  • Drag-and-drop folders and project files
  • Multi-language UI

Install

Download the desktop app for your platform from the releases page:

  • Windowsfastpack-windows-x86_64-setup.exe
  • macOS (Apple Silicon)fastpack-macos-aarch64.dmg
  • macOS (Intel)fastpack-macos-x86_64.dmg
  • Linuxfastpack-linux-x86_64.AppImage

Or install the CLI from crates.io:

cargo install fastpack

CLI Usage

# Pack a directory of sprites
fastpack pack sprites/ --output output/

# Pack with options
fastpack pack sprites/ --output output/ \
  --max-width 2048 --max-height 2048 \
  --trim-mode trim \
  --data-format phaser3 \
  --allow-rotation \
  --multipack

# Load settings from a project file
fastpack pack --project atlas.fpsheet

# Watch for changes and repack automatically
fastpack watch sprites/ --output output/

# Split an atlas back into individual sprites
fastpack split atlas.png atlas.json --output-dir sprites/

# Generate a default project file
fastpack init --output atlas.fpsheet

Run fastpack <subcommand> --help for the full flag list.

Project File

Settings live in a .fpsheet TOML file:

[meta]
version = "1"

[output]
name = "atlas"
directory = "output/"
texture_format = "png"
pixel_format = "rgba8888"
data_format = "json_hash"
quality = 95

[layout]
max_width = 4096
max_height = 4096
size_constraint = "pot"
force_square = false
allow_rotation = true
pack_mode = "good"
border_padding = 2
shape_padding = 2

[sprites]
trim_mode = "trim"
trim_threshold = 1
extrude = 0
detect_aliases = true

[algorithm]
type = "max_rects"
heuristic = "best_short_side_fit"

[[variants]]
scale = 1.0
suffix = "@1x"
mode = "smooth"

[[sources]]
path = "sprites/"
filter = "**/*.png"

Export Formats

data_format in the project file or --data-format on the CLI accepts:

  • json_hash — TexturePacker-compatible JSON with frames as an object keyed by sprite ID. Default.
  • json_array — Same structure but frames as an array, each entry with a filename field.
  • phaser3 — Single JSON file with a textures array. Compatible with scene.load.multiatlas().
  • pixijs — JSON Hash format compatible with PixiJS sprite sheet loaders.

Building from Source

Requires Rust 1.85+.

CLI only:

git clone https://github.com/Hexeption/FastPack
cd FastPack
cargo build --release -p fastpack

The binary is at target/release/fastpack.

Desktop app:

The Tauri app also requires Node.js and pnpm. From the crates/fastpack-tauri directory:

pnpm install
pnpm tauri build

The installer is placed under src-tauri/target/release/bundle/.

License

Licensed under MIT.

About

Texture atlas packer written in Rust. Open-source replacement for TexturePacker.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages