diff --git a/apps/canvas/config/src/config.ts b/apps/canvas/config/src/config.ts
index 53fd64c..dc3b122 100644
--- a/apps/canvas/config/src/config.ts
+++ b/apps/canvas/config/src/config.ts
@@ -4,6 +4,7 @@
 	Env,
 	GatewayHttpsNode,
 	GatewayTCPNode,
+	GithubNode,
 	MongoDBNode,
 	Network,
 	NetworkNode,
@@ -15,6 +16,7 @@
 import { Edge } from "@xyflow/react";
 import { v4 as uuidv4 } from "uuid";
 import { ConfigWithInput, Ingress, Service, Volume, PostgreSQL, MongoDB, Config, PortDomain } from "./types.js";
+import { GithubRepository } from "./github.js";
 
 export function generateDodoConfig(appId: string | undefined, nodes: AppNode[], env: Env): ConfigWithInput | null {
 	try {
@@ -170,7 +172,7 @@
 	edges: Edge[];
 };
 
-export function configToGraph(config: Config, networks: Network[], current?: Graph): Graph {
+export function configToGraph(config: Config, networks: Network[], repos: GithubRepository[], current?: Graph): Graph {
 	if (current == null) {
 		current = { nodes: [], edges: [] };
 	}
@@ -181,6 +183,39 @@
 	if (networks.length === 0) {
 		return ret;
 	}
+	const repoNodes = (config.service || [])
+		.filter((s) => s.source.repository != null)
+		.map((s): GithubNode | null => {
+			const existing = current.nodes.find(
+				(n) => n.type === "github" && n.data.repository?.sshURL === s.source.repository,
+			);
+			const repo = repos.find((r) => r.ssh_url === s.source.repository);
+			if (repo == null) {
+				return null;
+			}
+			return {
+				id: existing != null ? existing.id : uuidv4(),
+				type: "github",
+				data: {
+					label: repo.full_name,
+					repository: {
+						id: repo.id,
+						sshURL: repo.ssh_url,
+						fullName: repo.full_name,
+					},
+					envVars: [],
+					ports: [],
+				},
+				position:
+					existing != null
+						? existing.position
+						: {
+								x: 0,
+								y: 0,
+							},
+			};
+		})
+		.filter((n) => n != null);
 	const networkNodes = networks.map((n): NetworkNode => {
 		let existing: NetworkNode | undefined = undefined;
 		existing = current.nodes
@@ -210,6 +245,12 @@
 				label: s.name,
 				type: s.type,
 				env: [],
+				repository: {
+					id: repoNodes.find((r) => r.data.repository?.sshURL === s.source.repository)!.data.repository!.id,
+					repoNodeId: repoNodes.find((r) => r.data.repository?.sshURL === s.source.repository)!.id,
+					branch: s.source.branch,
+					rootDir: s.source.rootDir,
+				},
 				ports: (s.ports || []).map(
 					(p): Port => ({
 						id: uuidv4(),
@@ -494,7 +535,7 @@
 		});
 	ret.nodes = [
 		...networkNodes,
-		...ret.nodes,
+		...repoNodes,
 		...(services || []),
 		...(serviceGateways || []),
 		...(volumes || []),
@@ -593,6 +634,15 @@
 			},
 		];
 	});
-	ret.edges = [...envVarEdges, ...exposureEdges, ...ingressEdges];
+	const repoEdges = (services || []).map((s): Edge => {
+		return {
+			id: uuidv4(),
+			source: s.data.repository!.repoNodeId!,
+			sourceHandle: "repository",
+			target: s.id,
+			targetHandle: "repository",
+		};
+	});
+	ret.edges = [...repoEdges, ...envVarEdges, ...exposureEdges, ...ingressEdges];
 	return ret;
 }
