Skip to content

Commit 0d617d1

Browse files
committed
Force apps to always use host mode during development
- Modified executeApp() to always use executeAppLocalNode() regardless of runtimeMode2 setting - Removed Docker mode checks from cleanUpPort() and restart-app handler - Updated RuntimeModeSelector to disable Docker option and show informative message - Apps now always run locally for optimal development experience, Docker mode disabled
1 parent 289d7c4 commit 0d617d1

File tree

2 files changed

+23
-70
lines changed

2 files changed

+23
-70
lines changed

src/components/RuntimeModeSelector.tsx

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ export function RuntimeModeSelector() {
1717
return null;
1818
}
1919

20-
const isDockerMode = settings?.runtimeMode2 === "docker";
21-
20+
// Apps always run in host mode now - Docker is disabled for development
2221
const handleRuntimeModeChange = async (value: "host" | "docker") => {
22+
// Only allow host mode - Docker is disabled for app development
23+
if (value === "docker") {
24+
showError("Docker mode is disabled. Apps always run in local development mode for optimal development experience.");
25+
return;
26+
}
2327
try {
2428
await updateSettings({ runtimeMode2: value });
2529
} catch (error: any) {
@@ -43,32 +47,18 @@ export function RuntimeModeSelector() {
4347
</SelectTrigger>
4448
<SelectContent>
4549
<SelectItem value="host">Local (default)</SelectItem>
46-
<SelectItem value="docker">Docker (experimental)</SelectItem>
50+
<SelectItem value="docker" disabled>Docker (disabled)</SelectItem>
4751
</SelectContent>
4852
</Select>
4953
</div>
5054
<div className="text-sm text-gray-500 dark:text-gray-400">
51-
Choose whether to run apps directly on the local machine or in Docker
52-
containers
55+
Apps always run in local development mode for optimal development experience.
56+
Docker mode is disabled.
5357
</div>
5458
</div>
55-
{isDockerMode && (
56-
<div className="text-sm text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 p-2 rounded">
57-
⚠️ Docker mode is <b>experimental</b> and requires{" "}
58-
<button
59-
type="button"
60-
className="underline font-medium cursor-pointer"
61-
onClick={() =>
62-
IpcClient.getInstance().openExternalUrl(
63-
"https://www.docker.com/products/docker-desktop/",
64-
)
65-
}
66-
>
67-
Docker Desktop
68-
</button>{" "}
69-
to be installed and running
70-
</div>
71-
)}
59+
<div className="text-sm text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 p-2 rounded">
60+
ℹ️ Docker mode is disabled for app development. Apps run directly on your local machine for the best development experience.
61+
</div>
7262
</div>
7363
);
7464
}

src/ipc/handlers/app_handlers.ts

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -180,28 +180,16 @@ async function executeApp({
180180
proxyWorker.terminate();
181181
proxyWorker = null;
182182
}
183-
const settings = readSettings();
184-
const runtimeMode = settings.runtimeMode2 ?? "host";
185183

186-
if (runtimeMode === "docker") {
187-
await executeAppInDocker({
188-
appPath,
189-
appId,
190-
event,
191-
isNeon,
192-
installCommand,
193-
startCommand,
194-
});
195-
} else {
196-
await executeAppLocalNode({
197-
appPath,
198-
appId,
199-
event,
200-
isNeon,
201-
installCommand,
202-
startCommand,
203-
});
204-
}
184+
// Always use host mode for app development - Docker is experimental and not suitable for development
185+
await executeAppLocalNode({
186+
appPath,
187+
appId,
188+
event,
189+
isNeon,
190+
installCommand,
191+
startCommand,
192+
});
205193
}
206194

207195
async function ensureBackendDirectory(backendPath: string): Promise<void> {
@@ -1667,9 +1655,6 @@ export function registerAppHandlers() {
16671655

16681656
// Remove node_modules if requested
16691657
if (removeNodeModules) {
1670-
const settings = readSettings();
1671-
const runtimeMode = settings.runtimeMode2 ?? "host";
1672-
16731658
const nodeModulesPath = path.join(appPath, "node_modules");
16741659
logger.log(
16751660
`Removing node_modules for app ${appId} at ${nodeModulesPath}`,
@@ -1683,24 +1668,6 @@ export function registerAppHandlers() {
16831668
} else {
16841669
logger.log(`No node_modules directory found for app ${appId}`);
16851670
}
1686-
1687-
// If running in Docker mode, also remove container volumes so deps reinstall freshly
1688-
if (runtimeMode === "docker") {
1689-
logger.log(
1690-
`Docker mode detected for app ${appId}. Removing Docker volumes dyad-pnpm-${appId}...`,
1691-
);
1692-
try {
1693-
await removeDockerVolumesForApp(appId);
1694-
logger.log(
1695-
`Removed Docker volumes for app ${appId} (dyad-pnpm-${appId}).`,
1696-
);
1697-
} catch (e) {
1698-
// Best-effort cleanup; log and continue
1699-
logger.warn(
1700-
`Failed to remove Docker volumes for app ${appId}. Continuing: ${e}`,
1701-
);
1702-
}
1703-
}
17041671
}
17051672

17061673
logger.debug(
@@ -2302,12 +2269,8 @@ function getCommand({
23022269
}
23032270

23042271
async function cleanUpPort(port: number) {
2305-
const settings = readSettings();
2306-
if (settings.runtimeMode2 === "docker") {
2307-
await stopDockerContainersOnPort(port);
2308-
} else {
2309-
await killProcessOnPort(port);
2310-
}
2272+
// Always use host mode cleanup since apps always run in host mode
2273+
await killProcessOnPort(port);
23112274
}
23122275

23132276
async function installDependencies(projectPath: string, framework: string) {

0 commit comments

Comments
 (0)