diff --git a/packages/desktop-client/package.json b/packages/desktop-client/package.json
index f0441d6b565ff607da17e726c617caf2ea7d80f9..cd8c29beed2c5df7789624f296dccdebfacfe2dc 100644
--- a/packages/desktop-client/package.json
+++ b/packages/desktop-client/package.json
@@ -82,10 +82,10 @@
   },
   "scripts": {
     "start": "cross-env PORT=3001 node scripts/start.js",
-    "start:browser": "./bin/watch-browser",
+    "start:browser": "cross-env ./bin/watch-browser",
     "watch": "cross-env PORT=3001 node scripts/start.js",
     "build": "cross-env INLINE_RUNTIME_CHUNK=false node scripts/build.js",
-    "build:browser": "./bin/build-browser",
+    "build:browser": "cross-env ./bin/build-browser",
     "lint": "eslint src"
   },
   "browserslist": [
diff --git a/packages/loot-core/bin/build-browser b/packages/loot-core/bin/build-browser
index 243075080e2539cc01c85131bea86b8a21dd1a34..0ae89a500eceb6c42310b8b175c414b188844232 100755
--- a/packages/loot-core/bin/build-browser
+++ b/packages/loot-core/bin/build-browser
@@ -22,6 +22,10 @@ if [ $NODE_ENV == 'development' ]; then
   # Make sure to do this before starting the build since watch mode
   # will block
   WEBPACK_ARGS="$WEBPACK_ARGS --watch"
+  if [ "$OSTYPE" == "msys" ]; then
+    # Ensure symlinks are created as native Windows symlinks.
+    export MSYS=winsymlinks:nativestrict
+  fi
   ln -snf "$ROOT"/../lib-dist/browser ../../desktop-client/public/kcab
 fi