Build Aseprite from source for Windows, Linux, and macOS using GitHub Actions — no manual compilation, no shady binaries, no EULA violations.
An automated GitHub Actions workflow that compiles Aseprite from its official source code on demand. You pick a version (or just say latest), trigger the workflow, and minutes later you have a fresh build as a draft release in your repo.
Why use it?
- 🔒 Safe — compiled directly from the official aseprite/aseprite source on GitHub runners
- 📦 EULA-friendly — binaries are published as draft releases (only visible to the repo owner), not as public artifacts
- 🎯 Version-pinned — build any released tag (
v1.3.7,v1.3.14.2, etc.) or grab the latest one automatically - ⚡ Cached — Skia dependencies are cached per-OS for faster subsequent builds
git clone https://github.com/meitrix8208/aseprite_builder.git
cd aseprite_builderEdit .github/workflows/aseprite_build_deploy.yml and adjust the os matrix to only the platforms you need:
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macOS-latest]💡 Skip this if you want all three. See build times for the cost breakdown.
You have two options:
Option A — Manual dispatch (recommended):
- Go to the Actions tab on your fork
- Select Build and deploy Aseprite new version
- Click Run workflow
- Enter a version tag (e.g.
v1.3.7) or leave it aslatest - Hit Run workflow
Option B — Push to master: any push to the master branch triggers a build of the latest Aseprite release.
Once the workflow finishes, a draft release appears in your repo's Releases tab containing the .zip package for each OS you built. Only you (the repo owner) can see it.
The workflow is split into three jobs that run in sequence:
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ prepare-build │ ──▶ │ build-aseprite │ ──▶ │ create-release │
│ (Ubuntu) │ │ (matrix: 3 OS) │ │ (Ubuntu) │
└──────────────────┘ └──────────────────┘ └──────────────────┘
Resolves which Aseprite version to build and extracts its metadata.
- Reads the
aseprite_versioninput (defaults tolatest) - Queries the GitHub API for either the latest release or the specified tag
- Extracts the source zip URL and the release notes
- Fails early if the requested tag doesn't exist
- Exposes
selected_tag,selected_download_url, andversion_infoas outputs for downstream jobs
Runs in parallel across the OS matrix (fail-fast: false, so one platform's failure doesn't kill the others).
- Install OS-specific dependencies
- Windows: Ninja (via
gha-setup-ninja), and strips the preinstalled OpenSSL fromPATHto avoid conflicts - Ubuntu:
g++,clang,cmake,ninja-build, and X11/GL/fontconfig dev libraries - macOS:
ninjaandp7zipvia Homebrew
- Windows: Ninja (via
- Restore Skia from cache (key:
skia-<os>-m124-cache) - Download Skia (release
m124-08a5439a6bfromaseprite/skia) if the cache missed - Download and unzip the Aseprite source using the URL resolved in job 1
- Configure the Visual Studio environment (Windows only, via
gha-setup-vsdevenv, x64) - Run CMake with
-G Ninja,LAF_BACKEND=skia, and the cached Skia paths- macOS pins
x86_64with deployment target10.9against the Xcode SDK - Windows ignores Chocolatey/Strawberry Perl paths to avoid picking up stray toolchains
- macOS pins
- Build with
ninja aseprite - Clean up generator binaries (
gen,modp_b64_gen, and their.exevariants) - Make it portable on Windows by dropping an empty
aseprite.ininext to the binary - Package the
bin/directory asAseprite-<tag>-<OS>.zipusing 7-Zip - Upload the zip as a GitHub artifact (30-day retention)
Runs only if prepare-build succeeded (builds can partially fail and you'll still get releases for the successful ones).
- Downloads all build artifacts
- Creates a draft release tagged with the Aseprite version, containing:
- All
Aseprite-*.zippackages - The original Aseprite release notes as the body
- All
- Uses
allowUpdates: true, so re-running for the same tag updates the existing draft instead of failing
| Setting | Value | Where |
|---|---|---|
| Build type | Release |
env.BUILD_TYPE |
| Skia version | m124-08a5439a6b |
Skia download step |
| LAF backend | skia |
CMake flag |
| Windows arch | x64 |
VsDevCmd.bat -arch=x64 |
| macOS arch | x86_64 |
CMAKE_OSX_ARCHITECTURES |
| macOS min target | 10.9 |
CMAKE_OSX_DEPLOYMENT_TARGET |
| Artifact retention | 30 days | upload-artifact |
| Release visibility | Draft | ncipollo/release-action |
GitHub gives you 2,000 free Actions minutes per month on public repos with private forks. Each OS burns minutes at a different rate:
| Operating System | Real minutes | Multiplier | Billed minutes |
|---|---|---|---|
| 🐧 Ubuntu | ~10 | ×1 | 10 |
| 🪟 Windows | ~20 | ×2 | 40 |
| 🍎 macOS | ~8 | ×10 | 80 |
| Total (all 3) | 130 |
⚠️ A full three-OS build costs ~130 billed minutes. If you only need one platform, trim the matrix and you'll get ~15× more builds out of the same quota. See the GitHub Actions billing docs for details.
aseprite_builder/
├── .github/
│ └── workflows/
│ └── aseprite_build_deploy.yml # The entire build pipeline
├── LICENSE # MIT
└── README.md
This workflow compiles Aseprite from source, which is perfectly legal thanks to its open source code — but Aseprite is an amazing tool made by people who deserve your support. If you use it regularly, please buy a license:
MIT — see LICENSE.