diff --git a/cmd/frontend/main.go b/cmd/frontend/main.go
index 429a90c..e1e6e62 100644
--- a/cmd/frontend/main.go
+++ b/cmd/frontend/main.go
@@ -18,9 +18,9 @@
 	"golang.org/x/pkgsite/cmd/internal/cmdconfig"
 	"golang.org/x/pkgsite/internal"
 	"golang.org/x/pkgsite/internal/config"
-	"golang.org/x/pkgsite/internal/datasource"
 	"golang.org/x/pkgsite/internal/dcensus"
 	"golang.org/x/pkgsite/internal/fetch"
+	"golang.org/x/pkgsite/internal/fetchdatasource"
 	"golang.org/x/pkgsite/internal/frontend"
 	"golang.org/x/pkgsite/internal/log"
 	"golang.org/x/pkgsite/internal/middleware"
@@ -77,7 +77,7 @@
 	}
 
 	if *directProxy {
-		ds := datasource.Options{
+		ds := fetchdatasource.Options{
 			Getters:              []fetch.ModuleGetter{fetch.NewProxyModuleGetter(proxyClient)},
 			ProxyClientForLatest: proxyClient,
 			BypassLicenseCheck:   *bypassLicenseCheck,
diff --git a/cmd/pkgsite/main.go b/cmd/pkgsite/main.go
index 4e6fab8..0110008 100644
--- a/cmd/pkgsite/main.go
+++ b/cmd/pkgsite/main.go
@@ -29,9 +29,9 @@
 
 	"github.com/google/safehtml/template"
 	"golang.org/x/pkgsite/internal"
-	"golang.org/x/pkgsite/internal/datasource"
 	"golang.org/x/pkgsite/internal/dcensus"
 	"golang.org/x/pkgsite/internal/fetch"
+	"golang.org/x/pkgsite/internal/fetchdatasource"
 	"golang.org/x/pkgsite/internal/frontend"
 	"golang.org/x/pkgsite/internal/log"
 	"golang.org/x/pkgsite/internal/middleware"
@@ -68,7 +68,7 @@
 
 func newServer(ctx context.Context, paths []string, gopathMode bool) (*frontend.Server, error) {
 	getters := buildGetters(ctx, paths, gopathMode)
-	lds := datasource.Options{
+	lds := fetchdatasource.Options{
 		Getters:            getters,
 		SourceClient:       source.NewClient(time.Second),
 		BypassLicenseCheck: true,
@@ -92,7 +92,7 @@
 			err error
 		)
 		if gopathMode {
-			mg, err = datasource.NewGOPATHModuleGetter(path)
+			mg, err = fetchdatasource.NewGOPATHModuleGetter(path)
 		} else {
 			mg, err = fetch.NewDirectoryModuleGetter("", path)
 		}
diff --git a/internal/datasource/datasource.go b/internal/fetchdatasource/fetchdatasource.go
similarity index 74%
rename from internal/datasource/datasource.go
rename to internal/fetchdatasource/fetchdatasource.go
index 3d88459..896899d 100644
--- a/internal/datasource/datasource.go
+++ b/internal/fetchdatasource/fetchdatasource.go
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package datasource provides internal.DataSource implementations backed solely
-// by a proxy instance, and backed by the local filesystem.
-// Search and other tabs are not supported by these implementations.
-package datasource
+// Package fetchdatasource provides an internal.DataSource implementation
+// that fetches modules (rather than reading them from a database).
+// Search and other tabs are not supported.
+package fetchdatasource
 
 import (
 	"context"
@@ -26,14 +26,14 @@
 	"golang.org/x/pkgsite/internal/version"
 )
 
-// DataSource implements the internal.DataSource interface, by trying a list of
+// FetchDataSource implements the internal.DataSource interface, by trying a list of
 // fetch.ModuleGetters to fetch modules and caching the results.
-type DataSource struct {
+type FetchDataSource struct {
 	opts  Options
 	cache *lru.Cache
 }
 
-// Options are parameters for creating a new DataSource.
+// Options are parameters for creating a new FetchDataSource.
 type Options struct {
 	// List of getters to try, in order.
 	Getters []fetch.ModuleGetter
@@ -44,8 +44,8 @@
 	BypassLicenseCheck   bool
 }
 
-// New creates a new DataSource from the options.
-func (o Options) New() *DataSource {
+// New creates a new FetchDataSource from the options.
+func (o Options) New() *FetchDataSource {
 	cache, err := lru.New(maxCachedModules)
 	if err != nil {
 		// Can only happen if size is bad, and we control it.
@@ -55,7 +55,7 @@
 	// Copy getters slice so caller doesn't modify us.
 	opts.Getters = make([]fetch.ModuleGetter, len(opts.Getters))
 	copy(opts.Getters, o.Getters)
-	return &DataSource{
+	return &FetchDataSource{
 		opts:  opts,
 		cache: cache,
 	}
@@ -70,7 +70,7 @@
 const maxCachedModules = 100
 
 // cacheGet returns information from the cache if it is present, and (nil, nil) otherwise.
-func (ds *DataSource) cacheGet(path, version string) (*internal.Module, error) {
+func (ds *FetchDataSource) cacheGet(path, version string) (*internal.Module, error) {
 	// Look for an exact match first, then use LocalVersion, as for a
 	// directory-based or GOPATH-mode module.
 	for _, v := range []string{version, fetch.LocalVersion} {
@@ -83,14 +83,14 @@
 }
 
 // cachePut puts information into the cache.
-func (ds *DataSource) cachePut(path, version string, m *internal.Module, err error) {
+func (ds *FetchDataSource) cachePut(path, version string, m *internal.Module, err error) {
 	ds.cache.Add(internal.Modver{Path: path, Version: version}, cacheEntry{m, err})
 }
 
 // getModule gets the module at the given path and version. It first checks the
 // cache, and if it isn't there it then tries to fetch it.
-func (ds *DataSource) getModule(ctx context.Context, modulePath, version string) (_ *internal.Module, err error) {
-	defer derrors.Wrap(&err, "getModule(%q, %q)", modulePath, version)
+func (ds *FetchDataSource) getModule(ctx context.Context, modulePath, version string) (_ *internal.Module, err error) {
+	defer derrors.Wrap(&err, "FetchDataSource.getModule(%q, %q)", modulePath, version)
 
 	mod, err := ds.cacheGet(modulePath, version)
 	if mod != nil || err != nil {
@@ -121,11 +121,11 @@
 
 // fetch fetches a module using the configured ModuleGetters.
 // It tries each getter in turn until it finds one that has the module.
-func (ds *DataSource) fetch(ctx context.Context, modulePath, version string) (_ *internal.Module, err error) {
-	log.Infof(ctx, "DataSource: fetching %s@%s", modulePath, version)
+func (ds *FetchDataSource) fetch(ctx context.Context, modulePath, version string) (_ *internal.Module, err error) {
+	log.Infof(ctx, "FetchDataSource: fetching %s@%s", modulePath, version)
 	start := time.Now()
 	defer func() {
-		log.Infof(ctx, "DataSource: fetched %s@%s in %s with error %v", modulePath, version, time.Since(start), err)
+		log.Infof(ctx, "FetchDataSource: fetched %s@%s in %s with error %v", modulePath, version, time.Since(start), err)
 	}()
 	for _, g := range ds.opts.Getters {
 		fr := fetch.FetchModule(ctx, modulePath, version, g, ds.opts.SourceClient)
@@ -151,8 +151,8 @@
 
 // findModule finds the module with longest module path containing the given
 // package path. It returns an error if no module is found.
-func (ds *DataSource) findModule(ctx context.Context, pkgPath, modulePath, version string) (_ *internal.Module, err error) {
-	defer derrors.Wrap(&err, "findModule(%q, %q, %q)", pkgPath, modulePath, version)
+func (ds *FetchDataSource) findModule(ctx context.Context, pkgPath, modulePath, version string) (_ *internal.Module, err error) {
+	defer derrors.Wrap(&err, "FetchDataSource.findModule(%q, %q, %q)", pkgPath, modulePath, version)
 
 	if modulePath != internal.UnknownModulePath {
 		return ds.getModule(ctx, modulePath, version)
@@ -171,8 +171,8 @@
 }
 
 // GetUnitMeta returns information about a path.
-func (ds *DataSource) GetUnitMeta(ctx context.Context, path, requestedModulePath, requestedVersion string) (_ *internal.UnitMeta, err error) {
-	defer derrors.Wrap(&err, "GetUnitMeta(%q, %q, %q)", path, requestedModulePath, requestedVersion)
+func (ds *FetchDataSource) GetUnitMeta(ctx context.Context, path, requestedModulePath, requestedVersion string) (_ *internal.UnitMeta, err error) {
+	defer derrors.Wrap(&err, "FetchDataSource.GetUnitMeta(%q, %q, %q)", path, requestedModulePath, requestedVersion)
 
 	module, err := ds.findModule(ctx, path, requestedModulePath, requestedVersion)
 	if err != nil {
@@ -191,8 +191,8 @@
 
 // GetUnit returns information about a unit. Both the module path and package
 // path must be known.
-func (ds *DataSource) GetUnit(ctx context.Context, um *internal.UnitMeta, fields internal.FieldSet, bc internal.BuildContext) (_ *internal.Unit, err error) {
-	defer derrors.Wrap(&err, "GetUnit(%q, %q)", um.Path, um.ModulePath)
+func (ds *FetchDataSource) GetUnit(ctx context.Context, um *internal.UnitMeta, fields internal.FieldSet, bc internal.BuildContext) (_ *internal.Unit, err error) {
+	defer derrors.Wrap(&err, "FetchDataSource.GetUnit(%q, %q)", um.Path, um.ModulePath)
 
 	m, err := ds.getModule(ctx, um.ModulePath, um.Version)
 	if err != nil {
@@ -215,8 +215,8 @@
 }
 
 // GetLatestInfo returns latest information for unitPath and modulePath.
-func (ds *DataSource) GetLatestInfo(ctx context.Context, unitPath, modulePath string, latestUnitMeta *internal.UnitMeta) (latest internal.LatestInfo, err error) {
-	defer derrors.Wrap(&err, "GetLatestInfo(ctx, %q, %q)", unitPath, modulePath)
+func (ds *FetchDataSource) GetLatestInfo(ctx context.Context, unitPath, modulePath string, latestUnitMeta *internal.UnitMeta) (latest internal.LatestInfo, err error) {
+	defer derrors.Wrap(&err, "FetchDataSource.GetLatestInfo(ctx, %q, %q)", unitPath, modulePath)
 
 	if ds.opts.ProxyClientForLatest == nil {
 		return internal.LatestInfo{}, nil
@@ -244,7 +244,7 @@
 // of the latest version found in the proxy by iterating through vN versions.
 // This function does not attempt to find whether the full path exists
 // in the new major version.
-func (ds *DataSource) getLatestMajorVersion(ctx context.Context, fullPath, modulePath string) (_ string, _ string, err error) {
+func (ds *FetchDataSource) getLatestMajorVersion(ctx context.Context, fullPath, modulePath string) (_ string, _ string, err error) {
 	// We are checking if the full path is valid so that we can forward the error if not.
 	seriesPath := internal.SeriesPathForModule(modulePath)
 	info, err := ds.opts.ProxyClientForLatest.Info(ctx, seriesPath, version.Latest)
@@ -286,11 +286,11 @@
 }
 
 // GetNestedModules is not implemented.
-func (ds *DataSource) GetNestedModules(ctx context.Context, modulePath string) ([]*internal.ModuleInfo, error) {
+func (ds *FetchDataSource) GetNestedModules(ctx context.Context, modulePath string) ([]*internal.ModuleInfo, error) {
 	return nil, nil
 }
 
 // GetModuleReadme is not implemented.
-func (*DataSource) GetModuleReadme(ctx context.Context, modulePath, resolvedVersion string) (*internal.Readme, error) {
+func (*FetchDataSource) GetModuleReadme(ctx context.Context, modulePath, resolvedVersion string) (*internal.Readme, error) {
 	return nil, nil
 }
diff --git a/internal/datasource/datasource_test.go b/internal/fetchdatasource/fetchdatasource_test.go
similarity index 98%
rename from internal/datasource/datasource_test.go
rename to internal/fetchdatasource/fetchdatasource_test.go
index dbaf735..c95ee2a 100644
--- a/internal/datasource/datasource_test.go
+++ b/internal/fetchdatasource/fetchdatasource_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package datasource
+package fetchdatasource
 
 import (
 	"context"
@@ -113,7 +113,7 @@
 	}
 }
 
-func setup(t *testing.T, testModules []*proxytest.Module, bypassLicenseCheck bool) (context.Context, *DataSource, func()) {
+func setup(t *testing.T, testModules []*proxytest.Module, bypassLicenseCheck bool) (context.Context, *FetchDataSource, func()) {
 	t.Helper()
 	ctx, cancel := context.WithTimeout(context.Background(), 40*time.Second)
 
diff --git a/internal/datasource/gopath_getter.go b/internal/fetchdatasource/gopath_getter.go
similarity index 97%
rename from internal/datasource/gopath_getter.go
rename to internal/fetchdatasource/gopath_getter.go
index 26f19c3..8b4b9a3 100644
--- a/internal/datasource/gopath_getter.go
+++ b/internal/fetchdatasource/gopath_getter.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package datasource
+package fetchdatasource
 
 import (
 	"fmt"
