jdx/mise · error
Dock application is unavailable
Error message
Dock application is unavailable: {} What it means
The Dock reconciliation in `src/system/defaults/dock.rs` refuses to rearrange macOS Dock tiles when any application path declared in the desired layout does not exist on disk or is not a directory. This is a safety precondition: arranging the Dock around an app that is missing would silently drop or mis-place its tile. mise throws it via `eyre::ensure!` before touching the Dock.
Solutions
- Install the missing application or restore it at the declared path (verify with `ls <path>`).
- Remove or correct the stale path in the dock defaults configuration so every listed path exists.
- If the app lives elsewhere, point the config at the actual `.app` bundle location instead of the old path.
Example fix
// before (config) [[dock.entries]] path = "/Applications/OldApp.app" // after [[dock.entries]] path = "/Applications/RenamedApp.app"
Defensive patterns
Strategy: validation
Validate before calling
for path in dock_paths {
if !std::path::Path::new(path).is_dir() {
eprintln!("dock app missing: {path}");
}
} Prevention
- Verify every configured Dock path exists before applying defaults.
- Re-check the dock config after uninstalling or renaming apps.
- Prefer referencing apps by stable installed locations.
When it happens
Trigger: Call `reconcile(value, current)` (directly or via `match_symlinked_apps_and_preserve_declared_paths` / `refuse_unreadable_layout_and_missing_apps`) with a `[settings.dock]`-style DefaultsValue whose `paths(value)` list contains a path where `path.is_dir()` is false — missing app, deleted app, typo'd path, or a symlink pointing at a non-existent target.
Common situations: A mise config references an app like `/Applications/Firefox.app` that was uninstalled or renamed; an app is inside a user-specific folder not present on a new machine; a symlinked .app has a dangling target after a migration; macOS version upgrade moved an app.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- [bootstrap.macos.dock].apps: expected a path relative to…
- [bootstrap.macos.dock].apps: expected an absolute or ~/…
- [bootstrap.macos.dock].apps: expected an array of…
- com.apple.dock persistent-apps is not an array; left…
- duplicate Dock application
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/c9189b264e950daa.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/defaults/dock.rs:94
pub(super) fn matches(value: &DefaultsValue, current: &plist::Value) -> Result<bool> {
Ok(paths(value)?
.iter()
.map(|path| crate::file::canonicalize_or_self(path))
.eq(tiles(Some(current))?
.iter()
.filter_map(app_path)
.map(|path| crate::file::canonicalize_or_self(&path))))
}
#[cfg(any(target_os = "macos", test))]
pub(super) fn reconcile(
value: &DefaultsValue,
current: Option<&plist::Value>,
) -> Result<plist::Value> {
let desired = paths(value)?;
for path in &desired {
eyre::ensure!(
path.is_dir(),
"Dock application is unavailable: {}",
path.display()
);
}
arrange(&desired, tiles(current)?)
}
#[cfg(any(target_os = "macos", test))]
fn new_tile(path: &Path, guid: u64) -> Result<plist::Value> {
let url = url::Url::from_directory_path(path)
.map_err(|_| eyre::eyre!("invalid Dock application path: {}", path.display()))?;
let mut file = plist::Dictionary::new();
file.insert("_CFURLString".into(), url.to_string().into());
file.insert("_CFURLStringType".into(), 15u64.into());
let mut data = plist::Dictionary::new();
data.insert("file-data".into(), file.into());
data.insert(View on GitHub (pinned to 533346cc37)