diff --git a/.env.local.example b/.env.local.example index 75dc6216..1120c3be 100644 --- a/.env.local.example +++ b/.env.local.example @@ -10,6 +10,6 @@ # --team-id \ # --password -export PIXI_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" -export PIXI_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" -export PIXI_MACOS_NOTARY_PROFILE="your-profile-name" +export FIZZY_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" +export FIZZY_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" +export FIZZY_MACOS_NOTARY_PROFILE="your-profile-name" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d2472eab..94440d83 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,14 +17,14 @@ name: Release # # Signing (optional — falls back to unsigned macOS builds when secrets aren't set): # Required secrets to enable macOS signing + notarization in CI: -# PIXI_MACOS_CERT_P12_BASE64 - base64-encoded .p12 with Developer ID Application +# FIZZY_MACOS_CERT_P12_BASE64 - base64-encoded .p12 with Developer ID Application # AND Developer ID Installer certs (combined) -# PIXI_MACOS_CERT_PASSWORD - the password for that .p12 -# PIXI_MACOS_SIGN_APP - "Developer ID Application: NAME (TEAMID)" -# PIXI_MACOS_SIGN_INSTALLER - "Developer ID Installer: NAME (TEAMID)" -# PIXI_APPLE_ID - Apple ID email used for notarization -# PIXI_APPLE_APP_PASSWORD - app-specific password (appleid.apple.com) -# PIXI_APPLE_TEAM_ID - 10-char team ID +# FIZZY_MACOS_CERT_PASSWORD - the password for that .p12 +# FIZZY_MACOS_SIGN_APP - "Developer ID Application: NAME (TEAMID)" +# FIZZY_MACOS_SIGN_INSTALLER - "Developer ID Installer: NAME (TEAMID)" +# FIZZY_APPLE_ID - Apple ID email used for notarization +# FIZZY_APPLE_APP_PASSWORD - app-specific password (appleid.apple.com) +# FIZZY_APPLE_TEAM_ID - 10-char team ID # # GITHUB_TOKEN is provided automatically by Actions; the job sets GH_TOKEN so # `gh` in scripts/release.sh is authenticated without a separate login step. @@ -51,9 +51,9 @@ env: jobs: release: runs-on: macos-latest - # Secrets for signing/notarization live in Settings → Environments → pixi_release + # Secrets for signing/notarization live in Settings → Environments → fizzy_release # (repository-level Actions secrets work too if you prefer). - environment: pixi_release + environment: fizzy_release permissions: contents: write # required for `gh release create` @@ -142,7 +142,7 @@ jobs: # ----- macOS signing setup (optional) ------------------------------ # If the cert secrets are configured, import them into a temporary # keychain that lives only for this job. If not, skip — release.sh - # detects unset PIXI_MACOS_SIGN_APP and produces unsigned builds. + # detects unset FIZZY_MACOS_SIGN_APP and produces unsigned builds. # # Why the indirection via `signing_config` outputs instead of just # `if: ${{ secrets.X != '' }}`: workflow validation fails with @@ -165,41 +165,41 @@ jobs: - name: Check signing config id: signing_config env: - HAS_CERT: ${{ secrets.PIXI_MACOS_CERT_P12_BASE64 != '' }} - HAS_NOTARY: ${{ secrets.PIXI_APPLE_ID != '' }} + HAS_CERT: ${{ secrets.FIZZY_MACOS_CERT_P12_BASE64 != '' }} + HAS_NOTARY: ${{ secrets.FIZZY_APPLE_ID != '' }} run: | echo "cert=$HAS_CERT" >> "$GITHUB_OUTPUT" echo "notary=$HAS_NOTARY" >> "$GITHUB_OUTPUT" if [[ "$HAS_CERT" == "true" ]]; then echo "macOS signing: ENABLED" else - echo "macOS signing: disabled (PIXI_MACOS_CERT_P12_BASE64 not set)" + echo "macOS signing: disabled (FIZZY_MACOS_CERT_P12_BASE64 not set)" fi if [[ "$HAS_NOTARY" == "true" ]]; then echo "Notarization: ENABLED" else - echo "Notarization: disabled (PIXI_APPLE_ID not set)" + echo "Notarization: disabled (FIZZY_APPLE_ID not set)" fi - name: Import signing certificate if: steps.signing_config.outputs.cert == 'true' uses: apple-actions/import-codesign-certs@v3 with: - p12-file-base64: ${{ secrets.PIXI_MACOS_CERT_P12_BASE64 }} - p12-password: ${{ secrets.PIXI_MACOS_CERT_PASSWORD }} + p12-file-base64: ${{ secrets.FIZZY_MACOS_CERT_P12_BASE64 }} + p12-password: ${{ secrets.FIZZY_MACOS_CERT_PASSWORD }} # One-shot keychain unique to this job; torn down at job end. - keychain: pixi-release + keychain: fizzy-release create-keychain: true - name: Configure notarytool credentials if: steps.signing_config.outputs.notary == 'true' env: - APPLE_ID: ${{ secrets.PIXI_APPLE_ID }} - APPLE_APP_PASSWORD: ${{ secrets.PIXI_APPLE_APP_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.PIXI_APPLE_TEAM_ID }} + APPLE_ID: ${{ secrets.FIZZY_APPLE_ID }} + APPLE_APP_PASSWORD: ${{ secrets.FIZZY_APPLE_APP_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.FIZZY_APPLE_TEAM_ID }} run: | set -euo pipefail - xcrun notarytool store-credentials "pixi-ci-notary" \ + xcrun notarytool store-credentials "fizzy-ci-notary" \ --apple-id "$APPLE_ID" \ --password "$APPLE_APP_PASSWORD" \ --team-id "$APPLE_TEAM_ID" @@ -209,18 +209,18 @@ jobs: # `secrets.*` expression, which fails validation under # `environment:`. This way the env var only exists when the # profile was actually created, which is what release.sh expects. - echo "PIXI_MACOS_NOTARY_PROFILE=pixi-ci-notary" >> "$GITHUB_ENV" + echo "FIZZY_MACOS_NOTARY_PROFILE=fizzy-ci-notary" >> "$GITHUB_ENV" # ----- run the release --------------------------------------------- - name: Run release script env: - PIXI_MACOS_SIGN_APP: ${{ secrets.PIXI_MACOS_SIGN_APP }} - PIXI_MACOS_SIGN_INSTALLER: ${{ secrets.PIXI_MACOS_SIGN_INSTALLER }} - # PIXI_MACOS_NOTARY_PROFILE is set by the notarytool step via + FIZZY_MACOS_SIGN_APP: ${{ secrets.FIZZY_MACOS_SIGN_APP }} + FIZZY_MACOS_SIGN_INSTALLER: ${{ secrets.FIZZY_MACOS_SIGN_INSTALLER }} + # FIZZY_MACOS_NOTARY_PROFILE is set by the notarytool step via # $GITHUB_ENV when notarization is enabled, otherwise it stays # unset and release.sh skips the --notaryProfile vpk flag. # Leave the release as a draft so the operator publishes manually. - # Set PIXI_RELEASE_PUBLISH=1 here once you trust the pipeline end-to-end. - PIXI_RELEASE_PUBLISH: "0" + # Set FIZZY_RELEASE_PUBLISH=1 here once you trust the pipeline end-to-end. + FIZZY_RELEASE_PUBLISH: "0" run: ./scripts/release.sh diff --git a/.vscode/launch.json b/.vscode/launch.json index f70d9ead..44ca49c3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "name": "Debug (arm64 macOS)", "type": "lldb-mi", "request": "launch", - "target": "${workspaceFolder}/zig-out/arm64-macos/Pixi", + "target": "${workspaceFolder}/zig-out/arm64-macos/Fizzy", "cwd": "${workspaceFolder}", "valuesFormatting": "parseText" }, @@ -16,7 +16,7 @@ "name": "Debug (x86_64 macOS)", "type": "lldb-mi", "request": "launch", - "target": "${workspaceFolder}/zig-out/x86-64-macos/Pixi", + "target": "${workspaceFolder}/zig-out/x86-64-macos/Fizzy", "cwd": "${workspaceFolder}", "valuesFormatting": "parseText" } diff --git a/RELEASING.md b/RELEASING.md index f78425c4..c06e6d08 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,15 +1,15 @@ -# Releasing pixi +# Releasing fizzy -Pixi ships installers for six targets via [Velopack](https://velopack.io): +Fizzy ships installers for six targets via [Velopack](https://velopack.io): | Channel | OS | Arch | Installer | | -------------------- | ------- | ------- | ------------------------------- | -| `x86-64-linux` | Linux | x86_64 | `pixi_linux_x86_64.AppImage` | -| `arm64-linux` | Linux | arm64 | `pixi_linux_arm64.AppImage` | -| `x86-64-macos` | macOS | x86_64 | `pixi_macos_x86_64.pkg` | -| `arm64-macos` | macOS | arm64 | `pixi_macos_arm64.pkg` | -| `x86-64-windows` | Windows | x86_64 | `pixi_windows_x86_64.exe` | -| `arm64-windows` | Windows | arm64 | `pixi_windows_arm64.exe` | +| `x86-64-linux` | Linux | x86_64 | `fizzy_linux_x86_64.AppImage` | +| `arm64-linux` | Linux | arm64 | `fizzy_linux_arm64.AppImage` | +| `x86-64-macos` | macOS | x86_64 | `fizzy_macos_x86_64.pkg` | +| `arm64-macos` | macOS | arm64 | `fizzy_macos_arm64.pkg` | +| `x86-64-windows` | Windows | x86_64 | `fizzy_windows_x86_64.exe` | +| `arm64-windows` | Windows | arm64 | `fizzy_windows_arm64.exe` | Channel strings use hyphens only (no underscores): Velopack parses `--…` as a NuGet version, and NuGet disallows `_` in the @@ -26,21 +26,21 @@ asset names uploaded to releases. The `VERSION` file at the repo root is the single source of truth. `build.zig` reads it, plumbs it through `build_opts.app_version`, and passes it to `vpk pack --packVersion`. The running binary logs it at startup -(`Pixi version 0.0.3`). Override at build time with `-Dapp_version=0.0.4` +(`Fizzy version 0.0.3`). Override at build time with `-Dapp_version=0.0.4` only for one-off experiments — don't release with a mismatched VERSION file. ## How auto-update works The Velopack runtime in each binary calls the GitHub Releases API on the URL -baked in at build time (`-Drepo-url`, default `https://github.com/foxnne/pixi`). +baked in at build time (`-Drepo-url`, default `https://github.com/foxnne/fizzy`). It looks at the latest non-prerelease release for assets matching its own channel and downloads the `*--full.nupkg`. The `releases..json` manifest tells it which nupkg is current. For this to work, **three files per channel** must be present on the release: -1. The renamed installer (`pixi__.`) — what humans download. -2. `pixi---full.nupkg` — the actual update payload Velopack +1. The renamed installer (`fizzy__.`) — what humans download. +2. `fizzy---full.nupkg` — the actual update payload Velopack downloads and applies. 3. `releases..json` (or `RELEASES-` on older vpk) — the manifest that tells Velopack which nupkg version is current. @@ -81,9 +81,9 @@ If you'd rather drive the release from your Mac (uses your local Keychain for signing, no CI secrets needed): ```sh -export PIXI_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" -export PIXI_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" -export PIXI_MACOS_NOTARY_PROFILE="pixi-notary" # see one-time setup below +export FIZZY_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" +export FIZZY_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" +export FIZZY_MACOS_NOTARY_PROFILE="fizzy-notary" # see one-time setup below ./scripts/release.sh ``` @@ -94,7 +94,7 @@ the certs in your login Keychain. It's safe to run after CI has already run — the script uses `gh release upload --clobber` to overwrite existing assets on the same draft release. -Set `PIXI_RELEASE_PUBLISH=1` if you want the script to publish automatically +Set `FIZZY_RELEASE_PUBLISH=1` if you want the script to publish automatically instead of leaving it as a draft. ## One-time setup @@ -116,7 +116,7 @@ security find-identity -v -p codesigning Then create a `notarytool` profile so notarization runs without prompts: ```sh -xcrun notarytool store-credentials pixi-notary \ +xcrun notarytool store-credentials fizzy-notary \ --apple-id "you@example.com" \ --team-id "TEAMID" \ --password "" @@ -129,27 +129,27 @@ right of . Export these into your shell (e.g. in `~/.zshrc`): ```sh -export PIXI_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" -export PIXI_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" -export PIXI_MACOS_NOTARY_PROFILE="pixi-notary" +export FIZZY_MACOS_SIGN_APP="Developer ID Application: Your Name (TEAMID)" +export FIZZY_MACOS_SIGN_INSTALLER="Developer ID Installer: Your Name (TEAMID)" +export FIZZY_MACOS_NOTARY_PROFILE="fizzy-notary" ``` ### CI signing (optional) If you want CI to sign instead of you, set the following secrets (either on the repo under **Settings → Secrets and variables → Actions**, or on an -**environment** — the release workflow uses the environment **`pixi_release`**, +**environment** — the release workflow uses the environment **`fizzy_release`**, so you can store them there for stricter access / required reviewers): | Secret | What it is | | ----------------------------- | ---------------------------------------------------------- | -| `PIXI_MACOS_CERT_P12_BASE64` | `base64 < combined.p12` of both Developer ID certs | -| `PIXI_MACOS_CERT_PASSWORD` | password for the `.p12` | -| `PIXI_MACOS_SIGN_APP` | "Developer ID Application: NAME (TEAMID)" | -| `PIXI_MACOS_SIGN_INSTALLER` | "Developer ID Installer: NAME (TEAMID)" | -| `PIXI_APPLE_ID` | Apple ID email | -| `PIXI_APPLE_APP_PASSWORD` | app-specific password | -| `PIXI_APPLE_TEAM_ID` | 10-character team ID | +| `FIZZY_MACOS_CERT_P12_BASE64` | `base64 < combined.p12` of both Developer ID certs | +| `FIZZY_MACOS_CERT_PASSWORD` | password for the `.p12` | +| `FIZZY_MACOS_SIGN_APP` | "Developer ID Application: NAME (TEAMID)" | +| `FIZZY_MACOS_SIGN_INSTALLER` | "Developer ID Installer: NAME (TEAMID)" | +| `FIZZY_APPLE_ID` | Apple ID email | +| `FIZZY_APPLE_APP_PASSWORD` | app-specific password | +| `FIZZY_APPLE_TEAM_ID` | 10-character team ID | To bundle both certs into one `.p12`, in Keychain Access select both identities (Cmd-click) → File → Export Items → Personal Information Exchange @@ -166,7 +166,7 @@ There are two paths: point a built copy at the local output dir: ```sh - PIXI_AUTOUPDATE_URL="$PWD/zig-out/x86-64-macos" ./zig-out/x86-64-macos/Pixi + FIZZY_AUTOUPDATE_URL="$PWD/zig-out/x86-64-macos" ./zig-out/x86-64-macos/Fizzy ``` This bypasses GitHub entirely and reads the `releases.*.json` straight @@ -186,12 +186,12 @@ reaching `api.github.com`, or a malformed repo URL. The URL must be **Velopack reports no update available** when you expect one: most often the channel embedded in the running binary doesn't match the `--channel` -that produced the release assets. Check `Pixi.app/Contents/Resources/` +that produced the release assets. Check `Fizzy.app/Contents/Resources/` (macOS) or the `sq.version` file inside a Setup zip for the channel name the binary will request. **Notarization rejected with "signature does not include a secure timestamp"**: signing was done without `--signEntitlements`. The build.zig -already passes the entitlements file when `PIXI_MACOS_SIGN_APP` is set; +already passes the entitlements file when `FIZZY_MACOS_SIGN_APP` is set; make sure that env var is exported when running `zig build package` directly (the release script handles this for you). diff --git a/assets/.fizproject b/assets/.fizproject new file mode 100644 index 00000000..fc780b0b --- /dev/null +++ b/assets/.fizproject @@ -0,0 +1 @@ +{"packed_image_output":"/Users/foxnne/dev/proj/pixi/assets/fizzy.png","packed_atlas_output":"/Users/foxnne/dev/proj/pixi/assets/fizzy.atlas","pack_on_save":true} \ No newline at end of file diff --git a/assets/.pixiproject b/assets/.pixiproject deleted file mode 100644 index f59bc8aa..00000000 --- a/assets/.pixiproject +++ /dev/null @@ -1 +0,0 @@ -{"packed_image_output":"/Users/foxnne/dev/proj/pixi/assets/pixi.png","packed_atlas_output":"/Users/foxnne/dev/proj/pixi/assets/pixi.atlas","pack_on_save":true} \ No newline at end of file diff --git a/assets/pixi.atlas b/assets/fizzy.atlas similarity index 96% rename from assets/pixi.atlas rename to assets/fizzy.atlas index 414db774..91545d05 100644 --- a/assets/pixi.atlas +++ b/assets/fizzy.atlas @@ -1 +1 @@ -{"sprites":[{"origin":[0,22],"source":[240,0,14,18]},{"origin":[0,22],"source":[92,0,22,22]},{"origin":[0,22],"source":[48,0,22,22]},{"origin":[0,14],"source":[129,21,15,16]},{"origin":[-1,21],"source":[220,0,20,20]},{"origin":[-1,21],"source":[180,0,20,20]},{"origin":[-1,21],"source":[200,0,20,20]},{"origin":[0,21],"source":[138,0,21,21]},{"origin":[0,21],"source":[159,0,21,21]},{"origin":[0,21],"source":[114,0,24,21]},{"origin":[0,14],"source":[114,21,15,16]},{"origin":[0,14],"source":[207,20,24,17]},{"origin":[0,14],"source":[231,20,24,16]},{"origin":[0,22],"source":[70,0,22,22]},{"origin":[0,22],"source":[0,0,24,22]},{"origin":[0,22],"source":[24,0,24,22]},{"origin":[3,20],"source":[180,20,27,18]},{"origin":[-10,13],"source":[144,21,3,5]}],"animations":[{"name":"cursor_default","frames":[{"sprite_index":0,"ms":1000}]},{"name":"pencil_default","frames":[{"sprite_index":1,"ms":1000}]},{"name":"eraser_default","frames":[{"sprite_index":2,"ms":1000}]},{"name":"bucket_default","frames":[{"sprite_index":3,"ms":1000}]},{"name":"box_selection_default","frames":[{"sprite_index":4,"ms":1000}]},{"name":"box_selection_add_default","frames":[{"sprite_index":5,"ms":1000}]},{"name":"box_selection_rem_default","frames":[{"sprite_index":6,"ms":1000}]},{"name":"color_selection_default","frames":[{"sprite_index":10,"ms":1000}]},{"name":"color_selection_add_default","frames":[{"sprite_index":11,"ms":1000}]},{"name":"color_selection_rem_default","frames":[{"sprite_index":12,"ms":1000}]},{"name":"pixel_selection_default","frames":[{"sprite_index":13,"ms":1000}]},{"name":"pixel_selection_add_default","frames":[{"sprite_index":14,"ms":1000}]},{"name":"pixel_selection_rem_default","frames":[{"sprite_index":15,"ms":1000}]},{"name":"fox_default","frames":[{"sprite_index":16,"ms":125}]},{"name":"logo_default","frames":[{"sprite_index":17,"ms":1000}]}]} \ No newline at end of file +{"sprites":[{"origin":[0,22],"source":[240,0,14,18]},{"origin":[0,22],"source":[92,0,22,22]},{"origin":[0,22],"source":[48,0,22,22]},{"origin":[0,14],"source":[129,21,15,16]},{"origin":[-1,21],"source":[220,0,20,20]},{"origin":[-1,21],"source":[180,0,20,20]},{"origin":[-1,21],"source":[200,0,20,20]},{"origin":[0,21],"source":[138,0,21,21]},{"origin":[0,21],"source":[159,0,21,21]},{"origin":[0,21],"source":[114,0,24,21]},{"origin":[0,14],"source":[114,21,15,16]},{"origin":[0,14],"source":[207,20,24,17]},{"origin":[0,14],"source":[231,20,24,16]},{"origin":[0,22],"source":[70,0,22,22]},{"origin":[0,22],"source":[0,0,24,22]},{"origin":[0,22],"source":[24,0,24,22]},{"origin":[3,20],"source":[180,20,27,18]},{"origin":[-10,13],"source":[144,21,3,4]}],"animations":[{"name":"cursor_default","frames":[{"sprite_index":0,"ms":1000}]},{"name":"pencil_default","frames":[{"sprite_index":1,"ms":1000}]},{"name":"eraser_default","frames":[{"sprite_index":2,"ms":1000}]},{"name":"bucket_default","frames":[{"sprite_index":3,"ms":1000}]},{"name":"box_selection_default","frames":[{"sprite_index":4,"ms":1000}]},{"name":"box_selection_add_default","frames":[{"sprite_index":5,"ms":1000}]},{"name":"box_selection_rem_default","frames":[{"sprite_index":6,"ms":1000}]},{"name":"color_selection_default","frames":[{"sprite_index":10,"ms":1000}]},{"name":"color_selection_add_default","frames":[{"sprite_index":11,"ms":1000}]},{"name":"color_selection_rem_default","frames":[{"sprite_index":12,"ms":1000}]},{"name":"pixel_selection_default","frames":[{"sprite_index":13,"ms":1000}]},{"name":"pixel_selection_add_default","frames":[{"sprite_index":14,"ms":1000}]},{"name":"pixel_selection_rem_default","frames":[{"sprite_index":15,"ms":1000}]},{"name":"fox_default","frames":[{"sprite_index":16,"ms":125}]},{"name":"logo_default","frames":[{"sprite_index":17,"ms":1000}]}]} \ No newline at end of file diff --git a/assets/fizzy.png b/assets/fizzy.png new file mode 100644 index 00000000..55631d1d Binary files /dev/null and b/assets/fizzy.png differ diff --git a/assets/icon.png b/assets/icon.png index bc9401d7..7c70b37b 100644 Binary files a/assets/icon.png and b/assets/icon.png differ diff --git a/assets/macos/Pixi.entitlements b/assets/macos/Fizzy.entitlements similarity index 91% rename from assets/macos/Pixi.entitlements rename to assets/macos/Fizzy.entitlements index 27b6298c..eae9d332 100644 --- a/assets/macos/Pixi.entitlements +++ b/assets/macos/Fizzy.entitlements @@ -7,7 +7,7 @@ https://docs.microsoft.com/dotnet/core/install/macos-notarization-issues because Velopack's UpdateMac binary is .NET-compiled and needs JIT + unsigned-executable-memory + library-validation relaxed. - Pixi itself (Zig + SDL3 + Metal) only needs library-validation off + Fizzy itself (Zig + SDL3 + Metal) only needs library-validation off so frameworks loaded at runtime aren't blocked. --> com.apple.security.cs.allow-jit diff --git a/assets/macos/pixi.icns b/assets/macos/fizzy.icns similarity index 100% rename from assets/macos/pixi.icns rename to assets/macos/fizzy.icns diff --git a/assets/macos/info.plist b/assets/macos/info.plist index b6613604..f958de27 100644 --- a/assets/macos/info.plist +++ b/assets/macos/info.plist @@ -3,9 +3,9 @@ CFBundleName - Pixi + Fizzy CFBundleDisplayName - Pixi + Fizzy CFBundleIdentifier com.foxnne.pixi CFBundleShortVersionString @@ -13,7 +13,7 @@ CFBundleVersion 0.0.4 CFBundleIconFile - pixi.icns + fizzy.icns
@@ -522,7 +550,7 @@

@@ -590,11 +618,15 @@

Pixi editor — assorted sprite sheet with food and torch animations, export dialog open. + alt="Fizzy welcome screen — large F logo with New File, Open Folder, and Open Files shortcuts." /> Pixi editor — assorted.pixi open with the Animation export dialog and a torch preview. + alt="Fizzy editor — character.fiz sprite sheet with directional animations and the Animation export dialog open." /> Pixi editor in light mode — file tree on the left, sprite sheet on the right, palette below. + alt="Fizzy editor in a red custom theme — project file tree on the left and a ground tile open on the canvas." /> + Fizzy project view — packed sprite atlas preview with Pack Project and Export Project actions. + Fizzy editor in light mode — cursors.pixi and silly.pixi open side by side with tool sprite animations.
@@ -654,12 +686,12 @@

Themeable, transparent, alive

ROADMAP

-

Where Pixi is headed.

+

Where Fizzy is headed.

UP NEXT

A modular editor core

-

We're generalizing Pixi into a modular editor that other gamedev tools can plug into — sprite work today, scene editing and more tomorrow.

+

We're generalizing Fizzy into a modular editor that other gamedev tools can plug into — sprite work today, scene editing and more tomorrow.

UP NEXT @@ -687,7 +719,7 @@

Collaboration & live preview

Run your game inside the editor, hot-reload art, and share workspaces with collaborators.

-

Track progress on GitHub issues · ideas welcome.

+

Track progress on GitHub issues · ideas welcome.

@@ -697,7 +729,7 @@

Collaboration & live preview

- pixi + fizzy
MIT-licensed.
@@ -707,15 +739,15 @@

Collaboration & live preview

LEARN
- User guide - Wiki + User guide + Wiki
COMMUNITY
@@ -726,10 +758,10 @@
COMMUNITY