diff --git a/core/cmd/init/BUILD.bazel b/core/cmd/init/BUILD.bazel
index 0765538..1e5db46 100644
--- a/core/cmd/init/BUILD.bazel
+++ b/core/cmd/init/BUILD.bazel
@@ -9,6 +9,7 @@
     importpath = "git.monogon.dev/source/nexantic.git/core/cmd/init",
     visibility = ["//visibility:private"],
     deps = [
+        "//core/internal/common/supervisor:go_default_library",
         "//core/internal/network:go_default_library",
         "//core/internal/node:go_default_library",
         "//core/internal/storage:go_default_library",
diff --git a/core/cmd/init/main.go b/core/cmd/init/main.go
index f4ff871..d1e2f87 100644
--- a/core/cmd/init/main.go
+++ b/core/cmd/init/main.go
@@ -23,6 +23,7 @@
 	"os/signal"
 	"runtime/debug"
 
+	"git.monogon.dev/source/nexantic.git/core/internal/common/supervisor"
 	"git.monogon.dev/source/nexantic.git/core/internal/network"
 	"git.monogon.dev/source/nexantic.git/core/internal/node"
 	"git.monogon.dev/source/nexantic.git/core/internal/storage"
@@ -38,7 +39,6 @@
 )
 
 func main() {
-	ctx := context.Background()
 	defer func() {
 		if r := recover(); r != nil {
 			fmt.Println("Init panicked:", r)
@@ -76,46 +76,56 @@
 		panic(fmt.Errorf("could not initialize storage: %w", err))
 	}
 
-	networkSvc, err := network.NewNetworkService(network.Config{}, logger.With(zap.String("component", "network")))
+	networkSvc := network.New(network.Config{})
 	if err != nil {
 		panic(err)
 	}
 
-	if err := networkSvc.Start(); err != nil {
-		logger.Panic("Failed to start network service", zap.Error(err))
-	}
+	supervisor.New(context.Background(), logger, func(ctx context.Context) error {
+		if err := supervisor.Run(ctx, "network", networkSvc.Run); err != nil {
+			return err
+		}
 
-	nodeInstance, err := node.NewSmalltownNode(logger, networkSvc, storageManager)
-	if err != nil {
-		panic(err)
-	}
+		// TODO(q3k): convert node code to supervisor
+		nodeInstance, err := node.NewSmalltownNode(logger, networkSvc, storageManager)
+		if err != nil {
+			panic(err)
+		}
 
-	err = nodeInstance.Start(ctx)
-	if err != nil {
-		panic(err)
-	}
+		err = nodeInstance.Start(ctx)
+		if err != nil {
+			panic(err)
+		}
 
-	// We're PID1, so orphaned processes get reparented to us to clean up
-	for {
-		sig := <-signalChannel
-		switch sig {
-		case unix.SIGCHLD:
-			var status unix.WaitStatus
-			var rusage unix.Rusage
-			for {
-				res, err := unix.Wait4(-1, &status, unix.WNOHANG, &rusage)
-				if err != nil && err != unix.ECHILD {
-					logger.Error("Failed to wait on orphaned child", zap.Error(err))
-					break
-				}
-				if res <= 0 {
-					break
+		supervisor.Signal(ctx, supervisor.SignalHealthy)
+
+		// We're PID1, so orphaned processes get reparented to us to clean up
+		for {
+			select {
+			case <-ctx.Done():
+				return ctx.Err()
+			case sig := <-signalChannel:
+				switch sig {
+				case unix.SIGCHLD:
+					var status unix.WaitStatus
+					var rusage unix.Rusage
+					for {
+						res, err := unix.Wait4(-1, &status, unix.WNOHANG, &rusage)
+						if err != nil && err != unix.ECHILD {
+							logger.Error("Failed to wait on orphaned child", zap.Error(err))
+							break
+						}
+						if res <= 0 {
+							break
+						}
+					}
+				// TODO(lorenz): We can probably get more than just SIGCHLD as init, but I can't think
+				// of any others right now, just log them in case we hit any of them.
+				default:
+					logger.Warn("Got unexpected signal", zap.String("signal", sig.String()))
 				}
 			}
-		// TODO(lorenz): We can probably get more than just SIGCHLD as init, but I can't think
-		// of any others right now, just log them in case we hit any of them.
-		default:
-			logger.Warn("Got unexpected signal", zap.String("signal", sig.String()))
 		}
-	}
+	})
+	select {}
 }
