Development
Troubleshooting
Common build, startup, and runtime issues with Land and how to resolve them.
The most frequently encountered problems when building, running, or developing against Land are covered below. Each entry describes the symptom, the root cause, and the specific fix. For issues not listed here, check the FIDDEE.log in <app-data>/logs/ and open a GitHub issue with the log contents attached.
Build Issues 🔨
npm install stalls during VS Code source step
Symptom: Running npm install inside Dependency/Microsoft/Dependency/Editor hangs indefinitely, typically after resolving most packages.
Cause: The VS Code source tree includes electron (~200 MB) and @playwright/browser-chromium (~300 MB) as devDependencies. Without skip flags, npm install downloads these binaries on every fresh install.
Fix: Add the following to your shell profile (~/.zshrc or ~/.bashrc) and reload before running npm install:
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1Neither binary is needed to compile Land. They are only required for running VS Code’s own integration tests.
Playwright lockfile error
Symptom: npm install fails with:
Error: An active lockfile is found at: ~/Library/Caches/ms-playwright/__dirlockCause: A previous npm install run was interrupted, leaving a stale lockfile that blocks subsequent installs.
Fix: Remove the stale lockfile and retry:
rm -rf ~/Library/Caches/ms-playwright/__dirlock
npm installdebug-electron-bundled path error
Symptom: The bundled workbench crashes at startup with:
The "path" argument must be of type string. Received type undefinedThe stack trace points into open (workbench.desktop.main.*.js).
Cause: ISandboxConfiguration.profiles or one of its required URI fields was missing or undefined in Mountain’s ConstructSandboxConfiguration. VS Code’s NativeWorkbenchEnvironmentService accesses URI fields like languageModelsResource without null-guards.
Fix: Rebuild Mountain after any change to InitializationData.rs:
cargo build -p MountainIf the error persists after rebuilding, wipe the Vite cache and do a full rebuild:
rm -rf Element/Sky/Target/
./Maintain/Debug/Build.sh --profile debug-electron-bundledIf still failing, open DevTools (Inspect=1) and set a breakpoint at get extensionsPath in the bundled workbench to inspect what this.productService.dataFolderName resolves to at runtime.
Startup Issues 🚀
Blank workbench - Cocoon not connecting
Symptom: The editor window opens but the workbench is blank or shows a loading spinner indefinitely. The extension host never activates.
Cause: Cocoon failed to start or failed to connect to Mountain within the 30-second gRPC budget. The most common sub-causes are: port 50051 or 50052 already in use from a previous run, or Cocoon’s gRPC server on port 50052 failed to bind before Mountain attempted to connect.
Fix:
Check whether ports 50051 or 50052 are in use by orphaned processes from a previous run:
lsof -i :50051 -i :50052Kill any orphaned process found, or change
NetworkMountainPort/NetworkCocoonPortin.env.Land.Check the dev log for the line
RPCServer bound on port 50052. If it is absent, Cocoon’s gRPC server never started. Look for earlier error lines in the log. Cocoon must bind port 50052 before Mountain attempts the connection- bootstrap stage ordering matters.
Set
Trace=cocoon,grpcandRecord=1in.env.Land.Diagnostics, relaunch, and inspect<app-data>/logs/<timestamp>/Mountain.dev.logfor the Cocoon subprocess output.
dataFolderName crash
See the debug-electron-bundled path error section above. The same InitializationData.rs fix applies to both the bundled and non-bundled profiles.
Extension Issues 🧩
Extension not loading
Symptom: An extension does not appear in the Extensions sidebar, or appears but never activates.
Fix:
- Verify the extension directory path is correct. On macOS the user extension root is
~/.land/extensions/. The directory must contain apackage.jsonwith a valid"main"field. - Check that
package.jsonhas an"engines"field with a"vscode"version range that the current Land version satisfies (ProductVersionin.env.Land, default1.118.0). - Set
Trace=extensionsandRecord=1, relaunch, and check the dev log for activation errors. Common causes are a missing compiled entry point, a Node.js require error in the extension’s code, or anactivationEventthat is never fired. - Check the Cocoon log in DevTools Console for uncaught exceptions during
activate().
Terminal not opening
Symptom: Opening a terminal pane shows a blank panel or an error about a missing binary.
Cause: The portable-pty native binary is either missing for the current platform or the localPty:createProcess IPC handler could not locate the Node.js binary to spawn the shell.
Fix:
- Verify the
SideCarbinary for your platform is present in the app bundle’s resources directory. - Check
NetworkCocoonPortis reachable - terminal creation goes through the Cocoon gRPC service. - Set
Trace=terminaland relaunch. The dev log shows the exact command Mountain attempted to pass tolocalPty:createProcessand any error returned.
Code Signing Issues 🖊️
codesign failures on macOS
Symptom: The application bundle fails to launch with a “damaged or incomplete” error, or Gatekeeper blocks it. Alternatively, codesign --verify reports not signed or invalid signature.
Cause: Tauri’s build process does not automatically re-sign the bundle after it copies the Cocoon Node.js binary and other resources into the .app. The ad-hoc signature applied at Tauri bundle time becomes invalid once additional files are written.
Fix: Re-run SignBundle.sh after the build:
BundleLevel=debug sh Maintain/Script/SignBundle.shThe script runs xattr -cr to strip quarantine attributes, then applies a fresh codesign with the entitlements from Element/Mountain/Entitlements.plist.
Warning
XML comments inside the <dict> block of Entitlements.plist cause codesign to reject the file with a parse error. Comments must appear outside the <dict> element. If you edit Entitlements.plist, verify the XML is well-formed before signing.
codesign succeeds but app still blocked
Symptom: codesign --verify passes but macOS still shows “cannot be opened” at launch.
Cause: The quarantine extended attribute was not cleared before signing.
Fix: Clear the quarantine attribute explicitly before signing:
xattr -cr Element/Mountain/Target/debug/Mountain.app
BundleLevel=debug sh Maintain/Script/SignBundle.shSignBundle.sh already calls xattr -cr internally, so re-running the full script is sufficient.