diff --git a/client.go b/client.go
index dc7ead8..c49c121 100644
--- a/client.go
+++ b/client.go
@@ -9,13 +9,13 @@
 
 import (
 	"encoding/json"
-	"io/ioutil"
+	"io"
 	"log"
 	"os"
 )
 
 func main() {
-	body, err := ioutil.ReadAll(os.Stdin)
+	body, err := io.ReadAll(os.Stdin)
 	if err != nil {
 		log.Fatalf("error reading stdin: %v", err)
 	}
diff --git a/internal/gcpdial/gcpdial.go b/internal/gcpdial/gcpdial.go
index 9fe3661..c9d4dce 100644
--- a/internal/gcpdial/gcpdial.go
+++ b/internal/gcpdial/gcpdial.go
@@ -10,7 +10,6 @@
 	"context"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"math/rand"
 	"net/http"
@@ -91,7 +90,7 @@
 	res, err := http.DefaultClient.Do(req)
 	if res != nil {
 		defer res.Body.Close()
-		defer io.Copy(ioutil.Discard, res.Body)
+		defer io.Copy(io.Discard, res.Body)
 	}
 	healthy := err == nil && res.StatusCode == http.StatusOK
 	if healthy == p.healthy {
diff --git a/sandbox.go b/sandbox.go
index b7864be..47f3b06 100644
--- a/sandbox.go
+++ b/sandbox.go
@@ -19,7 +19,6 @@
 	"go/parser"
 	"go/token"
 	"io"
-	"io/ioutil"
 	"net"
 	"net/http"
 	"os"
@@ -331,7 +330,7 @@
 // *response.Errors contains an explanation for a user.
 func compileAndRun(ctx context.Context, req *request) (*response, error) {
 	// TODO(andybons): Add semaphore to limit number of running programs at once.
-	tmpDir, err := ioutil.TempDir("", "sandbox")
+	tmpDir, err := os.MkdirTemp("", "sandbox")
 	if err != nil {
 		return nil, fmt.Errorf("error creating temp directory: %v", err)
 	}
@@ -457,7 +456,7 @@
 				return nil, err
 			}
 		}
-		if err := ioutil.WriteFile(in, src, 0644); err != nil {
+		if err := os.WriteFile(in, src, 0644); err != nil {
 			return nil, fmt.Errorf("error creating temp file %q: %v", in, err)
 		}
 	}
@@ -474,7 +473,7 @@
 	// into GOPATH/pkg/mod.
 	cmd.Args = append(cmd.Args, "-modcacherw")
 	cmd.Args = append(cmd.Args, "-mod=mod")
-	br.goPath, err = ioutil.TempDir("", "gopath")
+	br.goPath, err = os.MkdirTemp("", "gopath")
 	if err != nil {
 		log.Printf("error creating temp directory: %v", err)
 		return nil, fmt.Errorf("error creating temp directory: %v", err)
@@ -537,7 +536,7 @@
 		stats.RecordWithTags(ctx, []tag.Mutator{tag.Upsert(kGoBuildSuccess, status)},
 			mGoRunLatency.M(float64(time.Since(start))/float64(time.Millisecond)))
 	}()
-	exeBytes, err := ioutil.ReadFile(exePath)
+	exeBytes, err := os.ReadFile(exePath)
 	if err != nil {
 		return execRes, err
 	}
@@ -551,7 +550,7 @@
 	if testParam != "" {
 		sreq.Header.Add("X-Argument", testParam)
 	}
-	sreq.GetBody = func() (io.ReadCloser, error) { return ioutil.NopCloser(bytes.NewReader(exeBytes)), nil }
+	sreq.GetBody = func() (io.ReadCloser, error) { return io.NopCloser(bytes.NewReader(exeBytes)), nil }
 	res, err := sandboxBackendClient().Do(sreq)
 	if err != nil {
 		if errors.Is(ctx.Err(), context.DeadlineExceeded) {
@@ -586,7 +585,7 @@
 // healthCheck attempts to build a binary from the source in healthProg.
 // It returns any error returned from sandboxBuild, or nil if none is returned.
 func (s *server) healthCheck(ctx context.Context) error {
-	tmpDir, err := ioutil.TempDir("", "sandbox")
+	tmpDir, err := os.MkdirTemp("", "sandbox")
 	if err != nil {
 		return fmt.Errorf("error creating temp directory: %v", err)
 	}
diff --git a/sandbox/sandbox.go b/sandbox/sandbox.go
index f65e642..45fca98 100644
--- a/sandbox/sandbox.go
+++ b/sandbox/sandbox.go
@@ -20,7 +20,6 @@
 	"flag"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"net/http"
 	"os"
@@ -325,7 +324,7 @@
 	if _, err := io.WriteString(os.Stdout, containedStartMessage); err != nil {
 		log.Fatalf("writing to stdout: %v", err)
 	}
-	slurp, err := ioutil.ReadAll(os.Stdin)
+	slurp, err := io.ReadAll(os.Stdin)
 	if err != nil {
 		log.Fatalf("reading stdin in contained mode: %v", err)
 	}
@@ -335,7 +334,7 @@
 	}
 	metaJSON, bin := slurp[:nl], slurp[nl+1:]
 
-	if err := ioutil.WriteFile(binPath, bin, 0755); err != nil {
+	if err := os.WriteFile(binPath, bin, 0755); err != nil {
 		log.Fatalf("writing contained binary: %v", err)
 	}
 	defer os.Remove(binPath) // not that it matters much, this container will be nuked
@@ -553,7 +552,7 @@
 	}
 	defer func() { <-runSem }()
 
-	bin, err := ioutil.ReadAll(http.MaxBytesReader(w, r.Body, maxBinarySize))
+	bin, err := io.ReadAll(http.MaxBytesReader(w, r.Body, maxBinarySize))
 	if err != nil {
 		log.Printf("failed to read request body: %v", err)
 		http.Error(w, err.Error(), http.StatusInternalServerError)
diff --git a/server_test.go b/server_test.go
index 10e8df2..b1a73a3 100644
--- a/server_test.go
+++ b/server_test.go
@@ -9,7 +9,7 @@
 	"context"
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"net/http"
 	"net/http/httptest"
 	"os"
@@ -97,9 +97,9 @@
 		}
 		if tc.respBody != nil {
 			defer resp.Body.Close()
-			b, err := ioutil.ReadAll(resp.Body)
+			b, err := io.ReadAll(resp.Body)
 			if err != nil {
-				t.Errorf("%s: ioutil.ReadAll(resp.Body): %v", tc.desc, err)
+				t.Errorf("%s: io.ReadAll(resp.Body): %v", tc.desc, err)
 			}
 			if !bytes.Equal(b, tc.respBody) {
 				t.Errorf("%s: got unexpected body %q; want %q", tc.desc, b, tc.respBody)
@@ -152,9 +152,9 @@
 		}
 		if tc.respBody != nil {
 			defer resp.Body.Close()
-			b, err := ioutil.ReadAll(resp.Body)
+			b, err := io.ReadAll(resp.Body)
 			if err != nil {
-				t.Errorf("%s: ioutil.ReadAll(resp.Body): %v", tc.desc, err)
+				t.Errorf("%s: io.ReadAll(resp.Body): %v", tc.desc, err)
 			}
 			if !bytes.Contains(b, tc.respBody) {
 				t.Errorf("%s: got unexpected body %q; want contains %q", tc.desc, b, tc.respBody)
@@ -292,9 +292,9 @@
 			}
 			if tc.respBody != nil {
 				defer resp.Body.Close()
-				b, err := ioutil.ReadAll(resp.Body)
+				b, err := io.ReadAll(resp.Body)
 				if err != nil {
-					t.Errorf("%s: ioutil.ReadAll(resp.Body): %v", tc.desc, err)
+					t.Errorf("%s: io.ReadAll(resp.Body): %v", tc.desc, err)
 				}
 				if !bytes.Equal(b, tc.respBody) {
 					t.Errorf("%s: got unexpected body %q; want %q", tc.desc, b, tc.respBody)
diff --git a/vet.go b/vet.go
index 889c63e..ece62a7 100644
--- a/vet.go
+++ b/vet.go
@@ -7,7 +7,6 @@
 import (
 	"context"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -27,14 +26,14 @@
 // boolean set. This code path doesn't support modules and only exists
 // as a temporary compatibility bridge to older javascript clients.
 func vetCheck(ctx context.Context, req *request) (*response, error) {
-	tmpDir, err := ioutil.TempDir("", "vet")
+	tmpDir, err := os.MkdirTemp("", "vet")
 	if err != nil {
 		return nil, fmt.Errorf("error creating temp directory: %v", err)
 	}
 	defer os.RemoveAll(tmpDir)
 
 	in := filepath.Join(tmpDir, progName)
-	if err := ioutil.WriteFile(in, []byte(req.Body), 0400); err != nil {
+	if err := os.WriteFile(in, []byte(req.Body), 0400); err != nil {
 		return nil, fmt.Errorf("error creating temp file %q: %v", in, err)
 	}
 	vetOutput, err := vetCheckInDir(ctx, tmpDir, os.Getenv("GOPATH"))
