This document describes the v0.9 distribution policy for packaging an unsigned Release build of MLX Server Manager as a .zip file and attaching it to a GitHub Release.
The distribution target is local personal use. The app remains Direct Mode:
OpenAI-compatible client -> mlx_lm.server
The zip is a packaging artifact only. It must not include runtime settings, model profiles, model files, Hugging Face cache, logs, or secrets.
GitHub Release assets may include:
MLXServerManager-<version>-unsigned.zip
The zip should contain:
MLXServerManager.app
The zip must not contain:
settings.jsonmodels.json- model files
- model directories
- Hugging Face cache
.envHF_TOKEN- logs
- derived data
.dSYM- source checkout files
The .app, .zip, .dSYM, and derived data must not be committed to Git.
The v0.9 asset policy is for an unsigned local-use build.
Users should be told:
- The app is not notarized.
- The app is not signed with Developer ID.
- macOS Gatekeeper may warn when opening the app.
- Downloaded zip files may carry quarantine attributes.
- Browser downloads may show "
MLXServerManageris damaged and can't be opened" for an unsigned, non-notarized app. - The user is responsible for deciding whether to run the app.
- Formal public distribution should use Developer ID signing and notarization in a future version.
Do not describe the unsigned zip as a fully notarized or formally distributed macOS app.
The v1.0.0 GitHub Release asset is an unsigned local macOS app build and is not notarized. When the zip is downloaded with Chrome, Safari, or another browser, macOS may attach a quarantine attribute to the extracted app.
In that case macOS may show a warning such as:
"MLXServerManager" is damaged and can't be opened. You should move it to the Trash.
This message does not always mean the zip or app bundle is actually corrupted. For this project it can be Gatekeeper blocking an unsigned, non-notarized local-use app.
Before removing quarantine, verify that:
- The file came from the expected GitHub Release asset.
- The asset name matches the expected release asset.
- The zip contents contain only
MLXServerManager.app/. - The checksum matches the published checksum when one is available.
After verifying the asset, a local user may remove the quarantine attribute from the extracted app:
xattr -dr com.apple.quarantine /path/to/MLXServerManager.app
open -n /path/to/MLXServerManager.appUse an actual local app path in place of /path/to/MLXServerManager.app. Do not remove quarantine from files that were not downloaded from the expected release source.
Create a Release build:
xcodebuild \
-project MLXServerManager.xcodeproj \
-scheme MLXServerManager \
-configuration Release \
-derivedDataPath /tmp/MLXServerManagerReleaseDerivedData \
CODE_SIGNING_ALLOWED=NO \
buildExpected app path:
/tmp/MLXServerManagerReleaseDerivedData/Build/Products/Release/MLXServerManager.app
This path is an example temporary DerivedData location, not a user-specific fixed path.
The v0.9 packaging verification confirmed:
- Release build result:
BUILD SUCCEEDED - App path:
/tmp/MLXServerManagerReleaseDerivedData/Build/Products/Release/MLXServerManager.app - App size:
1.1M
Create a zip that keeps the .app bundle as the parent item:
cd /tmp/MLXServerManagerReleaseDerivedData/Build/Products/Release
ditto -c -k --norsrc --noextattr --keepParent \
MLXServerManager.app \
/tmp/MLXServerManager-v0.9.0-unsigned.zipUse --norsrc --noextattr so the zip does not include AppleDouble ._* metadata files.
Do not use only ditto -c -k --keepParent; without --norsrc --noextattr, AppleDouble ._* metadata files may be included.
For a future release, replace v0.9.0 with the release version.
Confirm the zip contents:
unzip -l /tmp/MLXServerManager-v0.9.0-unsigned.zipExpected result:
- The archive contains
MLXServerManager.app/. - The archive does not contain runtime settings.
- The archive does not contain model files.
- The archive does not contain
.dSYMor derived data. - The archive does not contain AppleDouble
._*metadata files.
Confirm the zip size:
du -h /tmp/MLXServerManager-v0.9.0-unsigned.zipThe v0.9 packaging verification confirmed:
284K /tmp/MLXServerManager-v0.9.0-unsigned.zip
Confirm release artifacts are not tracked by Git:
git ls-files \
'*.app' \
'*.zip' \
'*.dSYM' \
settings.json \
models.json \
'*.safetensors' \
'*.gguf' \
'*.bin' \
'.env' \
HF_TOKEN \
models \
logs \
.venvThe command should not list generated app bundles, zip files, runtime settings, secrets, or model files.
The v0.9 zip verification confirmed that the archive contained only entries under:
MLXServerManager.app/
The zip did not include:
settings.jsonmodels.json- model files
- model directories
.envHF_TOKEN.dSYM- DerivedData
- Hugging Face cache
- logs
- AppleDouble
._*metadata files
Manual verification should use a temporary location:
- Unzip the asset into a temporary folder.
- Confirm
MLXServerManager.appexists. - Launch the app with
open -n. - Confirm the app starts.
- Confirm the menu bar item appears.
- Confirm the main window opens.
- Confirm runtime settings are not bundled in the zip.
- Configure
mlx_lm.server executable pathin the app UI if needed. - Run Setup Diagnostics if local runtime settings are available.
- Quit the app normally.
This launch verification must not require model inference and must not require /v1/chat/completions.
For v1.0.1 maintenance, verify the published v1.0.0 GitHub Release asset after uploading it:
- Download
MLXServerManager-v1.0.0-unsigned.zipfrom the GitHub Release in a browser. - Confirm the downloaded zip name matches the release asset name.
- Inspect the downloaded zip with
unzip -l. - Confirm the zip contains only
MLXServerManager.app/entries. - Confirm the zip does not contain runtime settings, model profiles, model files, Hugging Face cache, logs, secrets,
.dSYM, DerivedData,__MACOSX, or AppleDouble._*metadata files. - Extract the zip into a temporary folder.
- Launch the extracted app with
open -n. - If macOS reports that the app is damaged, treat it as a possible Gatekeeper quarantine warning for the unsigned app. Verify the asset and checksum before using
xattr -dr com.apple.quarantine. - Quit the verification app process.
- Confirm no verification process remains.
This is a verification of the published asset, not a new packaging method.
For end-user first launch with the current downloadable app binary, keep the path short:
-
Download
MLXServerManager-v1.9.0-unsigned.zipfrom the GitHub Release. -
Extract the zip.
-
Confirm the extracted app is
MLXServerManager.app. -
If Gatekeeper blocks launch with a damaged-app warning, verify the asset source, zip contents, and checksum first.
-
If the asset is trusted, remove quarantine from the extracted app:
xattr -dr com.apple.quarantine /path/to/MLXServerManager.app open -n /path/to/MLXServerManager.app
-
Configure
mlx_lm.server executable pathin Settings. -
Configure a Model Profile.
-
Run Setup Diagnostics before Start.
The app bundle does not include mlx-lm, runtime settings, model profiles, model files, Hugging Face cache, .env, or HF_TOKEN.
The v0.9 packaging verification confirmed:
- The zip was unzipped under
/tmp. open -nlaunched the unzippedMLXServerManager.app.- The launched app process was observed.
- The verification process was terminated after the check.
- No verification process was left running.
- Git status remained clean after build, zip creation, unzip, launch, and quit checks.
Use release notes similar to:
MLX Server Manager <version>
Asset:
- MLXServerManager-v0.9.0-unsigned.zip
Notes:
- This is an unsigned local-use macOS app bundle.
- The app is not notarized and is not signed with Developer ID.
- macOS Gatekeeper may warn when opening the app.
- The zip contains only MLXServerManager.app.
- Runtime settings, model profiles, model files, Hugging Face cache, logs, and secrets are not included.
- Configure mlx_lm.server executable path in the app UI after launch.
- Direct Mode is unchanged: OpenAI-compatible client -> mlx_lm.server.
- The app does not proxy inference traffic and does not provide Chat UI.
- Ready checks use /v1/models. The app does not send /v1/chat/completions.
Use release notes similar to:
MLX Server Manager v1.0.0
Asset:
- MLXServerManager-v1.0.0-unsigned.zip
Stable scope:
- Direct Mode: OpenAI-compatible client -> selected managed backend or adopted external endpoint.
- Independent app-managed `mlx_lm.server` and Rapid-MLX processes per profile.
- Multiple concurrent managed profiles when endpoints do not conflict.
- Start, Stop, Restart, Port Check, and Ready Check via `/v1/models`.
- Model profile add, edit, delete, import/export, backend selection, and launch options.
- Explicit Hugging Face search/download, diagnostics, benchmarks, Test Chat, logs, memory visibility, and Hermes Agent configuration.
- Menu bar quick actions and OpenAI-compatible connection settings copy.
Known limitations:
- This is an unsigned local-use macOS app bundle.
- The app is not notarized and is not signed with Developer ID.
- macOS Gatekeeper may warn when opening the app.
- Models and server runtimes are not bundled.
- The app does not bundle `mlx-lm`, Rapid-MLX, model files, Hugging Face cache, runtime settings, logs, or secrets.
- Users must configure a working executable path for each backend they use.
- The app does not proxy inference traffic or provide a general-purpose Chat UI. Test Chat and benchmark requests are explicit, direct calls to the selected endpoint.
Safety:
- Stop and Restart target only the process started by this app.
- External mlx_lm.server processes are not stopped.
- Runtime settings, model profiles, model files, Hugging Face cache, logs, secrets, .app bundles, zip files, dSYM files, and build artifacts are not included in Git.
- Notarization.
- Developer ID signing.
- DMG creation.
- Sparkle or other automatic updates.
- CI/CD.
- GitHub Actions.
- App Store distribution.
- Homebrew cask.
- Installer creation.
- Runtime settings bundling.
- Model file bundling.
- Hugging Face cache bundling.
- Proxy mode.
- Chat UI.
- LAN Web UI.
- App Intents.
- Auto unload.
- Full Hugging Face model-card browsing.
- HF token storage or credential management.
- Silent or background model downloads.
- Model file deletion.
- Hugging Face cache deletion.
- Multiple simultaneous server management.