diff --git a/gopls/internal/regtest/workspace_test.go b/gopls/internal/regtest/workspace_test.go
index 77d55be..9b76436 100644
--- a/gopls/internal/regtest/workspace_test.go
+++ b/gopls/internal/regtest/workspace_test.go
@@ -119,6 +119,38 @@
 	}
 }
 
+// Tests that basic functionality works without ExperimentalWorkspaceModule.
+func TestNoWorkspaceModule(t *testing.T) {
+	const mod = `
+-- go.mod --
+module mod.com
+
+go 1.14
+-- main.go --
+package main
+
+import "mod.com/pkg/inner"
+
+func main() {
+	inner.Hi()
+}
+-- pkg/inner/inner.go --
+package inner
+
+func Hi() {}
+`
+	withOptions(
+		EditorConfig{
+			WithoutExperimentalWorkspaceModule: true,
+		},
+	).run(t, mod, func(t *testing.T, env *Env) {
+		env.OpenFile("main.go")
+		env.Await(
+			NoDiagnostics("main.go"),
+		)
+	})
+}
+
 // Make sure that analysis diagnostics are cleared for the whole package when
 // the only opened file is closed. This test was inspired by the experience in
 // VS Code, where clicking on a reference result triggers a
diff --git a/internal/lsp/cache/session.go b/internal/lsp/cache/session.go
index 4986c00..44792f2 100644
--- a/internal/lsp/cache/session.go
+++ b/internal/lsp/cache/session.go
@@ -251,6 +251,14 @@
 func findWorkspaceModules(ctx context.Context, root span.URI, options *source.Options) (map[span.URI]*moduleRoot, error) {
 	// Walk the view's folder to find all modules in the view.
 	modules := make(map[span.URI]*moduleRoot)
+	if !options.ExperimentalWorkspaceModule {
+		path := filepath.Join(root.Filename(), "go.mod")
+		if info, _ := os.Stat(path); info != nil {
+			m := newModule(ctx, span.URIFromPath(path))
+			modules[m.rootURI] = m
+		}
+		return modules, nil
+	}
 	return modules, filepath.Walk(root.Filename(), func(path string, info os.FileInfo, err error) error {
 		if err != nil {
 			// Probably a permission error. Keep looking.
@@ -272,11 +280,6 @@
 			m := newModule(ctx, span.URIFromPath(path))
 			modules[m.rootURI] = m
 		}
-		// If we are not using experimental workspace modules, don't continue
-		// the search past the view's root.
-		if !options.ExperimentalWorkspaceModule {
-			return filepath.SkipDir
-		}
 		return nil
 	})
 }
diff --git a/internal/lsp/fake/editor.go b/internal/lsp/fake/editor.go
index 38546af..a15a947 100644
--- a/internal/lsp/fake/editor.go
+++ b/internal/lsp/fake/editor.go
@@ -84,6 +84,12 @@
 
 	// EnableStaticcheck enables staticcheck analyzers.
 	EnableStaticcheck bool
+
+	// WithoutExperimentalWorkspaceModule disables the experimental workspace
+	// module.
+	// TODO(rstambler): This mode is temporary and should be removed when
+	// golang.org/cl/258518 is merged.
+	WithoutExperimentalWorkspaceModule bool
 }
 
 // NewEditor Creates a new Editor.
@@ -193,9 +199,11 @@
 	if e.Config.EnableStaticcheck {
 		config["staticcheck"] = true
 	}
-	// Default to using the experimental workspace module mode.
-	config["experimentalWorkspaceModule"] = true
-
+	// Default to using the experimental workspace module mode, unless
+	// explicitly configured.
+	if !e.Config.WithoutExperimentalWorkspaceModule {
+		config["experimentalWorkspaceModule"] = true
+	}
 	return config
 }
 
