diff --git a/apps/canvas/front/src/components/node-app.tsx b/apps/canvas/front/src/components/node-app.tsx
index e63c76a..a6eaaf9 100644
--- a/apps/canvas/front/src/components/node-app.tsx
+++ b/apps/canvas/front/src/components/node-app.tsx
@@ -1,6 +1,14 @@
 import { v4 as uuidv4 } from "uuid";
 import { NodeRect } from "./node-rect";
-import { useStateStore, nodeLabel, AppState, nodeIsConnectable, useEnv, useGithubRepositories } from "@/lib/state";
+import {
+	useStateStore,
+	nodeLabel,
+	AppState,
+	nodeIsConnectable,
+	useEnv,
+	useGithubRepositories,
+	useMode,
+} from "@/lib/state";
 import {
 	ServiceNode,
 	ServiceTypes,
@@ -27,7 +35,7 @@
 import { Switch } from "./ui/switch";
 import { Label } from "./ui/label";
 import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs";
-import { Code, Container, Network, Pencil, Variable } from "lucide-react";
+import { Check, Code, Container, Copy, Network, Pencil, Variable } from "lucide-react";
 import { Badge } from "./ui/badge";
 import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "./ui/accordion";
 import { Name } from "./node-name";
@@ -894,6 +902,8 @@
 
 function EnvVars({ node, disabled }: { node: ServiceNode; disabled?: boolean }): React.ReactNode {
 	const { id, data } = node;
+	const mode = useMode();
+	const env = useEnv();
 	const store = useStateStore();
 	const [name, setName] = useState("");
 	const [value, setValue] = useState("");
@@ -1032,6 +1042,84 @@
 		},
 		[store, saveAlias],
 	);
+	const envVars = useMemo(() => {
+		if (mode !== "deploy") {
+			return [];
+		}
+		return env.access
+			.filter((a) => a.name === data.label)
+			.filter((a) => a.type === "env_var")
+			.map((a) => ({
+				name: a.var.split("=", 2)[0],
+				value: a.var.split("=", 2)[1],
+			}));
+	}, [mode, env.access, data.label]);
+
+	const hiddenEnvVars = useMemo(() => {
+		return envVars
+			.map((v) => {
+				const { name, value } = v;
+				const match = value.match(/^(postgresql|mongodb):\/\/([^:]+):([^@]+)@([^:/]+)(?::(\d+))?\/(.+)$/);
+				if (match) {
+					const [_, protocol, username, _password, host, port, database] = match;
+					return {
+						name,
+						value,
+						hidden: `${protocol}://${username}:*****@${host}${port ? `:${port}` : ""}/${database}`,
+					};
+				}
+				return {
+					name,
+					value,
+					hidden: value,
+				};
+			})
+			.map((v) => {
+				return {
+					...v,
+					hidden: v.hidden.length > 50 ? v.hidden.slice(0, 50) + "..." : v.hidden,
+				};
+			});
+	}, [envVars]);
+
+	const [copied, setCopied] = useState(false);
+	const [blip, setBlip] = useState(false);
+
+	const handleCopy = () => {
+		navigator.clipboard.writeText(envVars.map((v) => `${v.name}=${v.value}`).join("\n"));
+		setCopied(true);
+		setBlip(true);
+		setTimeout(() => setCopied(false), 1000);
+		setTimeout(() => setBlip(false), 300);
+	};
+
+	if (hiddenEnvVars.length > 0) {
+		return (
+			<div className="flex flex-col gap-1">
+				<div className="grid grid-cols-[auto_minmax(0,1fr)] gap-1 flex-shrink">
+					{hiddenEnvVars.map((v) => (
+						<div key={v.name} className="contents">
+							<div className="uppercase">{v.name}</div>
+							<div className="min-w-0 truncate">{v.hidden}</div>
+						</div>
+					))}
+				</div>
+				<div className="flex justify-end">
+					<Button onClick={handleCopy} className={blip ? "bg-green-100 transition-colors" : ""}>
+						{copied ? (
+							<>
+								<Check className="w-4 h-4 text-green-600" /> Copy
+							</>
+						) : (
+							<>
+								<Copy className="w-4 h-4" /> Copy
+							</>
+						)}
+					</Button>
+				</div>
+			</div>
+		);
+	}
 
 	return (
 		<div className="flex flex-col gap-1">
