diff --git a/packages/app/src/components/add-host-method-modal.tsx b/packages/app/src/components/add-host-method-modal.tsx
index 834aa27f0..1d9984d70 100644
--- a/packages/app/src/components/add-host-method-modal.tsx
+++ b/packages/app/src/components/add-host-method-modal.tsx
@@ -65,7 +65,7 @@ export function AddHostMethodModal({
Direct connection
- Local network or Tailscale (unencrypted).
+ Local network or VPN.
@@ -74,7 +74,7 @@ export function AddHostMethodModal({
Scan QR code
- Relay pairing (E2EE).
+ Encrypted relay connection.
) : null}
@@ -83,7 +83,7 @@ export function AddHostMethodModal({
Paste pairing link
- Relay pairing (E2EE).
+ Encrypted relay connection.
diff --git a/packages/app/src/components/add-host-modal.tsx b/packages/app/src/components/add-host-modal.tsx
index 17aaad552..7fd530015 100644
--- a/packages/app/src/components/add-host-modal.tsx
+++ b/packages/app/src/components/add-host-modal.tsx
@@ -103,13 +103,13 @@ function buildConnectionFailureCopy(endpoint: string, error: unknown): { title:
rawLower.includes("connection refused") ||
rawLower.includes("err_connection_refused")
) {
- detail = "Connection was refused. Is the daemon running on that host and port?";
+ detail = "Connection refused. Is the server running at this address?";
} else if (rawLower.includes("enotfound") || rawLower.includes("not found")) {
detail = "Host not found. Check the hostname and try again.";
} else if (rawLower.includes("ehostunreach") || rawLower.includes("host is unreachable")) {
detail = "Host is unreachable. Check your network and firewall.";
} else if (rawLower.includes("certificate") || rawLower.includes("tls") || rawLower.includes("ssl")) {
- detail = "TLS/certificate error. This app expects a daemon reachable over the local network or via relay.";
+ detail = "TLS error. Direct connections use an unencrypted local connection. Use relay for remote access.";
} else if (raw) {
detail = "Unable to connect. Check the host/port and that the daemon is reachable.";
} else {
@@ -221,7 +221,7 @@ export function AddHostModal({ visible, onClose, onCancel, onSaved, targetServer
return (
- Connect to a daemon by entering host:port.
+ Enter the address of a Paseo server.
Host
@@ -229,7 +229,7 @@ export function AddHostModal({ visible, onClose, onCancel, onSaved, targetServer
ref={hostInputRef}
value={endpointRaw}
onChangeText={setEndpointRaw}
- placeholder="host:6767"
+ placeholder="hostname:port"
placeholderTextColor={theme.colors.foregroundMuted}
style={styles.input}
autoCapitalize="none"
diff --git a/packages/app/src/components/pair-link-modal.tsx b/packages/app/src/components/pair-link-modal.tsx
index a0b1c22c8..c49c35dea 100644
--- a/packages/app/src/components/pair-link-modal.tsx
+++ b/packages/app/src/components/pair-link-modal.tsx
@@ -149,7 +149,7 @@ export function PairLinkModal({ visible, onClose, onCancel, onSaved, targetServe
return (
- Paste the daemon’s pairing link.
+ Paste the pairing link from your server.
Pairing link
diff --git a/packages/app/src/desktop/components/desktop-updates-section.tsx b/packages/app/src/desktop/components/desktop-updates-section.tsx
index 77c0e030b..68d5a43d9 100644
--- a/packages/app/src/desktop/components/desktop-updates-section.tsx
+++ b/packages/app/src/desktop/components/desktop-updates-section.tsx
@@ -88,9 +88,9 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
statusError ??
(managedStatus?.daemonRunning
? managedStatus.transportType === "tcp"
- ? `Managed daemon running on explicit TCP ${managedStatus.transportPath}.`
- : `Managed daemon running on private ${managedStatus.transportType}.`
- : "Managed daemon is currently stopped.");
+ ? `Running on ${managedStatus.transportPath}.`
+ : "Running."
+ : "Not running.");
const handleUpdateLocalDaemon = useCallback(() => {
if (!showSection) {
@@ -101,10 +101,10 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
}
void confirmDialog({
- title: "Restart managed daemon",
+ title: "Restart daemon",
message:
- "This restarts the desktop-managed daemon using its private managed home and socket.",
- confirmLabel: "Restart daemon",
+ "This will restart the built-in daemon. The app will reconnect automatically.",
+ confirmLabel: "Restart",
cancelLabel: "Cancel",
})
.then((confirmed) => {
@@ -118,13 +118,13 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
void restartManagedDaemon()
.then((status) => {
setManagedStatus(status);
- setStatusMessage("Managed daemon restarted.");
+ setStatusMessage("Daemon restarted.");
return loadManagedStatus();
})
.catch((error) => {
console.error("[Settings] Failed to restart managed daemon", error);
const message = error instanceof Error ? error.message : String(error);
- setStatusMessage(`Managed daemon restart failed: ${message}`);
+ setStatusMessage(`Restart failed: ${message}`);
})
.finally(() => {
setIsRestartingDaemon(false);
@@ -132,7 +132,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
})
.catch((error) => {
console.error("[Settings] Failed to open managed daemon restart confirmation", error);
- Alert.alert("Error", "Unable to open the managed daemon restart confirmation dialog.");
+ Alert.alert("Error", "Unable to open the restart confirmation dialog.");
});
}, [isRestartingDaemon, loadManagedStatus, showSection]);
@@ -162,7 +162,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
})
.catch((error) => {
const message = error instanceof Error ? error.message : String(error);
- setCliStatusMessage(`CLI shim action failed: ${message}`);
+ setCliStatusMessage(`CLI install failed: ${message}`);
})
.finally(() => {
setIsInstallingCli(false);
@@ -191,10 +191,10 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
void Clipboard.setStringAsync(logPath)
.then(() => {
- Alert.alert("Copied", "Managed daemon log path copied.");
+ Alert.alert("Copied", "Log path copied.");
})
.catch((error) => {
- console.error("[Settings] Failed to copy managed daemon log path", error);
+ console.error("[Settings] Failed to copy log path", error);
Alert.alert("Error", "Unable to copy log path.");
});
}, [managedLogs?.logPath, managedStatus?.logPath]);
@@ -219,7 +219,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
.then((pairing) => {
setPairingOffer(pairing);
if (!pairing.relayEnabled || !pairing.url) {
- setPairingStatusMessage("Relay pairing is disabled for this managed daemon.");
+ setPairingStatusMessage("Relay pairing is not available.");
}
})
.catch((error) => {
@@ -269,12 +269,12 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
})
.then((status) => {
setManagedStatus(status);
- setStatusMessage("Managed TCP exposure disabled.");
+ setStatusMessage("Network access disabled.");
return loadManagedStatus();
})
.catch((error) => {
const message = error instanceof Error ? error.message : String(error);
- setStatusMessage(`Managed TCP update failed: ${message}`);
+ setStatusMessage(`Failed to update: ${message}`);
})
.finally(() => {
setIsSavingTcpSettings(false);
@@ -296,15 +296,15 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
return;
}
if (port === 6767) {
- Alert.alert("Port unavailable", "Managed TCP mode must not claim 127.0.0.1:6767.");
+ Alert.alert("Port unavailable", "Port 6767 is reserved. Choose a different port.");
return;
}
void confirmDialog({
- title: "Enable managed TCP",
+ title: "Enable network access",
message:
- "This exposes the managed daemon on a TCP listener. Relay remains available, but network exposure is no longer private to the desktop app.",
- confirmLabel: "Enable TCP",
+ "This makes the daemon reachable on your local network. Relay connections will continue to work.",
+ confirmLabel: "Enable",
cancelLabel: "Cancel",
})
.then((confirmed) => {
@@ -317,20 +317,20 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
.then((status) => {
setManagedStatus(status);
setIsTcpModalOpen(false);
- setStatusMessage(`Managed TCP exposure enabled on ${host}:${port}.`);
+ setStatusMessage(`Network access enabled on ${host}:${port}.`);
return loadManagedStatus();
})
.catch((error) => {
const message = error instanceof Error ? error.message : String(error);
- setStatusMessage(`Managed TCP update failed: ${message}`);
+ setStatusMessage(`Failed to update: ${message}`);
})
.finally(() => {
setIsSavingTcpSettings(false);
});
})
.catch((error) => {
- console.error("[Settings] Failed to open managed TCP confirmation", error);
- Alert.alert("Error", "Unable to open the managed TCP confirmation dialog.");
+ console.error("[Settings] Failed to open TCP confirmation", error);
+ Alert.alert("Error", "Unable to open the confirmation dialog.");
});
}, [isSavingTcpSettings, loadManagedStatus, tcpHostInput, tcpPortInput]);
@@ -340,7 +340,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
return (
- Managed daemon
+ Built-in daemon
@@ -353,7 +353,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
Restart daemon
- Restarts the desktop-managed daemon without touching `~/.paseo` or `127.0.0.1:6767`.
+ Restarts the built-in daemon. Your data and external connections are not affected.
{statusMessage ? (
{statusMessage}
@@ -370,9 +370,9 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
- CLI shim
+ Command line (CLI)
- Installs a global `paseo` launcher that forwards into the desktop-managed runtime.
+ Adds the `paseo` command to your terminal.
{cliStatusMessage ? {cliStatusMessage} : null}
@@ -395,7 +395,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
{managedLogs?.logPath ??
managedStatus?.logPath ??
- "Managed daemon log path unavailable."}
+ "Log path unavailable."}
@@ -418,7 +418,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
Pair device
- Show the managed daemon QR code and a copyable pairing link for the mobile app.
+ Connect your phone to this computer.
- Advanced TCP
+ Network access
- Default off. Use only if you explicitly want a network listener instead of the
- private managed transport.
+ Allow other apps or devices on your network to connect directly.
{managedStatus?.tcpEnabled
@@ -464,8 +463,8 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
{daemonVersionMismatch ? (
- Desktop app and managed daemon versions differ. Keep both on the same version to avoid
- stability issues or breaking changes.
+ App and daemon versions don't match. Update both to the same version for the best
+ experience.
) : null}
@@ -473,12 +472,12 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
setIsTcpModalOpen(false)}
- title="Managed TCP settings"
+ title="Network access"
>
- TCP is advanced opt-in only. It must stay off unless you explicitly need direct network
- access, and it must never use port 6767.
+ Expose the daemon on a specific address and port so other apps can connect directly.
+ Port 6767 is reserved and cannot be used here.
setIsLogsModalOpen(false)}
- title="Managed daemon logs"
+ title="Daemon logs"
testID="managed-daemon-logs-dialog"
snapPoints={["70%", "92%"]}
>
@@ -561,7 +560,7 @@ export function LocalDaemonSection({ appVersion }: LocalDaemonSectionProps) {
{managedLogs?.logPath ??
managedStatus?.logPath ??
- "Managed daemon log path unavailable."}
+ "Log path unavailable."}
{managedLogs?.contents.length ? managedLogs.contents : "(log file is empty)"}
diff --git a/packages/app/src/screens/settings-screen.tsx b/packages/app/src/screens/settings-screen.tsx
index b842050d6..162a7b02d 100644
--- a/packages/app/src/screens/settings-screen.tsx
+++ b/packages/app/src/screens/settings-screen.tsx
@@ -56,10 +56,10 @@ function formatHostConnectionLabel(connection: HostConnection): string {
return `Relay (${connection.relayEndpoint})`;
}
if (connection.type === "directSocket") {
- return `Socket (${connection.path})`;
+ return `Local (${connection.path})`;
}
if (connection.type === "directPipe") {
- return `Pipe (${connection.path})`;
+ return `Local (${connection.path})`;
}
return `TCP (${connection.endpoint})`;
}
@@ -76,10 +76,10 @@ function formatActiveConnectionBadge(input: {
return { icon: , text: "Relay" };
}
if (activeConnection.type === "directSocket") {
- return { icon: , text: "Socket" };
+ return { icon: , text: "Local" };
}
if (activeConnection.type === "directPipe") {
- return { icon: , text: "Pipe" };
+ return { icon: , text: "Local" };
}
return {
icon: ,
@@ -705,7 +705,7 @@ export default function SettingsScreen() {
);
const restartConfirmationMessage =
- "This will immediately stop the Paseo daemon process. The app will disconnect until it restarts.";
+ "This will restart the daemon. The app will reconnect automatically.";
if (isLoading) {
return (