diff --git a/apidiff/apidiff_test.go b/apidiff/apidiff_test.go
index 9d55e14..a13009d 100644
--- a/apidiff/apidiff_test.go
+++ b/apidiff/apidiff_test.go
@@ -4,7 +4,6 @@
 	"bufio"
 	"fmt"
 	"go/types"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -18,7 +17,7 @@
 )
 
 func TestChanges(t *testing.T) {
-	dir, err := ioutil.TempDir("", "apidiff_test")
+	dir, err := os.MkdirTemp("", "apidiff_test")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -63,7 +62,7 @@
 	if err := os.MkdirAll(filepath.Join(dir, "src", "apidiff"), 0700); err != nil {
 		t.Fatal(err)
 	}
-	if err := ioutil.WriteFile(filepath.Join(dir, "src", "apidiff", "go.mod"), []byte("module apidiff\n"), 0666); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "src", "apidiff", "go.mod"), []byte("module apidiff\n"), 0666); err != nil {
 		t.Fatal(err)
 	}
 
diff --git a/cmd/gorelease/gorelease.go b/cmd/gorelease/gorelease.go
index b0ee1e9..5c2342e 100644
--- a/cmd/gorelease/gorelease.go
+++ b/cmd/gorelease/gorelease.go
@@ -88,7 +88,6 @@
 	"fmt"
 	"go/build"
 	"io"
-	"io/ioutil"
 	"log"
 	"os"
 	"os/exec"
@@ -166,7 +165,7 @@
 	// test without printing to stderr.
 	fs := flag.NewFlagSet("gorelease", flag.ContinueOnError)
 	fs.Usage = func() {}
-	fs.SetOutput(ioutil.Discard)
+	fs.SetOutput(io.Discard)
 	var baseOpt, releaseVersion string
 	fs.StringVar(&baseOpt, "base", "", "previous version to compare against")
 	fs.StringVar(&releaseVersion, "version", "", "proposed version to be released")
@@ -309,7 +308,7 @@
 		m.diagnostics = append(m.diagnostics, fmt.Sprintf("Version %s is lower than most pseudo-versions. Consider releasing v0.1.0-0 instead.", version))
 	}
 
-	m.goModData, err = ioutil.ReadFile(m.goModPath)
+	m.goModData, err = os.ReadFile(m.goModPath)
 	if err != nil {
 		return moduleInfo{}, err
 	}
@@ -371,7 +370,7 @@
 			// Modules with major version suffixes can be defined in two places
 			// (e.g., sub/go.mod and sub/v2/go.mod). They must not be defined in both.
 			if altGoModPath != "" {
-				if data, err := ioutil.ReadFile(altGoModPath); err == nil {
+				if data, err := os.ReadFile(altGoModPath); err == nil {
 					if altModPath := modfile.ModulePath(data); m.modPath == altModPath {
 						goModRel, _ := filepath.Rel(repoRoot, m.goModPath)
 						altGoModRel, _ := filepath.Rel(repoRoot, altGoModPath)
@@ -511,7 +510,7 @@
 	if m.modRoot, m.goModPath, err = downloadModule(ctx, v); err != nil {
 		return moduleInfo{}, err
 	}
-	if m.goModData, err = ioutil.ReadFile(m.goModPath); err != nil {
+	if m.goModData, err = os.ReadFile(m.goModPath); err != nil {
 		return moduleInfo{}, err
 	}
 	if m.goModFile, err = modfile.ParseLax(m.goModPath, m.goModData, nil); err != nil {
@@ -774,7 +773,7 @@
 		return "", errors.New("query is based on requirements in main go.mod file")
 	}
 
-	tmpDir, err := ioutil.TempDir("", "")
+	tmpDir, err := os.MkdirTemp("", "")
 	if err != nil {
 		return "", err
 	}
@@ -805,7 +804,7 @@
 		}
 	}()
 
-	tmpDir, err := ioutil.TempDir("", "")
+	tmpDir, err := os.MkdirTemp("", "")
 	if err != nil {
 		return nil, err
 	}
@@ -882,7 +881,7 @@
 	}
 	m := module.Version{Path: modPath, Version: version}
 
-	zipFile, err := ioutil.TempFile("", "gorelease-*.zip")
+	zipFile, err := os.CreateTemp("", "gorelease-*.zip")
 	if err != nil {
 		return "", err
 	}
@@ -891,7 +890,7 @@
 		os.Remove(zipFile.Name())
 	}()
 
-	dir, err = ioutil.TempDir("", "gorelease")
+	dir, err = os.MkdirTemp("", "gorelease")
 	if err != nil {
 		return "", err
 	}
@@ -980,7 +979,7 @@
 	// TODO(golang.org/issue/36812): 'go mod download' reads go.mod even though
 	// we don't need information about the main module or the build list.
 	// If it didn't read go.mod in this case, we wouldn't need a temp directory.
-	tmpDir, err := ioutil.TempDir("", "gorelease-download")
+	tmpDir, err := os.MkdirTemp("", "gorelease-download")
 	if err != nil {
 		return "", "", err
 	}
@@ -1073,7 +1072,7 @@
 		}
 	}
 
-	dir, err = ioutil.TempDir("", "gorelease-load")
+	dir, err = os.MkdirTemp("", "gorelease-load")
 	if err != nil {
 		return "", nil, nil, nil, nil, err
 	}
@@ -1096,15 +1095,15 @@
 	if err != nil {
 		return "", nil, nil, nil, nil, err
 	}
-	if err := ioutil.WriteFile(filepath.Join(dir, "go.mod"), goModData, 0666); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "go.mod"), goModData, 0666); err != nil {
 		return "", nil, nil, nil, nil, err
 	}
 
-	goSumData, err = ioutil.ReadFile(filepath.Join(modRoot, "go.sum"))
+	goSumData, err = os.ReadFile(filepath.Join(modRoot, "go.sum"))
 	if err != nil && !os.IsNotExist(err) {
 		return "", nil, nil, nil, nil, err
 	}
-	if err := ioutil.WriteFile(filepath.Join(dir, "go.sum"), goSumData, 0666); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "go.sum"), goSumData, 0666); err != nil {
 		return "", nil, nil, nil, nil, err
 	}
 
@@ -1119,7 +1118,7 @@
 	for _, imp := range imps {
 		fmt.Fprintf(fakeImports, "import _ %q\n", imp)
 	}
-	if err := ioutil.WriteFile(filepath.Join(dir, "tmp.go"), []byte(fakeImports.String()), 0666); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "tmp.go"), []byte(fakeImports.String()), 0666); err != nil {
 		return "", nil, nil, nil, nil, err
 	}
 
@@ -1148,7 +1147,7 @@
 	if err != nil {
 		return "", nil, nil, nil, nil, err
 	}
-	newGoModData, err := ioutil.ReadFile(goModPath)
+	newGoModData, err := os.ReadFile(goModPath)
 	if err != nil {
 		return "", nil, nil, nil, nil, err
 	}
@@ -1187,7 +1186,7 @@
 	if !cached {
 		// Check if 'go get' added new hashes to go.sum.
 		goSumPath := filepath.Join(dir, "go.sum")
-		newGoSumData, err := ioutil.ReadFile(goSumPath)
+		newGoSumData, err := os.ReadFile(goSumPath)
 		if err != nil {
 			if !os.IsNotExist(err) {
 				return "", nil, nil, nil, nil, err
diff --git a/cmd/gorelease/gorelease_test.go b/cmd/gorelease/gorelease_test.go
index 216c747..47d0892 100644
--- a/cmd/gorelease/gorelease_test.go
+++ b/cmd/gorelease/gorelease_test.go
@@ -9,7 +9,6 @@
 	"context"
 	"flag"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -61,7 +60,7 @@
 	}
 	env = append(env, fmt.Sprintf("GOPROXY=%s", proxyURL))
 
-	cacheDir, err := ioutil.TempDir("", "gorelease_test-gocache")
+	cacheDir, err := os.MkdirTemp("", "gorelease_test-gocache")
 	if err != nil {
 		return nil, nil, err
 	}
@@ -267,7 +266,7 @@
 
 	wantFile.Data = want
 	data := txtar.Format(&t.Archive)
-	return ioutil.WriteFile(t.testPath, data, 0666)
+	return os.WriteFile(t.testPath, data, 0666)
 }
 
 func TestRelease(t *testing.T) {
@@ -303,7 +302,7 @@
 func TestRelease_gitRepo_uncommittedChanges(t *testing.T) {
 	ctx := context.Background()
 	buf := &bytes.Buffer{}
-	releaseDir, err := ioutil.TempDir("", "")
+	releaseDir, err := os.MkdirTemp("", "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -314,7 +313,7 @@
 	// Create an uncommitted change.
 	bContents := `package b
 const B = "b"`
-	if err := ioutil.WriteFile(filepath.Join(releaseDir, "b.go"), []byte(bContents), 0644); err != nil {
+	if err := os.WriteFile(filepath.Join(releaseDir, "b.go"), []byte(bContents), 0644); err != nil {
 		t.Fatal(err)
 	}
 
@@ -347,7 +346,7 @@
 
 		// Extract the files in the release version. They may be part of the
 		// test archive or in testdata/mod.
-		testDir, err := ioutil.TempDir("", "")
+		testDir, err := os.MkdirTemp("", "")
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -447,7 +446,7 @@
 		t.Fatal(err)
 	}
 
-	if err := ioutil.WriteFile(filepath.Join(dir, ".hg", "branch"), []byte("default"), 0777); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, ".hg", "branch"), []byte("default"), 0777); err != nil {
 		t.Fatal(err)
 	}
 }
@@ -488,7 +487,7 @@
 
 	aContents := `package a
 const A = "a"`
-	if err := ioutil.WriteFile(filepath.Join(dir, "a.go"), []byte(aContents), 0644); err != nil {
+	if err := os.WriteFile(filepath.Join(dir, "a.go"), []byte(aContents), 0644); err != nil {
 		t.Fatal(err)
 	}
 
diff --git a/cmd/gorelease/proxy_test.go b/cmd/gorelease/proxy_test.go
index d91d983..d5fefd9 100644
--- a/cmd/gorelease/proxy_test.go
+++ b/cmd/gorelease/proxy_test.go
@@ -8,7 +8,6 @@
 	"bytes"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"sort"
@@ -30,7 +29,7 @@
 // versions is non-empty, only those modules in mod/ that match an entry in
 // proxyVersions will be included.
 func buildProxyDir(proxyVersions map[module.Version]bool, tests []*test) (proxyDir, proxyURL string, err error) {
-	proxyDir, err = ioutil.TempDir("", "gorelease-proxy")
+	proxyDir, err = os.MkdirTemp("", "gorelease-proxy")
 	if err != nil {
 		return "", "", err
 	}
@@ -101,7 +100,7 @@
 					haveMod = true
 				}
 				outPath := filepath.Join(modDir, version+af.Name)
-				if err := ioutil.WriteFile(outPath, af.Data, 0666); err != nil {
+				if err := os.WriteFile(outPath, af.Data, 0666); err != nil {
 					return "", "", err
 				}
 				continue
@@ -119,13 +118,13 @@
 		if !haveInfo {
 			outPath := filepath.Join(modDir, version+".info")
 			outContent := fmt.Sprintf(`{"Version":"%s"}`, version)
-			if err := ioutil.WriteFile(outPath, []byte(outContent), 0666); err != nil {
+			if err := os.WriteFile(outPath, []byte(outContent), 0666); err != nil {
 				return "", "", err
 			}
 		}
 		if !haveMod && goMod.Name != "" {
 			outPath := filepath.Join(modDir, version+".mod")
-			if err := ioutil.WriteFile(outPath, goMod.Data, 0666); err != nil {
+			if err := os.WriteFile(outPath, goMod.Data, 0666); err != nil {
 				return "", "", err
 			}
 		}
@@ -155,7 +154,7 @@
 		for _, v := range versions {
 			fmt.Fprintln(buf, v)
 		}
-		if err := ioutil.WriteFile(outPath, buf.Bytes(), 0666); err != nil {
+		if err := os.WriteFile(outPath, buf.Bytes(), 0666); err != nil {
 			return "", "", err
 		}
 		buf.Reset()
@@ -179,7 +178,7 @@
 func (f txtarFile) Path() string                { return f.f.Name }
 func (f txtarFile) Lstat() (os.FileInfo, error) { return txtarFileInfo{f.f}, nil }
 func (f txtarFile) Open() (io.ReadCloser, error) {
-	return ioutil.NopCloser(bytes.NewReader(f.f.Data)), nil
+	return io.NopCloser(bytes.NewReader(f.f.Data)), nil
 }
 
 type txtarFileInfo struct {
@@ -199,7 +198,7 @@
 		if err := os.MkdirAll(filepath.Dir(outPath), 0777); err != nil {
 			return err
 		}
-		if err := ioutil.WriteFile(outPath, f.Data, 0666); err != nil {
+		if err := os.WriteFile(outPath, f.Data, 0666); err != nil {
 			return err
 		}
 	}
diff --git a/cmd/macos-roots-test/root_darwin.go b/cmd/macos-roots-test/root_darwin.go
index b5bf0f7..46f8c39 100644
--- a/cmd/macos-roots-test/root_darwin.go
+++ b/cmd/macos-roots-test/root_darwin.go
@@ -9,7 +9,6 @@
 	"crypto/x509"
 	"encoding/pem"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"os/user"
@@ -142,7 +141,7 @@
 		Type: "CERTIFICATE", Bytes: cert.Raw,
 	})
 
-	f, err := ioutil.TempFile("", "cert")
+	f, err := os.CreateTemp("", "cert")
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "can't create temporary file for cert: %v", err)
 		return false
diff --git a/cmd/txtar/txtar.go b/cmd/txtar/txtar.go
index 9beb163..85219e5 100644
--- a/cmd/txtar/txtar.go
+++ b/cmd/txtar/txtar.go
@@ -34,7 +34,7 @@
 	"bytes"
 	"flag"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"path"
 	"path/filepath"
@@ -79,7 +79,7 @@
 }
 
 func extract() (err error) {
-	b, err := ioutil.ReadAll(os.Stdin)
+	b, err := io.ReadAll(os.Stdin)
 	if err != nil {
 		return err
 	}
@@ -114,7 +114,7 @@
 		if err := os.MkdirAll(filepath.Dir(fileName), 0777); err != nil {
 			return err
 		}
-		if err := ioutil.WriteFile(fileName, f.Data, 0666); err != nil {
+		if err := os.WriteFile(fileName, f.Data, 0666); err != nil {
 			return err
 		}
 	}
@@ -143,7 +143,7 @@
 			}
 			name := filepath.ToSlash(filepath.Join(p, suffix))
 
-			data, err := ioutil.ReadFile(fileName)
+			data, err := os.ReadFile(fileName)
 			if err != nil {
 				return err
 			}
@@ -172,7 +172,7 @@
 	timer := time.AfterFunc(200*time.Millisecond, func() {
 		fmt.Fprintln(os.Stderr, "Enter comment:")
 	})
-	comment, err := ioutil.ReadAll(os.Stdin)
+	comment, err := io.ReadAll(os.Stdin)
 	timer.Stop()
 	if err != nil {
 		return fmt.Errorf("reading comment from %s: %v", os.Stdin.Name(), err)
diff --git a/cmd/txtar/txtar_test.go b/cmd/txtar/txtar_test.go
index ea9f2bf..2242240 100644
--- a/cmd/txtar/txtar_test.go
+++ b/cmd/txtar/txtar_test.go
@@ -6,7 +6,6 @@
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -41,7 +40,7 @@
 	defer os.Unsetenv("SPECIAL_LOCATION")
 
 	// Expand the testdata archive into a temporary directory.
-	parentDir, err := ioutil.TempDir("", "txtar")
+	parentDir, err := os.MkdirTemp("", "txtar")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -68,7 +67,7 @@
 
 func TestUnsafePaths(t *testing.T) {
 	// Set up temporary directories for test archives.
-	parentDir, err := ioutil.TempDir("", "txtar")
+	parentDir, err := os.MkdirTemp("", "txtar")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -153,7 +152,7 @@
 	}
 
 	txtarBin.once.Do(func() {
-		exe, err := ioutil.TempFile("", "txtar-*.exe")
+		exe, err := os.CreateTemp("", "txtar-*.exe")
 		if err != nil {
 			txtarBin.err = err
 			return
diff --git a/ebnflint/ebnflint.go b/ebnflint/ebnflint.go
index bf8ad54..966dadf 100644
--- a/ebnflint/ebnflint.go
+++ b/ebnflint/ebnflint.go
@@ -11,7 +11,6 @@
 	"go/scanner"
 	"go/token"
 	"io"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 
@@ -105,7 +104,7 @@
 		r = f
 	}
 
-	src, err := ioutil.ReadAll(r)
+	src, err := io.ReadAll(r)
 	if err != nil {
 		return err
 	}
diff --git a/event/adapter/stdlib/bench_test.go b/event/adapter/stdlib/bench_test.go
index 35cdd29..da5ddd1 100644
--- a/event/adapter/stdlib/bench_test.go
+++ b/event/adapter/stdlib/bench_test.go
@@ -8,7 +8,6 @@
 	"context"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"testing"
 
@@ -94,7 +93,7 @@
 }
 
 func BenchmarkStdlibLogfDiscard(b *testing.B) {
-	eventtest.RunBenchmark(b, stdlibLogger(ioutil.Discard), stdlibLog)
+	eventtest.RunBenchmark(b, stdlibLogger(io.Discard), stdlibLog)
 }
 
 func BenchmarkStdlibPrintfDiscard(b *testing.B) {
diff --git a/event/alloc_test.go b/event/alloc_test.go
index 5144645..533ef9c 100644
--- a/event/alloc_test.go
+++ b/event/alloc_test.go
@@ -9,7 +9,7 @@
 
 import (
 	"context"
-	"io/ioutil"
+	"io"
 	"testing"
 
 	"golang.org/x/exp/event"
@@ -21,7 +21,7 @@
 	anInt := event.Int64("int", 4)
 	aString := event.String("string", "value")
 
-	e := event.NewExporter(logfmt.NewHandler(ioutil.Discard), &event.ExporterOptions{EnableNamespaces: true})
+	e := event.NewExporter(logfmt.NewHandler(io.Discard), &event.ExporterOptions{EnableNamespaces: true})
 	ctx := event.WithExporter(context.Background(), e)
 	allocs := int(testing.AllocsPerRun(5, func() {
 		event.Log(ctx, "message", aString, anInt)
diff --git a/mmap/mmap_test.go b/mmap/mmap_test.go
index 797fc5f..0716cc4 100644
--- a/mmap/mmap_test.go
+++ b/mmap/mmap_test.go
@@ -7,7 +7,7 @@
 import (
 	"bytes"
 	"io"
-	"io/ioutil"
+	"os"
 	"testing"
 )
 
@@ -21,9 +21,9 @@
 	if _, err := r.ReadAt(got, 0); err != nil && err != io.EOF {
 		t.Fatalf("ReadAt: %v", err)
 	}
-	want, err := ioutil.ReadFile(filename)
+	want, err := os.ReadFile(filename)
 	if err != nil {
-		t.Fatalf("ioutil.ReadFile: %v", err)
+		t.Fatalf("os.ReadFile: %v", err)
 	}
 	if len(got) != len(want) {
 		t.Fatalf("got %d bytes, want %d", len(got), len(want))
diff --git a/shiny/driver/internal/x11key/gen.go b/shiny/driver/internal/x11key/gen.go
index 4af0660..3ce4f1e 100644
--- a/shiny/driver/internal/x11key/gen.go
+++ b/shiny/driver/internal/x11key/gen.go
@@ -13,7 +13,6 @@
 	"bytes"
 	"fmt"
 	"go/format"
-	"io/ioutil"
 	"log"
 	"os"
 	"regexp"
@@ -68,7 +67,7 @@
 		log.Fatalf("formatting output: %v", err)
 	}
 
-	err = ioutil.WriteFile("table.go", fmted, 0644)
+	err = os.WriteFile("table.go", fmted, 0644)
 	if err != nil {
 		log.Fatalf("writing table.go: %v", err)
 	}
diff --git a/shiny/iconvg/decode_test.go b/shiny/iconvg/decode_test.go
index 82356f0..33b0b7d 100644
--- a/shiny/iconvg/decode_test.go
+++ b/shiny/iconvg/decode_test.go
@@ -11,7 +11,6 @@
 	"image/color"
 	"image/draw"
 	"image/png"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"runtime"
@@ -147,7 +146,7 @@
 
 func TestDisassembly(t *testing.T) {
 	for _, tc := range testdataTestCases {
-		ivgData, err := ioutil.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
+		ivgData, err := os.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
 		if err != nil {
 			t.Errorf("%s: ReadFile: %v", tc.filename, err)
 			continue
@@ -159,12 +158,12 @@
 		}
 		wantFilename := filepath.FromSlash(tc.filename) + ".ivg.disassembly"
 		if *updateFlag {
-			if err := ioutil.WriteFile(filepath.FromSlash(wantFilename), got, 0666); err != nil {
+			if err := os.WriteFile(filepath.FromSlash(wantFilename), got, 0666); err != nil {
 				t.Errorf("%s: WriteFile: %v", tc.filename, err)
 			}
 			continue
 		}
-		want, err := ioutil.ReadFile(wantFilename)
+		want, err := os.ReadFile(wantFilename)
 		if err != nil {
 			t.Errorf("%s: ReadFile: %v", tc.filename, err)
 			continue
@@ -180,7 +179,7 @@
 // so check that we get the original bytes after a decode + encode round-trip.
 func TestDecodeEncodeRoundTrip(t *testing.T) {
 	for _, tc := range testdataTestCases {
-		ivgData, err := ioutil.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
+		ivgData, err := os.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
 		if err != nil {
 			t.Errorf("%s: ReadFile: %v", tc.filename, err)
 			continue
@@ -226,7 +225,7 @@
 
 func TestDecodeAndRasterize(t *testing.T) {
 	for _, tc := range testdataTestCases {
-		ivgData, err := ioutil.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
+		ivgData, err := os.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
 		if err != nil {
 			t.Errorf("%s: ReadFile: %v", tc.filename, err)
 			continue
diff --git a/shiny/iconvg/encode_test.go b/shiny/iconvg/encode_test.go
index 0f41f52..57aa451 100644
--- a/shiny/iconvg/encode_test.go
+++ b/shiny/iconvg/encode_test.go
@@ -8,8 +8,8 @@
 	"bytes"
 	"flag"
 	"image/color"
-	"io/ioutil"
 	"math"
+	"os"
 	"path/filepath"
 	"runtime"
 	"strconv"
@@ -28,12 +28,12 @@
 		t.Fatalf("encoding: %v", err)
 	}
 	if *updateFlag {
-		if err := ioutil.WriteFile(filepath.FromSlash(wantFilename), got, 0666); err != nil {
+		if err := os.WriteFile(filepath.FromSlash(wantFilename), got, 0666); err != nil {
 			t.Fatalf("WriteFile: %v", err)
 		}
 		return
 	}
-	want, err := ioutil.ReadFile(filepath.FromSlash(wantFilename))
+	want, err := os.ReadFile(filepath.FromSlash(wantFilename))
 	if err != nil {
 		t.Fatalf("ReadFile: %v", err)
 	}
diff --git a/shiny/iconvg/example_test.go b/shiny/iconvg/example_test.go
index 879a1d0..7796625 100644
--- a/shiny/iconvg/example_test.go
+++ b/shiny/iconvg/example_test.go
@@ -7,7 +7,6 @@
 import (
 	"image"
 	"image/draw"
-	"io/ioutil"
 	"log"
 	"os"
 	"path/filepath"
@@ -16,7 +15,7 @@
 )
 
 func Example() {
-	ivgData, err := ioutil.ReadFile(filepath.FromSlash("testdata/action-info.lores.ivg"))
+	ivgData, err := os.ReadFile(filepath.FromSlash("testdata/action-info.lores.ivg"))
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/shiny/iconvg/upgrade_test.go b/shiny/iconvg/upgrade_test.go
index 00a1968..0b4b175 100644
--- a/shiny/iconvg/upgrade_test.go
+++ b/shiny/iconvg/upgrade_test.go
@@ -5,14 +5,14 @@
 package iconvg
 
 import (
-	"io/ioutil"
+	"os"
 	"path/filepath"
 	"testing"
 )
 
 func TestUpgradeToFileFormatVersion1(t *testing.T) {
 	for _, tc := range testdataTestCases {
-		original, err := ioutil.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
+		original, err := os.ReadFile(filepath.FromSlash(tc.filename) + ".ivg")
 		if err != nil {
 			t.Errorf("%s: ReadFile: %v", tc.filename, err)
 			continue
diff --git a/shiny/materialdesign/colornames/gen.go b/shiny/materialdesign/colornames/gen.go
index 3969d8b..f663952 100644
--- a/shiny/materialdesign/colornames/gen.go
+++ b/shiny/materialdesign/colornames/gen.go
@@ -15,7 +15,6 @@
 	"go/format"
 	"image/color"
 	"io"
-	"io/ioutil"
 	"log"
 	"net/http"
 	"strings"
@@ -174,7 +173,7 @@
 		log.Fatalf("Error while formatting code: %s\n", err)
 	}
 
-	if err := ioutil.WriteFile("table.go", fmted, 0644); err != nil {
+	if err := os.WriteFile("table.go", fmted, 0644); err != nil {
 		log.Fatalf("Error writing table.go: %s\n", err)
 	}
 }
diff --git a/shiny/materialdesign/icons/gen.go b/shiny/materialdesign/icons/gen.go
index 473d2a7..2e95bfc 100644
--- a/shiny/materialdesign/icons/gen.go
+++ b/shiny/materialdesign/icons/gen.go
@@ -15,7 +15,6 @@
 	"fmt"
 	"go/format"
 	"io"
-	"io/ioutil"
 	"log"
 	"os"
 	"path"
@@ -169,7 +168,7 @@
 	if err != nil {
 		log.Fatalf("gofmt failed: %v\n\nGenerated code:\n%s", err, raw)
 	}
-	if err := ioutil.WriteFile("data.go", formatted, 0644); err != nil {
+	if err := os.WriteFile("data.go", formatted, 0644); err != nil {
 		log.Fatalf("WriteFile failed: %s\n", err)
 	}
 
@@ -187,7 +186,7 @@
 		if err != nil {
 			log.Fatalf("gofmt failed: %v\n\nGenerated code:\n%s", err, raw)
 		}
-		if err := ioutil.WriteFile("data_test.go", formatted, 0644); err != nil {
+		if err := os.WriteFile("data_test.go", formatted, 0644); err != nil {
 			log.Fatalf("WriteFile failed: %s\n", err)
 		}
 	}
@@ -329,7 +328,7 @@
 
 func genFile(fqSVGDirName, dirName, baseName, fileName string, size float32) error {
 	fqFileName := filepath.Join(fqSVGDirName, fileName)
-	svgData, err := ioutil.ReadFile(fqFileName)
+	svgData, err := os.ReadFile(fqFileName)
 	if err != nil {
 		return err
 	}
diff --git a/shiny/text/text_test.go b/shiny/text/text_test.go
index a2eedb9..7c93212 100644
--- a/shiny/text/text_test.go
+++ b/shiny/text/text_test.go
@@ -9,7 +9,6 @@
 	"fmt"
 	"image"
 	"io"
-	"io/ioutil"
 	"math/rand"
 	"reflect"
 	"sort"
@@ -207,7 +206,7 @@
 func testRead(f *Frame, want string) error {
 	c := f.NewCaret()
 	defer c.Close()
-	asBytes, err := ioutil.ReadAll(c)
+	asBytes, err := io.ReadAll(c)
 	if err != nil {
 		return fmt.Errorf("ReadAll: %v", err)
 	}
diff --git a/shootout/k-nucleotide-parallel.go b/shootout/k-nucleotide-parallel.go
index 8b25419..75e2c8f 100644
--- a/shootout/k-nucleotide-parallel.go
+++ b/shootout/k-nucleotide-parallel.go
@@ -42,7 +42,7 @@
 	"bufio"
 	"bytes"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"runtime"
 	"sort"
@@ -114,7 +114,7 @@
 			break
 		}
 	}
-	data, err := ioutil.ReadAll(in)
+	data, err := io.ReadAll(in)
 	if err != nil {
 		fmt.Fprintln(os.Stderr, "ReadAll err:", err)
 		os.Exit(2)
diff --git a/shootout/k-nucleotide.go b/shootout/k-nucleotide.go
index efc8d95..6fc535d 100644
--- a/shootout/k-nucleotide.go
+++ b/shootout/k-nucleotide.go
@@ -42,7 +42,7 @@
 	"bufio"
 	"bytes"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"sort"
 )
@@ -115,7 +115,7 @@
 			break
 		}
 	}
-	data, err := ioutil.ReadAll(in)
+	data, err := io.ReadAll(in)
 	if err != nil {
 		fmt.Fprintln(os.Stderr, "ReadAll err:", err)
 		os.Exit(2)
diff --git a/shootout/regex-dna-parallel.go b/shootout/regex-dna-parallel.go
index 68ccd76..49bb559 100644
--- a/shootout/regex-dna-parallel.go
+++ b/shootout/regex-dna-parallel.go
@@ -40,7 +40,7 @@
 
 import (
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"regexp"
 	"runtime"
@@ -92,7 +92,7 @@
 
 func main() {
 	runtime.GOMAXPROCS(4)
-	bytes, err := ioutil.ReadAll(os.Stdin)
+	bytes, err := io.ReadAll(os.Stdin)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "can't read input: %s\n", err)
 		os.Exit(2)
diff --git a/shootout/regex-dna.go b/shootout/regex-dna.go
index 85e1939..2f44137 100644
--- a/shootout/regex-dna.go
+++ b/shootout/regex-dna.go
@@ -40,7 +40,7 @@
 
 import (
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"regexp"
 )
@@ -90,7 +90,7 @@
 }
 
 func main() {
-	bytes, err := ioutil.ReadAll(os.Stdin)
+	bytes, err := io.ReadAll(os.Stdin)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "can't read input: %s\n", err)
 		os.Exit(2)
diff --git a/sumdb/gosumcheck/main.go b/sumdb/gosumcheck/main.go
index cd7aef2..ddd7400 100644
--- a/sumdb/gosumcheck/main.go
+++ b/sumdb/gosumcheck/main.go
@@ -34,7 +34,6 @@
 	"flag"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"net/http"
 	"os"
@@ -84,7 +83,7 @@
 	conn.SetGONOSUMDB(env)
 
 	for _, arg := range flag.Args() {
-		data, err := ioutil.ReadFile(arg)
+		data, err := os.ReadFile(arg)
 		if err != nil {
 			log.Fatal(err)
 		}
@@ -201,7 +200,7 @@
 	if resp.StatusCode != 200 {
 		return nil, fmt.Errorf("GET %v: %v", target, resp.Status)
 	}
-	data, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20))
+	data, err := io.ReadAll(io.LimitReader(resp.Body, 1<<20))
 	if err != nil {
 		return nil, err
 	}
diff --git a/sumdb/internal/tlog/ct_test.go b/sumdb/internal/tlog/ct_test.go
index c2d9aeb..f8c364b 100644
--- a/sumdb/internal/tlog/ct_test.go
+++ b/sumdb/internal/tlog/ct_test.go
@@ -7,7 +7,7 @@
 import (
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"net/http"
 	"net/url"
 	"os"
@@ -80,7 +80,7 @@
 		t.Fatal(err)
 	}
 	defer resp.Body.Close()
-	data, err := ioutil.ReadAll(resp.Body)
+	data, err := io.ReadAll(resp.Body)
 	if err != nil {
 		t.Fatal(err)
 	}
