From b105f0ad875ed8370b1174eed724af6ca92bf684 Mon Sep 17 00:00:00 2001
From: bryanl <bryanliles@gmail.com>
Date: Sun, 1 Apr 2018 16:11:38 -0400
Subject: [PATCH] Rename component namespaces to modules

Rename component namespaces to modules to remove the ambiguous bit.

Signed-off-by: bryanl <bryanliles@gmail.com>
---
 actions/actions.go                            |  6 +-
 actions/actions_test.go                       |  4 +-
 actions/component_list.go                     |  8 +-
 actions/component_list_test.go                | 24 +++---
 actions/component_rm.go                       |  2 +-
 actions/env_add.go                            |  2 +-
 actions/env_add_test.go                       | 12 +--
 actions/env_set.go                            |  2 +-
 actions/env_set_test.go                       | 24 +++---
 actions/env_targets.go                        | 10 +--
 actions/env_targets_test.go                   | 38 ++++----
 actions/import.go                             | 10 +--
 actions/import_test.go                        | 24 +++---
 actions/init.go                               |  4 +-
 actions/init_test.go                          |  2 +-
 actions/{ns_create.go => module_create.go}    | 32 +++----
 ...s_create_test.go => module_create_test.go} | 26 +++---
 actions/{ns_list.go => module_list.go}        | 30 +++----
 .../{ns_list_test.go => module_list_test.go}  |  8 +-
 actions/param_list.go                         | 10 +--
 actions/param_list_test.go                    | 20 ++---
 actions/param_set.go                          |  6 +-
 actions/param_set_test.go                     |  8 +-
 actions/pkg_describe.go                       |  4 +-
 actions/pkg_install.go                        |  4 +-
 actions/prototype_describe.go                 |  2 +-
 actions/prototype_list.go                     |  2 +-
 actions/prototype_search.go                   |  2 +-
 actions/prototype_use.go                      |  4 +-
 actions/registry_add.go                       |  4 +-
 actions/registry_describe.go                  |  2 +-
 actions/testdata/ns/list/output.txt           |  4 +-
 actions/validate.go                           |  4 +-
 actions/validate_test.go                      |  2 +-
 cmd/actions.go                                | 24 +++---
 cmd/component_list.go                         | 10 +--
 cmd/component_list_test.go                    |  6 +-
 cmd/env_add.go                                | 12 +--
 cmd/env_add_test.go                           | 12 +--
 cmd/env_set.go                                |  8 +-
 cmd/env_set_test.go                           |  8 +-
 cmd/env_targets.go                            | 14 +--
 cmd/env_targets_test.go                       |  8 +-
 cmd/flags.go                                  |  1 +
 cmd/import.go                                 | 14 +--
 cmd/init.go                                   |  2 +-
 cmd/init_test.go                              |  2 +-
 cmd/initname_string.go                        | 19 +---
 cmd/{ns.go => module.go}                      | 12 +--
 cmd/{ns_create.go => module_create.go}        | 16 ++--
 ...s_create_test.go => module_create_test.go} | 10 +--
 cmd/{ns_list.go => module_list.go}            | 14 +--
 cmd/{ns_list_test.go => module_list_test.go}  |  6 +-
 cmd/param.go                                  |  6 --
 cmd/param_diff.go                             |  8 +-
 cmd/param_list.go                             |  6 +-
 cmd/param_list_test.go                        |  2 +-
 cmd/validate.go                               |  2 +-
 cmd/validate_test.go                          |  2 +-
 component/component.go                        | 14 +--
 component/create.go                           | 14 +--
 component/delete.go                           |  2 +-
 component/jsonnet.go                          | 18 ++--
 component/jsonnet_test.go                     |  2 +-
 component/manager.go                          | 50 +++++------
 component/manager_test.go                     | 14 +--
 component/mocks/Component.go                  |  8 +-
 component/mocks/Manager.go                    | 84 +++++++++---------
 component/mocks/{Namespace.go => Module.go}   | 24 +++---
 component/{namespace.go => module.go}         | 86 +++++++++----------
 .../{namespace_test.go => module_test.go}     | 12 +--
 component/yaml.go                             | 26 +++---
 component/yaml_test.go                        |  4 +-
 docs/cli-reference/ks.md                      |  2 +-
 docs/cli-reference/ks_component_list.md       |  6 +-
 docs/cli-reference/ks_env_targets.md          |  3 +-
 docs/cli-reference/ks_import.md               |  6 +-
 docs/cli-reference/{ks_ns.md => ks_module.md} | 12 +--
 .../{ks_ns_create.md => ks_module_create.md}  |  6 +-
 .../{ks_ns_list.md => ks_module_list.md}      |  8 +-
 docs/cli-reference/ks_param_list.md           |  6 +-
 e2e/component_test.go                         |  2 +-
 e2e/env_test.go                               |  4 +-
 e2e/{ns_test.go => module_test.go}            | 22 ++---
 e2e/testdata/output/module/create/invalid.txt |  1 +
 .../output/{ns => module}/list/invalid.txt    |  0
 e2e/testdata/output/module/list/output.txt    |  3 +
 e2e/testdata/output/ns/create/invalid.txt     |  1 -
 e2e/testdata/output/ns/list/output.txt        |  3 -
 metadata/component.go                         |  6 +-
 metadata/environment.go                       |  4 +-
 metadata/interface.go                         |  2 +-
 pkg/env/params.go                             |  4 +-
 pkg/kubecfg/param_diff.go                     |  2 +-
 pkg/pipeline/pipeline.go                      | 16 ++--
 pkg/pipeline/pipeline_test.go                 | 46 +++++-----
 testdata/schema-v1.json                       |  8 +-
 97 files changed, 542 insertions(+), 559 deletions(-)
 rename actions/{ns_create.go => module_create.go} (61%)
 rename actions/{ns_create_test.go => module_create_test.go} (70%)
 rename actions/{ns_list.go => module_list.go} (70%)
 rename actions/{ns_list_test.go => module_list_test.go} (88%)
 rename cmd/{ns.go => module.go} (81%)
 rename cmd/{ns_create.go => module_create.go} (74%)
 rename cmd/{ns_create_test.go => module_create_test.go} (81%)
 rename cmd/{ns_list.go => module_list.go} (73%)
 rename cmd/{ns_list_test.go => module_list_test.go} (89%)
 rename component/mocks/{Namespace.go => Module.go} (80%)
 rename component/{namespace.go => module.go} (67%)
 rename component/{namespace_test.go => module_test.go} (88%)
 rename docs/cli-reference/{ks_ns.md => ks_module.md} (62%)
 rename docs/cli-reference/{ks_ns_create.md => ks_module_create.md} (72%)
 rename docs/cli-reference/{ks_ns_list.md => ks_module_list.md} (64%)
 rename e2e/{ns_test.go => module_test.go} (71%)
 create mode 100644 e2e/testdata/output/module/create/invalid.txt
 rename e2e/testdata/output/{ns => module}/list/invalid.txt (100%)
 create mode 100644 e2e/testdata/output/module/list/output.txt
 delete mode 100644 e2e/testdata/output/ns/create/invalid.txt
 delete mode 100644 e2e/testdata/output/ns/list/output.txt

diff --git a/actions/actions.go b/actions/actions.go
index dc7036fa..2059cccf 100644
--- a/actions/actions.go
+++ b/actions/actions.go
@@ -54,8 +54,10 @@ const (
 	OptionLibName = "lib-name"
 	// OptionName is name option.
 	OptionName = "name"
-	// OptionNamespaceName is namespaceName option.
-	OptionNamespaceName = "namespace-name"
+	// OptionModule is component module option.
+	OptionModule = "module"
+	// OptionNamespace is a cluster namespace option
+	OptionNamespace = "namespace"
 	// OptionNewEnvName is newEnvName option. Used for renaming environments.
 	OptionNewEnvName = "new-env-name"
 	// OptionOutput is output option.
diff --git a/actions/actions_test.go b/actions/actions_test.go
index 526012bf..f643969c 100644
--- a/actions/actions_test.go
+++ b/actions/actions_test.go
@@ -101,8 +101,8 @@ func stageFile(t *testing.T, fs afero.Fs, src, dest string) {
 	require.NoError(t, err)
 }
 
-func mockNsWithName(name string) *cmocks.Namespace {
-	m := &cmocks.Namespace{}
+func mockNsWithName(name string) *cmocks.Module {
+	m := &cmocks.Module{}
 	m.On("Name").Return(name)
 	return m
 }
diff --git a/actions/component_list.go b/actions/component_list.go
index e7598a65..305903e9 100644
--- a/actions/component_list.go
+++ b/actions/component_list.go
@@ -36,10 +36,10 @@ func RunComponentList(m map[string]interface{}) error {
 	return cl.Run()
 }
 
-// ComponentList create a list of components in a namespace.
+// ComponentList create a list of components in a module.
 type ComponentList struct {
 	app    app.App
-	nsName string
+	module string
 	output string
 	cm     component.Manager
 	out    io.Writer
@@ -51,7 +51,7 @@ func NewComponentList(m map[string]interface{}) (*ComponentList, error) {
 
 	cl := &ComponentList{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 		output: ol.loadString(OptionOutput),
 
 		cm:  component.DefaultManager,
@@ -67,7 +67,7 @@ func NewComponentList(m map[string]interface{}) (*ComponentList, error) {
 
 // Run runs the ComponentList action.
 func (cl *ComponentList) Run() error {
-	ns, err := cl.cm.Namespace(cl.app, cl.nsName)
+	ns, err := cl.cm.Module(cl.app, cl.module)
 	if err != nil {
 		return err
 	}
diff --git a/actions/component_list_test.go b/actions/component_list_test.go
index ff6a1051..60984073 100644
--- a/actions/component_list_test.go
+++ b/actions/component_list_test.go
@@ -28,7 +28,7 @@ import (
 
 func TestComponentList(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := ""
+		module := ""
 		output := ""
 
 		c := &cmocks.Component{}
@@ -36,16 +36,16 @@ func TestComponentList(t *testing.T) {
 
 		cs := []component.Component{c}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("Components").Return(cs, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "").Return(ns, nil)
+		cm.On("Module", mock.Anything, "").Return(ns, nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionOutput:        output,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionOutput: output,
 		}
 
 		a, err := NewComponentList(in)
@@ -65,7 +65,7 @@ func TestComponentList(t *testing.T) {
 
 func TestComponentList_wide(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := ""
+		module := ""
 		output := "wide"
 
 		summary := []component.Summary{
@@ -76,16 +76,16 @@ func TestComponentList_wide(t *testing.T) {
 
 		cs := []component.Component{c}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("Components").Return(cs, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "").Return(ns, nil)
+		cm.On("Module", mock.Anything, "").Return(ns, nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionOutput:        output,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionOutput: output,
 		}
 
 		a, err := NewComponentList(in)
diff --git a/actions/component_rm.go b/actions/component_rm.go
index 985ad96f..3ac8e6df 100644
--- a/actions/component_rm.go
+++ b/actions/component_rm.go
@@ -30,7 +30,7 @@ func RunComponentRm(m map[string]interface{}) error {
 	return cr.Run()
 }
 
-// ComponentRm create a list of components in a namespace.
+// ComponentRm removes a component from a module.
 type ComponentRm struct {
 	app  app.App
 	name string
diff --git a/actions/env_add.go b/actions/env_add.go
index d5269c9f..26af36d5 100644
--- a/actions/env_add.go
+++ b/actions/env_add.go
@@ -50,7 +50,7 @@ func NewEnvAdd(m map[string]interface{}) (*EnvAdd, error) {
 		app:         ol.loadApp(),
 		envName:     ol.loadString(OptionEnvName),
 		server:      ol.loadString(OptionServer),
-		namespace:   ol.loadString(OptionNamespaceName),
+		namespace:   ol.loadString(OptionModule),
 		k8sSpecFlag: ol.loadString(OptionSpecFlag),
 		isOverride:  ol.loadBool(OptionOverride),
 
diff --git a/actions/env_add_test.go b/actions/env_add_test.go
index 48fbb1e8..e5515da0 100644
--- a/actions/env_add_test.go
+++ b/actions/env_add_test.go
@@ -34,12 +34,12 @@ func TestEnvAdd(t *testing.T) {
 		aIsOverride := false
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       aName,
-			OptionServer:        aServer,
-			OptionNamespaceName: aNamespace,
-			OptionSpecFlag:      aK8sSpecFlag,
-			OptionOverride:      aIsOverride,
+			OptionApp:      appMock,
+			OptionEnvName:  aName,
+			OptionServer:   aServer,
+			OptionModule:   aNamespace,
+			OptionSpecFlag: aK8sSpecFlag,
+			OptionOverride: aIsOverride,
 		}
 
 		a, err := NewEnvAdd(in)
diff --git a/actions/env_set.go b/actions/env_set.go
index e18e1737..2458b4e5 100644
--- a/actions/env_set.go
+++ b/actions/env_set.go
@@ -67,7 +67,7 @@ func NewEnvSet(m map[string]interface{}) (*EnvSet, error) {
 		app:       ol.loadApp(),
 		envName:   ol.loadString(OptionEnvName),
 		newName:   ol.loadOptionalString(OptionNewEnvName),
-		newNsName: ol.loadOptionalString(OptionNamespaceName),
+		newNsName: ol.loadOptionalString(OptionNamespace),
 
 		envRenameFn: env.Rename,
 		updateEnvFn: updateEnv,
diff --git a/actions/env_set_test.go b/actions/env_set_test.go
index 8cff81f8..bac47661 100644
--- a/actions/env_set_test.go
+++ b/actions/env_set_test.go
@@ -62,12 +62,12 @@ func TestEnvSet_name(t *testing.T) {
 func TestEnvSet_namespace(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsName := "ns2"
+		namespace := "ns2"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsName,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  namespace,
 		}
 		a, err := NewEnvSet(in)
 		require.NoError(t, err)
@@ -80,7 +80,7 @@ func TestEnvSet_namespace(t *testing.T) {
 
 		updatedSpec := &app.EnvironmentSpec{
 			Destination: &app.EnvironmentDestinationSpec{
-				Namespace: nsName,
+				Namespace: namespace,
 			},
 		}
 
@@ -96,13 +96,13 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
 		newName := "dev"
-		nsName := "ns2"
+		namespace := "ns2"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNewEnvName:    newName,
-			OptionNamespaceName: nsName,
+			OptionApp:        appMock,
+			OptionEnvName:    envName,
+			OptionNewEnvName: newName,
+			OptionModule:     namespace,
 		}
 
 		a, err := NewEnvSet(in)
@@ -118,7 +118,7 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 
 		a.updateEnvFn = func(a app.App, name string, spec *app.EnvironmentSpec, override bool) error {
 			assert.Equal(t, envName, name)
-			assert.Equal(t, nsName, spec.Destination.Namespace)
+			assert.Equal(t, namespace, spec.Destination.Namespace)
 			assert.False(t, override)
 
 			return nil
@@ -132,7 +132,7 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 
 		updatedSpec := &app.EnvironmentSpec{
 			Destination: &app.EnvironmentDestinationSpec{
-				Namespace: nsName,
+				Namespace: namespace,
 			},
 		}
 
diff --git a/actions/env_targets.go b/actions/env_targets.go
index d7e31867..2e965093 100644
--- a/actions/env_targets.go
+++ b/actions/env_targets.go
@@ -34,7 +34,7 @@ func RunEnvTargets(m map[string]interface{}) error {
 type EnvTargets struct {
 	app     app.App
 	envName string
-	nsNames []string
+	modules []string
 	cm      component.Manager
 }
 
@@ -45,7 +45,7 @@ func NewEnvTargets(m map[string]interface{}) (*EnvTargets, error) {
 	et := &EnvTargets{
 		app:     ol.loadApp(),
 		envName: ol.loadString(OptionEnvName),
-		nsNames: ol.loadStringSlice(OptionNamespaceName),
+		modules: ol.loadStringSlice(OptionModule),
 
 		cm: component.DefaultManager,
 	}
@@ -64,12 +64,12 @@ func (et *EnvTargets) Run() error {
 		return err
 	}
 
-	for _, nsName := range et.nsNames {
-		_, err := et.cm.Namespace(et.app, nsName)
+	for _, module := range et.modules {
+		_, err := et.cm.Module(et.app, module)
 		if err != nil {
 			return err
 		}
 	}
 
-	return et.app.UpdateTargets(et.envName, et.nsNames)
+	return et.app.UpdateTargets(et.envName, et.modules)
 }
diff --git a/actions/env_targets_test.go b/actions/env_targets_test.go
index 7aff7b87..6763e508 100644
--- a/actions/env_targets_test.go
+++ b/actions/env_targets_test.go
@@ -30,25 +30,25 @@ import (
 func TestEnvTargets(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		appMock.On("Environment", "default").Return(env, nil)
-		appMock.On("UpdateTargets", envName, nsNames).Return(nil)
+		appMock.On("UpdateTargets", envName, modules).Return(nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "foo").Return(ns, nil)
+		cm.On("Module", mock.Anything, "foo").Return(ns, nil)
 
 		a.cm = cm
 
@@ -57,28 +57,28 @@ func TestEnvTargets(t *testing.T) {
 	})
 }
 
-func TestEnvTargets_invalid_namespace(t *testing.T) {
+func TestEnvTargets_invalid_module(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		appMock.On("Environment", "default").Return(env, nil)
-		appMock.On("UpdateTargets", envName, nsNames).Return(nil)
+		appMock.On("UpdateTargets", envName, modules).Return(nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "foo").Return(ns, errors.New("fail"))
+		cm.On("Module", mock.Anything, "foo").Return(ns, errors.New("fail"))
 
 		a.cm = cm
 
@@ -90,16 +90,16 @@ func TestEnvTargets_invalid_namespace(t *testing.T) {
 func TestEnvTargets_invalid_environment(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "invalid"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		envErr := errors.New("environment invalid was not found")
 		appMock.On("Environment", "invalid").Return(env, envErr)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
diff --git a/actions/import.go b/actions/import.go
index 9d10b89f..98624c8b 100644
--- a/actions/import.go
+++ b/actions/import.go
@@ -42,19 +42,19 @@ func RunImport(m map[string]interface{}) error {
 // Import imports files or directories into ksonnet.
 type Import struct {
 	app    app.App
-	nsName string
+	module string
 	path   string
 	cm     component.Manager
 }
 
-// NewImport creates an instance of Import. `nsName` is the name of the component and
+// NewImport creates an instance of Import. `module` is the name of the component and
 // entity is the file or directory to import.
 func NewImport(m map[string]interface{}) (*Import, error) {
 	ol := newOptionLoader(m)
 
 	i := &Import{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 		path:   ol.loadString(OptionPath),
 
 		cm: component.DefaultManager,
@@ -106,8 +106,8 @@ func (i *Import) Run() error {
 
 func (i *Import) importFile(fileName string) error {
 	var name bytes.Buffer
-	if i.nsName != "" {
-		name.WriteString(i.nsName + "/")
+	if i.module != "" {
+		name.WriteString(i.module + "/")
 	}
 
 	base := filepath.Base(fileName)
diff --git a/actions/import_test.go b/actions/import_test.go
index fb19f8d3..f0a89d34 100644
--- a/actions/import_test.go
+++ b/actions/import_test.go
@@ -29,15 +29,15 @@ import (
 
 func TestImport_file(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/file.yaml"
 
 		stageFile(t, appMock.Fs(), "import/file.yaml", path)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
@@ -56,15 +56,15 @@ func TestImport_file(t *testing.T) {
 
 func TestImport_directory(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/import"
 
 		stageFile(t, appMock.Fs(), "import/file.yaml", "/import/file.yaml")
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
@@ -83,13 +83,13 @@ func TestImport_directory(t *testing.T) {
 
 func TestImport_invalid_file(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/import"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
diff --git a/actions/init.go b/actions/init.go
index 5ef2f716..8723871b 100644
--- a/actions/init.go
+++ b/actions/init.go
@@ -27,7 +27,7 @@ const (
 	defaultIncubatorURI     = "github.com/ksonnet/parts/tree/master/" + defaultIncubatorRegName
 )
 
-// RunInit creates a namespace.
+// RunInit initializes an app.
 func RunInit(m map[string]interface{}) error {
 	i, err := NewInit(m)
 	if err != nil {
@@ -68,7 +68,7 @@ func NewInit(m map[string]interface{}) (*Init, error) {
 		rootPath:              ol.loadString(OptionRootPath),
 		k8sSpecFlag:           ol.loadString(OptionSpecFlag),
 		serverURI:             ol.loadOptionalString(OptionServer),
-		namespace:             ol.loadString(OptionNamespaceName),
+		namespace:             ol.loadString(OptionNamespace),
 		skipDefaultRegistries: ol.loadBool(OptionSkipDefaultRegistries),
 
 		appInitFn:       appinit.Init,
diff --git a/actions/init_test.go b/actions/init_test.go
index 6a77915e..63598dc3 100644
--- a/actions/init_test.go
+++ b/actions/init_test.go
@@ -57,7 +57,7 @@ func TestInit(t *testing.T) {
 					OptionRootPath:              aRootPath,
 					OptionSpecFlag:              aK8sSpecFlag,
 					OptionServer:                aServerURI,
-					OptionNamespaceName:         aNamespace,
+					OptionNamespace:             aNamespace,
 					OptionSkipDefaultRegistries: tc.skipRegistries,
 				}
 
diff --git a/actions/ns_create.go b/actions/module_create.go
similarity index 61%
rename from actions/ns_create.go
rename to actions/module_create.go
index 221706ff..630f9474 100644
--- a/actions/ns_create.go
+++ b/actions/module_create.go
@@ -21,43 +21,43 @@ import (
 	"github.com/pkg/errors"
 )
 
-// RunNsCreate creates a namespace.
-func RunNsCreate(m map[string]interface{}) error {
-	nc, err := NewNsCreate(m)
+// RunModuleCreate creates a module.
+func RunModuleCreate(m map[string]interface{}) error {
+	mc, err := NewModuleCreate(m)
 	if err != nil {
 		return err
 	}
 
-	return nc.Run()
+	return mc.Run()
 }
 
-// NsCreate creates a component namespace
-type NsCreate struct {
+// ModuleCreate creates a component module
+type ModuleCreate struct {
 	app    app.App
-	nsName string
+	module string
 	cm     component.Manager
 }
 
-// NewNsCreate creates an instance of NsCreate.
-func NewNsCreate(m map[string]interface{}) (*NsCreate, error) {
+// NewModuleCreate creates an instance of ModuleCreate.
+func NewModuleCreate(m map[string]interface{}) (*ModuleCreate, error) {
 	ol := newOptionLoader(m)
 
-	et := &NsCreate{
+	mc := &ModuleCreate{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 
 		cm: component.DefaultManager,
 	}
 
-	return et, nil
+	return mc, nil
 }
 
 // Run runs that ns create action.
-func (nc *NsCreate) Run() error {
-	_, err := nc.cm.Namespace(nc.app, nc.nsName)
+func (mc *ModuleCreate) Run() error {
+	_, err := mc.cm.Module(mc.app, mc.module)
 	if err == nil {
-		return errors.Errorf("namespace %q already exists", nc.nsName)
+		return errors.Errorf("module %q already exists", mc.module)
 	}
 
-	return nc.cm.CreateNamespace(nc.app, nc.nsName)
+	return mc.cm.CreateModule(mc.app, mc.module)
 }
diff --git a/actions/ns_create_test.go b/actions/module_create_test.go
similarity index 70%
rename from actions/ns_create_test.go
rename to actions/module_create_test.go
index 6e0bf54c..2cd1dadf 100644
--- a/actions/ns_create_test.go
+++ b/actions/module_create_test.go
@@ -26,21 +26,21 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNsCreate(t *testing.T) {
+func TestModuleCreate(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: "name",
+			OptionApp:    appMock,
+			OptionModule: "name",
 		}
 
-		a, err := NewNsCreate(in)
+		a, err := NewModuleCreate(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "name").Return(ns, errors.New("it exists"))
-		cm.On("CreateNamespace", mock.Anything, "name").Return(nil)
+		cm.On("Module", mock.Anything, "name").Return(ns, errors.New("it exists"))
+		cm.On("CreateModule", mock.Anything, "name").Return(nil)
 
 		a.cm = cm
 
@@ -50,20 +50,20 @@ func TestNsCreate(t *testing.T) {
 	})
 }
 
-func TestNsCreate_already_exists(t *testing.T) {
+func TestModuleCreate_already_exists(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: "name",
+			OptionApp:    appMock,
+			OptionModule: "name",
 		}
 
-		a, err := NewNsCreate(in)
+		a, err := NewModuleCreate(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "name").Return(ns, nil)
+		cm.On("Module", mock.Anything, "name").Return(ns, nil)
 
 		a.cm = cm
 
diff --git a/actions/ns_list.go b/actions/module_list.go
similarity index 70%
rename from actions/ns_list.go
rename to actions/module_list.go
index a7fca49f..c9dd16af 100644
--- a/actions/ns_list.go
+++ b/actions/module_list.go
@@ -25,9 +25,9 @@ import (
 	"github.com/ksonnet/ksonnet/pkg/util/table"
 )
 
-// RunNsList runs `ns list`
-func RunNsList(m map[string]interface{}) error {
-	nl, err := NewNsList(m)
+// RunModuleList runs `module list`
+func RunModuleList(m map[string]interface{}) error {
+	nl, err := NewModuleList(m)
 	if err != nil {
 		return err
 	}
@@ -35,19 +35,19 @@ func RunNsList(m map[string]interface{}) error {
 	return nl.Run()
 }
 
-// NsList lists namespaces.
-type NsList struct {
+// ModuleList lists modules.
+type ModuleList struct {
 	app     app.App
 	envName string
 	out     io.Writer
 	cm      component.Manager
 }
 
-// NewNsList creates an instance of NsList.
-func NewNsList(m map[string]interface{}) (*NsList, error) {
+// NewModuleList creates an instance of ModuleList.
+func NewModuleList(m map[string]interface{}) (*ModuleList, error) {
 	ol := newOptionLoader(m)
 
-	nl := &NsList{
+	nl := &ModuleList{
 		app:     ol.loadApp(),
 		envName: ol.loadString(OptionEnvName),
 
@@ -62,19 +62,19 @@ func NewNsList(m map[string]interface{}) (*NsList, error) {
 	return nl, nil
 }
 
-// Run lists namespaces.
-func (nl *NsList) Run() error {
-	namespaces, err := nl.cm.Namespaces(nl.app, nl.envName)
+// Run lists modules.
+func (nl *ModuleList) Run() error {
+	modules, err := nl.cm.Modules(nl.app, nl.envName)
 	if err != nil {
 		return err
 	}
 
 	t := table.New(nl.out)
-	t.SetHeader([]string{"namespace"})
+	t.SetHeader([]string{"module"})
 
-	names := make([]string, len(namespaces))
-	for i := range namespaces {
-		names[i] = namespaces[i].Name()
+	names := make([]string, len(modules))
+	for i := range modules {
+		names[i] = modules[i].Name()
 	}
 
 	sort.Strings(names)
diff --git a/actions/ns_list_test.go b/actions/module_list_test.go
similarity index 88%
rename from actions/ns_list_test.go
rename to actions/module_list_test.go
index 4689c51a..1ef1e723 100644
--- a/actions/ns_list_test.go
+++ b/actions/module_list_test.go
@@ -25,22 +25,22 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNsList(t *testing.T) {
+func TestModuleList(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		cm := &cmocks.Manager{}
 
-		namespaces := []component.Namespace{
+		modules := []component.Module{
 			mockNsWithName("b"),
 			mockNsWithName("a"),
 		}
-		cm.On("Namespaces", appMock, "").Return(namespaces, nil)
+		cm.On("Modules", appMock, "").Return(modules, nil)
 
 		in := map[string]interface{}{
 			OptionApp:     appMock,
 			OptionEnvName: "",
 		}
 
-		a, err := NewNsList(in)
+		a, err := NewModuleList(in)
 		require.NoError(t, err)
 
 		a.cm = cm
diff --git a/actions/param_list.go b/actions/param_list.go
index 394877e5..7e6e28a7 100644
--- a/actions/param_list.go
+++ b/actions/param_list.go
@@ -38,7 +38,7 @@ func RunParamList(m map[string]interface{}) error {
 // ParamList lists parameters for a component.
 type ParamList struct {
 	app           app.App
-	nsName        string
+	module        string
 	componentName string
 	envName       string
 	cm            component.Manager
@@ -51,7 +51,7 @@ func NewParamList(m map[string]interface{}) (*ParamList, error) {
 
 	pl := &ParamList{
 		app:           ol.loadApp(),
-		nsName:        ol.loadString(OptionNamespaceName),
+		module:        ol.loadString(OptionModule),
 		componentName: ol.loadString(OptionComponentName),
 		envName:       ol.loadString(OptionEnvName),
 
@@ -68,7 +68,7 @@ func NewParamList(m map[string]interface{}) (*ParamList, error) {
 
 // Run runs the ParamList action.
 func (pl *ParamList) Run() error {
-	ns, err := pl.cm.Namespace(pl.app, pl.nsName)
+	ns, err := pl.cm.Module(pl.app, pl.module)
 	if err != nil {
 		return errors.Wrap(err, "could not find namespace")
 	}
@@ -90,12 +90,12 @@ func (pl *ParamList) Run() error {
 	return nil
 }
 
-func (pl *ParamList) collectParams(ns component.Namespace) ([]component.NamespaceParameter, error) {
+func (pl *ParamList) collectParams(ns component.Module) ([]component.ModuleParameter, error) {
 	if pl.componentName == "" {
 		return ns.Params(pl.envName)
 	}
 
-	c, err := pl.cm.Component(pl.app, pl.nsName, pl.componentName)
+	c, err := pl.cm.Component(pl.app, pl.module, pl.componentName)
 	if err != nil {
 		return nil, err
 	}
diff --git a/actions/param_list_test.go b/actions/param_list_test.go
index b6fc08c9..13d1bb7d 100644
--- a/actions/param_list_test.go
+++ b/actions/param_list_test.go
@@ -29,26 +29,26 @@ import (
 func TestParamList_with_component_name(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		componentName := "deployment"
-		nsName := "ns"
+		module := "ns"
 		envName := ""
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		c := &cmocks.Component{}
 
-		nsParams := []component.NamespaceParameter{
+		nsParams := []component.ModuleParameter{
 			{Component: "deployment", Index: "0", Key: "key", Value: `"value"`},
 		}
 		c.On("Params", "").Return(nsParams, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "ns").Return(ns, nil)
+		cm.On("Module", mock.Anything, "ns").Return(ns, nil)
 		cm.On("Component", mock.Anything, "ns", "deployment").Return(c, nil)
 
 		in := map[string]interface{}{
 			OptionApp:           appMock,
 			OptionComponentName: componentName,
-			OptionNamespaceName: nsName,
+			OptionModule:        module,
 			OptionEnvName:       envName,
 		}
 
@@ -70,25 +70,25 @@ func TestParamList_with_component_name(t *testing.T) {
 func TestParamList_without_component_name(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		componentName := ""
-		nsName := "ns"
+		module := "ns"
 		envName := ""
 
-		nsParams := []component.NamespaceParameter{
+		nsParams := []component.ModuleParameter{
 			{Component: "deployment", Index: "0", Key: "key1", Value: `"value"`},
 			{Component: "deployment", Index: "0", Key: "key2", Value: `"value"`},
 		}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		ns.On("Params", "").Return(nsParams, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "ns").Return(ns, nil)
+		cm.On("Module", mock.Anything, "ns").Return(ns, nil)
 
 		in := map[string]interface{}{
 			OptionApp:           appMock,
 			OptionComponentName: componentName,
-			OptionNamespaceName: nsName,
+			OptionModule:        module,
 			OptionEnvName:       envName,
 		}
 
diff --git a/actions/param_set.go b/actions/param_set.go
index 2db3d16c..78b1fa1c 100644
--- a/actions/param_set.go
+++ b/actions/param_set.go
@@ -107,12 +107,12 @@ func (ps *ParamSet) Run() error {
 }
 
 func (ps *ParamSet) setGlobal(path []string, value interface{}) error {
-	ns, err := ps.cm.Namespace(ps.app, ps.name)
+	module, err := ps.cm.Module(ps.app, ps.name)
 	if err != nil {
-		return errors.Wrap(err, "retrieve namespace")
+		return errors.Wrap(err, "retrieve module")
 	}
 
-	if err := ns.SetParam(path, value); err != nil {
+	if err := module.SetParam(path, value); err != nil {
 		return errors.Wrap(err, "set global param")
 	}
 
diff --git a/actions/param_set_test.go b/actions/param_set_test.go
index 6d5ce0e0..ae2d36a4 100644
--- a/actions/param_set_test.go
+++ b/actions/param_set_test.go
@@ -91,20 +91,20 @@ func TestParamSet_index(t *testing.T) {
 
 func TestParamSet_global(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "replicas"
 		value := "3"
 
 		cm := &cmocks.Manager{}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("SetParam", []string{"replicas"}, 3).Return(nil)
 
-		cm.On("Namespace", appMock, "/").Return(ns, nil)
+		cm.On("Module", appMock, "/").Return(ns, nil)
 
 		in := map[string]interface{}{
 			OptionApp:    appMock,
-			OptionName:   nsName,
+			OptionName:   module,
 			OptionPath:   path,
 			OptionValue:  value,
 			OptionGlobal: true,
diff --git a/actions/pkg_describe.go b/actions/pkg_describe.go
index aa96545f..ad2e3d18 100644
--- a/actions/pkg_describe.go
+++ b/actions/pkg_describe.go
@@ -35,7 +35,7 @@ func RunPkgDescribe(m map[string]interface{}) error {
 	return pd.Run()
 }
 
-// PkgDescribe lists namespaces.
+// PkgDescribe describes a package.
 type PkgDescribe struct {
 	app            app.App
 	pkgName        string
@@ -64,7 +64,7 @@ func NewPkgDescribe(m map[string]interface{}) (*PkgDescribe, error) {
 	return pd, nil
 }
 
-// Run lists namespaces.
+// Run describes a package.
 func (pd *PkgDescribe) Run() error {
 	d, err := pkg.ParseName(pd.pkgName)
 	if err != nil {
diff --git a/actions/pkg_install.go b/actions/pkg_install.go
index e7d7e7b8..bb29a08b 100644
--- a/actions/pkg_install.go
+++ b/actions/pkg_install.go
@@ -34,7 +34,7 @@ func RunPkgInstall(m map[string]interface{}) error {
 	return pi.Run()
 }
 
-// PkgInstall lists namespaces.
+// PkgInstall installs packages.
 type PkgInstall struct {
 	app         app.App
 	libName     string
@@ -61,7 +61,7 @@ func NewPkgInstall(m map[string]interface{}) (*PkgInstall, error) {
 	return nl, nil
 }
 
-// Run lists namespaces.
+// Run installs packages.
 func (pi *PkgInstall) Run() error {
 	d, customName, err := pi.parseDepSpec()
 	if err != nil {
diff --git a/actions/prototype_describe.go b/actions/prototype_describe.go
index f964be9b..96fe910f 100644
--- a/actions/prototype_describe.go
+++ b/actions/prototype_describe.go
@@ -37,7 +37,7 @@ func RunPrototypeDescribe(m map[string]interface{}) error {
 	return pd.Run()
 }
 
-// PrototypeDescribe lists available namespaces
+// PrototypeDescribe describes a prototype.
 type PrototypeDescribe struct {
 	app             app.App
 	out             io.Writer
diff --git a/actions/prototype_list.go b/actions/prototype_list.go
index f625403f..98a19e5d 100644
--- a/actions/prototype_list.go
+++ b/actions/prototype_list.go
@@ -36,7 +36,7 @@ func RunPrototypeList(m map[string]interface{}) error {
 	return pl.Run()
 }
 
-// PrototypeList lists available namespaces
+// PrototypeList lists available prototypes.
 type PrototypeList struct {
 	app          app.App
 	out          io.Writer
diff --git a/actions/prototype_search.go b/actions/prototype_search.go
index 0179d5da..d88670a0 100644
--- a/actions/prototype_search.go
+++ b/actions/prototype_search.go
@@ -37,7 +37,7 @@ func RunPrototypeSearch(m map[string]interface{}) error {
 	return ps.Run()
 }
 
-// PrototypeSearch lists available namespaces
+// PrototypeSearch searches for prototypes by name.
 type PrototypeSearch struct {
 	app           app.App
 	query         string
diff --git a/actions/prototype_use.go b/actions/prototype_use.go
index baaab1d3..d5b64568 100644
--- a/actions/prototype_use.go
+++ b/actions/prototype_use.go
@@ -37,7 +37,7 @@ func RunPrototypeUse(m map[string]interface{}) error {
 	return pl.Run()
 }
 
-// PrototypeUse lists available namespaces
+// PrototypeUse generates a component from a prototype.
 type PrototypeUse struct {
 	app               app.App
 	args              []string
@@ -126,7 +126,7 @@ func (pl *PrototypeUse) Run() error {
 		return err
 	}
 
-	_, prototypeName := component.ExtractNamespacedComponent(pl.app, componentName)
+	_, prototypeName := component.ExtractModuleComponent(pl.app, componentName)
 
 	text, err := expandPrototype(p, templateType, params, prototypeName)
 	if err != nil {
diff --git a/actions/registry_add.go b/actions/registry_add.go
index b418266d..57c00ab8 100644
--- a/actions/registry_add.go
+++ b/actions/registry_add.go
@@ -33,7 +33,7 @@ func RunRegistryAdd(m map[string]interface{}) error {
 	return ra.Run()
 }
 
-// RegistryAdd lists namespaces.
+// RegistryAdd adds a registry.
 type RegistryAdd struct {
 	app           app.App
 	name          string
@@ -64,7 +64,7 @@ func NewRegistryAdd(m map[string]interface{}) (*RegistryAdd, error) {
 	return ra, nil
 }
 
-// Run lists namespaces.
+// Run adds a registry.
 func (ra *RegistryAdd) Run() error {
 	uri, protocol := ra.protocol()
 	_, err := ra.registryAddFn(ra.app, ra.name, protocol, uri, ra.version, ra.isOverride)
diff --git a/actions/registry_describe.go b/actions/registry_describe.go
index 28cbf534..4d7a1caa 100644
--- a/actions/registry_describe.go
+++ b/actions/registry_describe.go
@@ -36,7 +36,7 @@ func RunRegistryDescribe(m map[string]interface{}) error {
 	return rd.Run()
 }
 
-// RegistryDescribe lists available namespaces
+// RegistryDescribe describes a registry
 type RegistryDescribe struct {
 	app                 app.App
 	name                string
diff --git a/actions/testdata/ns/list/output.txt b/actions/testdata/ns/list/output.txt
index c9c57bbb..c45e0ede 100644
--- a/actions/testdata/ns/list/output.txt
+++ b/actions/testdata/ns/list/output.txt
@@ -1,4 +1,4 @@
-NAMESPACE
-=========
+MODULE
+======
 a
 b
diff --git a/actions/validate.go b/actions/validate.go
index 1a7ea6a7..a87fc225 100644
--- a/actions/validate.go
+++ b/actions/validate.go
@@ -52,7 +52,7 @@ type findObjectsFn func(a app.App, envName string,
 type Validate struct {
 	app            app.App
 	envName        string
-	nsName         string
+	module         string
 	componentNames []string
 	clientConfig   *client.Config
 	out            io.Writer
@@ -69,7 +69,7 @@ func NewValidate(m map[string]interface{}) (*Validate, error) {
 	v := &Validate{
 		app:            ol.loadApp(),
 		envName:        ol.loadString(OptionEnvName),
-		nsName:         ol.loadString(OptionNamespaceName),
+		module:         ol.loadString(OptionModule),
 		componentNames: ol.loadStringSlice(OptionComponentNames),
 		clientConfig:   ol.loadClientConfig(),
 
diff --git a/actions/validate_test.go b/actions/validate_test.go
index 9e2a7b45..b2fc7201 100644
--- a/actions/validate_test.go
+++ b/actions/validate_test.go
@@ -47,7 +47,7 @@ func TestValidate(t *testing.T) {
 		in := map[string]interface{}{
 			OptionApp:            appMock,
 			OptionEnvName:        aEnvName,
-			OptionNamespaceName:  aModuleName,
+			OptionModule:         aModuleName,
 			OptionComponentNames: aComponentNames,
 			OptionClientConfig:   aClientConfig,
 		}
diff --git a/cmd/actions.go b/cmd/actions.go
index 9b185e76..5527312c 100644
--- a/cmd/actions.go
+++ b/cmd/actions.go
@@ -36,8 +36,8 @@ const (
 	actionEnvTargets
 	actionImport
 	actionInit
-	actionNsCreate
-	actionNsList
+	actionModuleCreate
+	actionModuleList
 	actionParamDiff
 	actionParamList
 	actionParamSet
@@ -66,16 +66,16 @@ var (
 		actionComponentRm:   actions.RunComponentRm,
 		// actionDelete
 		// actionDiff
-		actionEnvAdd:      actions.RunEnvAdd,
-		actionEnvDescribe: actions.RunEnvDescribe,
-		actionEnvList:     actions.RunEnvList,
-		actionEnvRm:       actions.RunEnvRm,
-		actionEnvSet:      actions.RunEnvSet,
-		actionEnvTargets:  actions.RunEnvTargets,
-		actionImport:      actions.RunImport,
-		actionInit:        actions.RunInit,
-		actionNsCreate:    actions.RunNsCreate,
-		actionNsList:      actions.RunNsList,
+		actionEnvAdd:       actions.RunEnvAdd,
+		actionEnvDescribe:  actions.RunEnvDescribe,
+		actionEnvList:      actions.RunEnvList,
+		actionEnvRm:        actions.RunEnvRm,
+		actionEnvSet:       actions.RunEnvSet,
+		actionEnvTargets:   actions.RunEnvTargets,
+		actionImport:       actions.RunImport,
+		actionInit:         actions.RunInit,
+		actionModuleCreate: actions.RunModuleCreate,
+		actionModuleList:   actions.RunModuleList,
 		// actionParamDiff
 		actionParamList:         actions.RunParamList,
 		actionParamSet:          actions.RunParamSet,
diff --git a/cmd/component_list.go b/cmd/component_list.go
index 68c62811..e9ee48e0 100644
--- a/cmd/component_list.go
+++ b/cmd/component_list.go
@@ -37,9 +37,9 @@ var componentListCmd = &cobra.Command{
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: viper.GetString(vComponentListNamespace),
-			actions.OptionOutput:        viper.GetString(vComponentListOutput),
+			actions.OptionApp:    ka,
+			actions.OptionModule: viper.GetString(vComponentListNamespace),
+			actions.OptionOutput: viper.GetString(vComponentListOutput),
 		}
 
 		return runAction(actionComponentList, m)
@@ -59,6 +59,6 @@ func init() {
 
 	componentListCmd.Flags().StringP(flagOutput, shortOutput, "", "Output format. Valid options: wide")
 	viper.BindPFlag(vComponentListOutput, componentListCmd.Flags().Lookup(flagOutput))
-	componentListCmd.Flags().String(flagNamespace, "", "Namespace")
-	viper.BindPFlag(vComponentListNamespace, componentListCmd.Flags().Lookup(flagNamespace))
+	componentListCmd.Flags().String(flagModule, "", "Component module")
+	viper.BindPFlag(vComponentListNamespace, componentListCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/component_list_test.go b/cmd/component_list_test.go
index 0b934c1e..c1208240 100644
--- a/cmd/component_list_test.go
+++ b/cmd/component_list_test.go
@@ -29,9 +29,9 @@ func Test_componentListCmd(t *testing.T) {
 			args:   []string{"component", "list"},
 			action: actionComponentList,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionNamespaceName: "",
-				actions.OptionOutput:        "",
+				actions.OptionApp:    ka,
+				actions.OptionModule: "",
+				actions.OptionOutput: "",
 			},
 		},
 	}
diff --git a/cmd/env_add.go b/cmd/env_add.go
index ce967cf7..f49d9d61 100644
--- a/cmd/env_add.go
+++ b/cmd/env_add.go
@@ -57,12 +57,12 @@ var envAddCmd = &cobra.Command{
 		isOverride := viper.GetBool(vEnvAddOverride)
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       name,
-			actions.OptionServer:        server,
-			actions.OptionNamespaceName: namespace,
-			actions.OptionSpecFlag:      specFlag,
-			actions.OptionOverride:      isOverride,
+			actions.OptionApp:      ka,
+			actions.OptionEnvName:  name,
+			actions.OptionServer:   server,
+			actions.OptionModule:   namespace,
+			actions.OptionSpecFlag: specFlag,
+			actions.OptionOverride: isOverride,
 		}
 
 		return runAction(actionEnvAdd, m)
diff --git a/cmd/env_add_test.go b/cmd/env_add_test.go
index 44026a7e..60cdcd0c 100644
--- a/cmd/env_add_test.go
+++ b/cmd/env_add_test.go
@@ -28,12 +28,12 @@ func Test_envAddCmd(t *testing.T) {
 			args:   []string{"env", "add", "prod", "--server", "http://example.com"},
 			action: actionEnvAdd,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "prod",
-				actions.OptionNamespaceName: "default",
-				actions.OptionOverride:      false,
-				actions.OptionServer:        "http://example.com",
-				actions.OptionSpecFlag:      "version:v1.7.0",
+				actions.OptionApp:      ka,
+				actions.OptionEnvName:  "prod",
+				actions.OptionModule:   "default",
+				actions.OptionOverride: false,
+				actions.OptionServer:   "http://example.com",
+				actions.OptionSpecFlag: "version:v1.7.0",
 			},
 		},
 	}
diff --git a/cmd/env_set.go b/cmd/env_set.go
index 0d2b5f8b..ed2a6c11 100644
--- a/cmd/env_set.go
+++ b/cmd/env_set.go
@@ -37,10 +37,10 @@ var envSetCmd = &cobra.Command{
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       args[0],
-			actions.OptionNewEnvName:    viper.GetString(vEnvSetName),
-			actions.OptionNamespaceName: viper.GetString(vEnvSetNamespace),
+			actions.OptionApp:        ka,
+			actions.OptionEnvName:    args[0],
+			actions.OptionNewEnvName: viper.GetString(vEnvSetName),
+			actions.OptionNamespace:  viper.GetString(vEnvSetNamespace),
 		}
 
 		return runAction(actionEnvSet, m)
diff --git a/cmd/env_set_test.go b/cmd/env_set_test.go
index 9e0589cf..82446f05 100644
--- a/cmd/env_set_test.go
+++ b/cmd/env_set_test.go
@@ -28,10 +28,10 @@ func Test_envSetCmd(t *testing.T) {
 			args:   []string{"env", "set", "default", "--namespace", "new-name"},
 			action: actionEnvSet,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "default",
-				actions.OptionNamespaceName: "new-name",
-				actions.OptionNewEnvName:    "",
+				actions.OptionApp:        ka,
+				actions.OptionEnvName:    "default",
+				actions.OptionNamespace:  "new-name",
+				actions.OptionNewEnvName: "",
 			},
 		},
 	}
diff --git a/cmd/env_targets.go b/cmd/env_targets.go
index 6072cb4d..4cc087cd 100644
--- a/cmd/env_targets.go
+++ b/cmd/env_targets.go
@@ -23,7 +23,7 @@ import (
 )
 
 const (
-	vEnvTargetNamespaces = "env-target-namespaces"
+	vEnvTargetModules = "env-target-modules"
 )
 
 // envTargetsCmd represents the env targets command
@@ -33,13 +33,13 @@ var envTargetsCmd = &cobra.Command{
 	Long:  `targets`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		if len(args) != 1 {
-			return errors.New("env targets <environment> --namespace name")
+			return errors.New("env targets <environment> <--module name>...")
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       args[0],
-			actions.OptionNamespaceName: viper.GetStringSlice(vEnvTargetNamespaces),
+			actions.OptionApp:     ka,
+			actions.OptionEnvName: args[0],
+			actions.OptionModule:  viper.GetStringSlice(vEnvTargetModules),
 		}
 
 		return runAction(actionEnvTargets, m)
@@ -49,6 +49,6 @@ var envTargetsCmd = &cobra.Command{
 func init() {
 	envCmd.AddCommand(envTargetsCmd)
 
-	envTargetsCmd.Flags().StringSlice(flagNamespace, nil, "Components to include")
-	viper.BindPFlag(vEnvTargetNamespaces, envTargetsCmd.Flags().Lookup(flagNamespace))
+	envTargetsCmd.Flags().StringSlice(flagModule, nil, "Component modules to include")
+	viper.BindPFlag(vEnvTargetModules, envTargetsCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/env_targets_test.go b/cmd/env_targets_test.go
index ad36dfad..5306fc62 100644
--- a/cmd/env_targets_test.go
+++ b/cmd/env_targets_test.go
@@ -25,12 +25,12 @@ func Test_envTargetsCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"env", "targets", "prod", "--namespace", "app1"},
+			args:   []string{"env", "targets", "prod", "--module", "app1"},
 			action: actionEnvTargets,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "prod",
-				actions.OptionNamespaceName: []string{"app1"},
+				actions.OptionApp:     ka,
+				actions.OptionEnvName: "prod",
+				actions.OptionModule:  []string{"app1"},
 			},
 		},
 	}
diff --git a/cmd/flags.go b/cmd/flags.go
index 64a9d544..b907ba2f 100644
--- a/cmd/flags.go
+++ b/cmd/flags.go
@@ -30,6 +30,7 @@ const (
 	flagGcTag                 = "gc-tag"
 	flagIndex                 = "index"
 	flagJpath                 = "jpath"
+	flagModule                = "module"
 	flagNamespace             = "namespace"
 	flagResolver              = "resolve-images"
 	flagResolvFail            = "resolve-images-error"
diff --git a/cmd/import.go b/cmd/import.go
index 9a1c216d..c4d49fca 100644
--- a/cmd/import.go
+++ b/cmd/import.go
@@ -23,8 +23,8 @@ import (
 )
 
 const (
-	vImportFilename  = "import-filename"
-	vImportNamespace = "import-namespace"
+	vImportFilename = "import-filename"
+	vImportModule   = "import-module"
 )
 
 // importCmd represents the import command
@@ -34,9 +34,9 @@ var importCmd = &cobra.Command{
 	Long:  `Import manifest`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: viper.GetString(vImportNamespace),
-			actions.OptionPath:          viper.GetString(vImportFilename),
+			actions.OptionApp:    ka,
+			actions.OptionModule: viper.GetString(vImportModule),
+			actions.OptionPath:   viper.GetString(vImportFilename),
 		}
 
 		return runAction(actionImport, m)
@@ -48,6 +48,6 @@ func init() {
 
 	importCmd.Flags().StringP(flagFilename, shortFilename, "", "Filename or directory for component to import")
 	viper.BindPFlag(vImportFilename, importCmd.Flags().Lookup(flagFilename))
-	importCmd.Flags().String(flagNamespace, "", "Component namespace")
-	viper.BindPFlag(vImportNamespace, importCmd.Flags().Lookup(flagNamespace))
+	importCmd.Flags().String(flagModule, "", "Component module")
+	viper.BindPFlag(vImportModule, importCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/init.go b/cmd/init.go
index f3d5aea4..903be992 100644
--- a/cmd/init.go
+++ b/cmd/init.go
@@ -95,7 +95,7 @@ var initCmd = &cobra.Command{
 			actions.OptionRootPath:              appRoot,
 			actions.OptionSpecFlag:              specFlag,
 			actions.OptionServer:                server,
-			actions.OptionNamespaceName:         namespace,
+			actions.OptionNamespace:             namespace,
 			actions.OptionSkipDefaultRegistries: viper.GetBool(vInitSkipDefaultRegistries),
 		}
 
diff --git a/cmd/init_test.go b/cmd/init_test.go
index 3ca8b4c7..43d933ff 100644
--- a/cmd/init_test.go
+++ b/cmd/init_test.go
@@ -41,7 +41,7 @@ func Test_initCmd(t *testing.T) {
 				actions.OptionRootPath:              root,
 				actions.OptionServer:                "http://127.0.0.1",
 				actions.OptionSpecFlag:              "version:v1.7.0",
-				actions.OptionNamespaceName:         "new-namespace",
+				actions.OptionNamespace:             "new-namespace",
 				actions.OptionSkipDefaultRegistries: false,
 			},
 		},
diff --git a/cmd/initname_string.go b/cmd/initname_string.go
index b7795d3e..ef85b01d 100644
--- a/cmd/initname_string.go
+++ b/cmd/initname_string.go
@@ -1,27 +1,12 @@
-// Copyright 2018 The ksonnet authors
-//
-//
-//    Licensed under the Apache License, Version 2.0 (the "License");
-//    you may not use this file except in compliance with the License.
-//    You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//    Unless required by applicable law or agreed to in writing, software
-//    distributed under the License is distributed on an "AS IS" BASIS,
-//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//    See the License for the specific language governing permissions and
-//    limitations under the License.
-
 // Code generated by "stringer -type=initName"; DO NOT EDIT.
 
 package cmd
 
 import "strconv"
 
-const _initName_name = "actionApplyactionComponentListactionComponentNameactionDeleteactionDiffactionEnvAddactionEnvDescribeactionEnvListactionEnvRmactionEnvSetactionEnvTargetsactionImportactionInitactionNsCreateactionNsListactionParamDiffactionParamListactionParamSetactionPkgDescribeactionPkgInstallactionPkgListactionPrototypeDescribeactionPrototypeListactionPrototypePreviewactionPrototypeSearchactionPrototypeUseactionRegistryAddactionRegistryDescribeactionRegistryListactionShowactionUpgradeactionValidate"
+const _initName_name = "actionApplyactionComponentListactionComponentRmactionDeleteactionDiffactionEnvAddactionEnvDescribeactionEnvListactionEnvRmactionEnvSetactionEnvTargetsactionImportactionInitactionModuleCreateactionModuleListactionParamDiffactionParamListactionParamSetactionPkgDescribeactionPkgInstallactionPkgListactionPrototypeDescribeactionPrototypeListactionPrototypePreviewactionPrototypeSearchactionPrototypeUseactionRegistryAddactionRegistryDescribeactionRegistryListactionShowactionUpgradeactionValidate"
 
-var _initName_index = [...]uint16{0, 11, 30, 49, 61, 71, 83, 100, 113, 124, 136, 152, 164, 174, 188, 200, 215, 230, 244, 261, 277, 290, 313, 332, 354, 375, 393, 410, 432, 450, 460, 473, 487}
+var _initName_index = [...]uint16{0, 11, 30, 47, 59, 69, 81, 98, 111, 122, 134, 150, 162, 172, 190, 206, 221, 236, 250, 267, 283, 296, 319, 338, 360, 381, 399, 416, 438, 456, 466, 479, 493}
 
 func (i initName) String() string {
 	if i < 0 || i >= initName(len(_initName_index)-1) {
diff --git a/cmd/ns.go b/cmd/module.go
similarity index 81%
rename from cmd/ns.go
rename to cmd/module.go
index 59f5196c..37d4696f 100644
--- a/cmd/ns.go
+++ b/cmd/module.go
@@ -17,13 +17,13 @@ package cmd
 
 import "github.com/spf13/cobra"
 
-// nsCmd represents the ns command
-var nsCmd = &cobra.Command{
-	Use:   "ns",
-	Short: "ns",
-	Long:  `ns`,
+// moduleCmd represents the module command
+var moduleCmd = &cobra.Command{
+	Use:   "module",
+	Short: "module",
+	Long:  `module`,
 }
 
 func init() {
-	RootCmd.AddCommand(nsCmd)
+	RootCmd.AddCommand(moduleCmd)
 }
diff --git a/cmd/ns_create.go b/cmd/module_create.go
similarity index 74%
rename from cmd/ns_create.go
rename to cmd/module_create.go
index 1bf7e6e2..15ed65ca 100644
--- a/cmd/ns_create.go
+++ b/cmd/module_create.go
@@ -22,29 +22,29 @@ import (
 )
 
 const (
-	vNsCreateNamespace = "ns-create-namespace"
+	vModuleCreateNamespace = "module-create-namespace"
 )
 
-// nsCreateCmd creates a ns create command.
-var nsCreateCmd = &cobra.Command{
+// moduleCreateCmd creates a ns create command.
+var moduleCreateCmd = &cobra.Command{
 	Use:   "create <name>",
 	Short: "create",
 	Long:  `create`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		if len(args) != 1 {
-			return errors.New("ns create <namespace>")
+			return errors.New("module create <module name>")
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: args[0],
+			actions.OptionApp:    ka,
+			actions.OptionModule: args[0],
 		}
 
-		return runAction(actionNsCreate, m)
+		return runAction(actionModuleCreate, m)
 	},
 }
 
 func init() {
-	nsCmd.AddCommand(nsCreateCmd)
+	moduleCmd.AddCommand(moduleCreateCmd)
 
 }
diff --git a/cmd/ns_create_test.go b/cmd/module_create_test.go
similarity index 81%
rename from cmd/ns_create_test.go
rename to cmd/module_create_test.go
index 366e1010..7742be88 100644
--- a/cmd/ns_create_test.go
+++ b/cmd/module_create_test.go
@@ -21,15 +21,15 @@ import (
 	"github.com/ksonnet/ksonnet/actions"
 )
 
-func Test_nsCreateCmd(t *testing.T) {
+func Test_moduleCreateCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"ns", "create", "app1"},
-			action: actionNsCreate,
+			args:   []string{"module", "create", "app1"},
+			action: actionModuleCreate,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionNamespaceName: "app1",
+				actions.OptionApp:    ka,
+				actions.OptionModule: "app1",
 			},
 		},
 	}
diff --git a/cmd/ns_list.go b/cmd/module_list.go
similarity index 73%
rename from cmd/ns_list.go
rename to cmd/module_list.go
index e01e43bc..33b04129 100644
--- a/cmd/ns_list.go
+++ b/cmd/module_list.go
@@ -22,10 +22,10 @@ import (
 )
 
 const (
-	vNsListEnv = "ns-list-env"
+	vModuleListEnv = "module-list-env"
 )
 
-// nsListCmd represents the ns list command
+// moduleListCmd represents the ns list command
 var nsListCmd = &cobra.Command{
 	Use:   "list",
 	Short: "list",
@@ -33,17 +33,17 @@ var nsListCmd = &cobra.Command{
 	RunE: func(cmd *cobra.Command, args []string) error {
 		m := map[string]interface{}{
 			actions.OptionApp:     ka,
-			actions.OptionEnvName: viper.GetString(vNsListEnv),
+			actions.OptionEnvName: viper.GetString(vModuleListEnv),
 		}
 
-		return runAction(actionNsList, m)
+		return runAction(actionModuleList, m)
 	},
 }
 
 func init() {
-	nsCmd.AddCommand(nsListCmd)
+	moduleCmd.AddCommand(nsListCmd)
 
-	nsListCmd.Flags().String(flagEnv, "", "Environment to list namespaces for")
-	viper.BindPFlag(vNsListEnv, nsListCmd.Flags().Lookup(flagEnv))
+	nsListCmd.Flags().String(flagEnv, "", "Environment to list modules for")
+	viper.BindPFlag(vModuleListEnv, nsListCmd.Flags().Lookup(flagEnv))
 
 }
diff --git a/cmd/ns_list_test.go b/cmd/module_list_test.go
similarity index 89%
rename from cmd/ns_list_test.go
rename to cmd/module_list_test.go
index 9eda6dec..d5df07b2 100644
--- a/cmd/ns_list_test.go
+++ b/cmd/module_list_test.go
@@ -21,12 +21,12 @@ import (
 	"github.com/ksonnet/ksonnet/actions"
 )
 
-func Test_nsListCmd(t *testing.T) {
+func Test_moduleListCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"ns", "list"},
-			action: actionNsList,
+			args:   []string{"module", "list"},
+			action: actionModuleList,
 			expected: map[string]interface{}{
 				actions.OptionApp:     ka,
 				actions.OptionEnvName: "",
diff --git a/cmd/param.go b/cmd/param.go
index 0545f0eb..a771d953 100644
--- a/cmd/param.go
+++ b/cmd/param.go
@@ -22,12 +22,6 @@ import (
 	"github.com/spf13/cobra"
 )
 
-const (
-	flagParamEnv       = "env"
-	flagParamComponent = "component"
-	flagParamNamespace = "namespace"
-)
-
 var paramShortDesc = map[string]string{
 	"set":  "Change component or environment parameters (e.g. replica count, name)",
 	"list": "List known component parameters",
diff --git a/cmd/param_diff.go b/cmd/param_diff.go
index 11745d1c..d3e9a6b4 100644
--- a/cmd/param_diff.go
+++ b/cmd/param_diff.go
@@ -40,7 +40,7 @@ var paramDiffCmd = &cobra.Command{
 		env1 := args[0]
 		env2 := args[1]
 
-		component, err := flags.GetString(flagParamComponent)
+		component, err := flags.GetString(flagComponent)
 		if err != nil {
 			return err
 		}
@@ -76,7 +76,7 @@ ks param diff dev prod --component=guestbook`,
 func init() {
 	paramCmd.AddCommand(paramDiffCmd)
 
-	paramListCmd.PersistentFlags().String(flagParamEnv, "", "Specify environment to list parameters for")
-	paramListCmd.Flags().String(flagParamNamespace, "", "Specify namespace to list parameters for")
-	paramDiffCmd.PersistentFlags().String(flagParamComponent, "", "Specify the component to diff against")
+	paramListCmd.PersistentFlags().String(flagEnv, "", "Specify environment to list parameters for")
+	paramListCmd.Flags().String(flagModule, "", "Specify module to list parameters for")
+	paramDiffCmd.PersistentFlags().String(flagComponent, "", "Specify the component to diff against")
 }
diff --git a/cmd/param_list.go b/cmd/param_list.go
index 14d2aac4..517ff4dd 100644
--- a/cmd/param_list.go
+++ b/cmd/param_list.go
@@ -36,12 +36,12 @@ var paramListCmd = &cobra.Command{
 			component = args[0]
 		}
 
-		env, err := flags.GetString(flagParamEnv)
+		env, err := flags.GetString(flagEnv)
 		if err != nil {
 			return err
 		}
 
-		nsName, err := flags.GetString(flagParamNamespace)
+		module, err := flags.GetString(flagModule)
 		if err != nil {
 			return err
 		}
@@ -50,7 +50,7 @@ var paramListCmd = &cobra.Command{
 			actions.OptionApp:           ka,
 			actions.OptionComponentName: component,
 			actions.OptionEnvName:       env,
-			actions.OptionNamespaceName: nsName,
+			actions.OptionModule:        module,
 		}
 
 		return runAction(actionParamList, m)
diff --git a/cmd/param_list_test.go b/cmd/param_list_test.go
index 7a309b3f..47d86071 100644
--- a/cmd/param_list_test.go
+++ b/cmd/param_list_test.go
@@ -30,7 +30,7 @@ func Test_paramListCmd(t *testing.T) {
 			expected: map[string]interface{}{
 				actions.OptionApp:           ka,
 				actions.OptionEnvName:       "",
-				actions.OptionNamespaceName: "",
+				actions.OptionModule:        "",
 				actions.OptionComponentName: "",
 			},
 		},
diff --git a/cmd/validate.go b/cmd/validate.go
index aca9451e..6d01b4f1 100644
--- a/cmd/validate.go
+++ b/cmd/validate.go
@@ -55,7 +55,7 @@ var validateCmd = &cobra.Command{
 		m := map[string]interface{}{
 			actions.OptionApp:            ka,
 			actions.OptionEnvName:        args[0],
-			actions.OptionNamespaceName:  "",
+			actions.OptionModule:         "",
 			actions.OptionComponentNames: viper.GetStringSlice(vValidateComponent),
 			actions.OptionClientConfig:   validateClientConfig,
 		}
diff --git a/cmd/validate_test.go b/cmd/validate_test.go
index 9dc13f71..3e6e8854 100644
--- a/cmd/validate_test.go
+++ b/cmd/validate_test.go
@@ -30,7 +30,7 @@ func Test_validateCmd(t *testing.T) {
 			expected: map[string]interface{}{
 				actions.OptionApp:            ka,
 				actions.OptionEnvName:        "env-name",
-				actions.OptionNamespaceName:  "",
+				actions.OptionModule:         "",
 				actions.OptionComponentNames: make([]string, 0),
 				actions.OptionClientConfig:   validateClientConfig,
 			},
diff --git a/component/component.go b/component/component.go
index 1dd3796f..96ed2205 100644
--- a/component/component.go
+++ b/component/component.go
@@ -59,7 +59,7 @@ type Component interface {
 	DeleteParam(path []string, options ParamOptions) error
 	// Params returns a list of all parameters for a component. If envName is a
 	// blank string, it will report the local parameters.
-	Params(envName string) ([]NamespaceParameter, error)
+	Params(envName string) ([]ModuleParameter, error)
 	// Summarize returns a summary of the component.
 	Summarize() ([]Summary, error)
 }
@@ -71,11 +71,11 @@ const (
 	paramsFile = "params.libsonnet"
 )
 
-// LocateComponent locates a component given a nsName and a name.
-func LocateComponent(ksApp app.App, nsName, name string) (Component, error) {
+// LocateComponent locates a component given a module and a name.
+func LocateComponent(ksApp app.App, module, name string) (Component, error) {
 	path := make([]string, 0)
-	if nsName != "" && nsName != "/" {
-		path = append(path, nsName)
+	if module != "" && module != "/" {
+		path = append(path, module)
 	}
 
 	path = append(path, name)
@@ -84,7 +84,7 @@ func LocateComponent(ksApp app.App, nsName, name string) (Component, error) {
 
 // Path returns returns the file system path for a component.
 func Path(a app.App, name string) (string, error) {
-	ns, localName := ExtractNamespacedComponent(a, name)
+	ns, localName := ExtractModuleComponent(a, name)
 
 	fis, err := afero.ReadDir(a.Fs(), ns.Dir())
 	if err != nil {
@@ -119,7 +119,7 @@ func Path(a app.App, name string) (string, error) {
 
 // ExtractComponent extracts a component from a path.
 func ExtractComponent(a app.App, path string) (Component, error) {
-	ns, componentName := ExtractNamespacedComponent(a, path)
+	ns, componentName := ExtractModuleComponent(a, path)
 	members, err := ns.Components()
 	if err != nil {
 		return nil, err
diff --git a/component/create.go b/component/create.go
index 2b40e078..10963416 100644
--- a/component/create.go
+++ b/component/create.go
@@ -59,9 +59,9 @@ func (cc *componentCreator) Create(name, text string, params param.Params, templ
 		return "", errors.Errorf("Component name '%s' is not valid; must not contain punctuation, spaces, or begin or end with a slash", name)
 	}
 
-	nsName, componentName := namespaceComponent(name)
+	module, componentName := namespaceComponent(name)
 
-	componentDir, componentPath, err := cc.location(nsName, componentName, templateType)
+	componentDir, componentPath, err := cc.location(module, componentName, templateType)
 	if err != nil {
 		return "", errors.Wrap(err, "generate component location")
 	}
@@ -103,8 +103,8 @@ func (cc *componentCreator) Create(name, text string, params param.Params, templ
 }
 
 // location returns the dir and full path for the component.
-func (cc *componentCreator) location(nsName, name string, templateType prototype.TemplateType) (string, string, error) {
-	componentDir := filepath.Join(cc.app.Root(), componentsRoot, nsName)
+func (cc *componentCreator) location(module, name string, templateType prototype.TemplateType) (string, string, error) {
+	componentDir := filepath.Join(cc.app.Root(), componentsRoot, module)
 	componentPath := filepath.Join(componentDir, name)
 	switch templateType {
 	case prototype.YAML:
@@ -170,7 +170,7 @@ func namespaceComponent(name string) (string, string) {
 		return "", parts[0]
 	}
 
-	var nsName []string
+	var module []string
 	var componentName string
 	for i := range parts {
 		if i == len(parts)-1 {
@@ -178,10 +178,10 @@ func namespaceComponent(name string) (string, string) {
 			break
 		}
 
-		nsName = append(nsName, parts[i])
+		module = append(module, parts[i])
 	}
 
-	return strings.Join(nsName, "/"), componentName
+	return strings.Join(module, "/"), componentName
 }
 
 // GenParamsContent is the default content for params.libsonnet.
diff --git a/component/delete.go b/component/delete.go
index d858a715..e0e888fb 100644
--- a/component/delete.go
+++ b/component/delete.go
@@ -35,7 +35,7 @@ func Delete(a app.App, name string) error {
 		return err
 	}
 
-	ns, _ := ExtractNamespacedComponent(a, name)
+	ns, _ := ExtractModuleComponent(a, name)
 
 	// Build the new component/params.libsonnet file.
 	componentParamsFile, err := afero.ReadFile(a.Fs(), ns.ParamsPath())
diff --git a/component/jsonnet.go b/component/jsonnet.go
index c5ea16b8..a6bee465 100644
--- a/component/jsonnet.go
+++ b/component/jsonnet.go
@@ -38,7 +38,7 @@ import (
 // Jsonnet is a component base on jsonnet.
 type Jsonnet struct {
 	app        app.App
-	nsName     string
+	module     string
 	source     string
 	paramsPath string
 }
@@ -46,10 +46,10 @@ type Jsonnet struct {
 var _ Component = (*Jsonnet)(nil)
 
 // NewJsonnet creates an instance of Jsonnet.
-func NewJsonnet(a app.App, nsName, source, paramsPath string) *Jsonnet {
+func NewJsonnet(a app.App, module, source, paramsPath string) *Jsonnet {
 	return &Jsonnet{
 		app:        a,
-		nsName:     nsName,
+		module:     module,
 		source:     source,
 		paramsPath: paramsPath,
 	}
@@ -63,11 +63,11 @@ func (j *Jsonnet) Name(wantsNameSpaced bool) string {
 		return name
 	}
 
-	if j.nsName == "/" {
+	if j.module == "/" {
 		return name
 	}
 
-	return path.Join(j.nsName, name)
+	return path.Join(j.module, name)
 }
 
 func (j *Jsonnet) vmImporter(envName string) (*jsonnet.MemoryImporter, error) {
@@ -226,7 +226,7 @@ func (j *Jsonnet) DeleteParam(path []string, options ParamOptions) error {
 }
 
 // Params returns params for a component.
-func (j *Jsonnet) Params(envName string) ([]NamespaceParameter, error) {
+func (j *Jsonnet) Params(envName string) ([]ModuleParameter, error) {
 	paramsData, err := j.readParams(envName)
 	if err != nil {
 		return nil, err
@@ -237,13 +237,13 @@ func (j *Jsonnet) Params(envName string) ([]NamespaceParameter, error) {
 		return nil, errors.Wrap(err, "could not find components")
 	}
 
-	var params []NamespaceParameter
+	var params []ModuleParameter
 	for k, v := range props {
 		vStr, err := j.paramValue(v)
 		if err != nil {
 			return nil, err
 		}
-		np := NamespaceParameter{
+		np := ModuleParameter{
 			Component: j.Name(false),
 			Key:       k,
 			Index:     "0",
@@ -294,7 +294,7 @@ func (j *Jsonnet) readParams(envName string) (string, error) {
 		return j.readNamespaceParams()
 	}
 
-	ns, err := GetNamespace(j.app, j.nsName)
+	ns, err := GetModule(j.app, j.module)
 	if err != nil {
 		return "", err
 	}
diff --git a/component/jsonnet_test.go b/component/jsonnet_test.go
index a3ab9b53..fcd94383 100644
--- a/component/jsonnet_test.go
+++ b/component/jsonnet_test.go
@@ -167,7 +167,7 @@ func TestJsonnet_Params(t *testing.T) {
 	params, err := c.Params("")
 	require.NoError(t, err)
 
-	expected := []NamespaceParameter{
+	expected := []ModuleParameter{
 		{
 			Component: "guestbook-ui",
 			Index:     "0",
diff --git a/component/manager.go b/component/manager.go
index f000d2a0..723e9241 100644
--- a/component/manager.go
+++ b/component/manager.go
@@ -34,45 +34,45 @@ var (
 
 // Manager is an interface for interating with components.
 type Manager interface {
-	Components(ns Namespace) ([]Component, error)
-	Component(ksApp app.App, nsName, componentName string) (Component, error)
+	Components(ns Module) ([]Component, error)
+	Component(ksApp app.App, module, componentName string) (Component, error)
 	CreateComponent(ksApp app.App, name, text string, params param.Params, templateType prototype.TemplateType) (string, error)
-	CreateNamespace(ksApp app.App, name string) error
-	Namespace(ksApp app.App, nsName string) (Namespace, error)
-	Namespaces(ksApp app.App, envName string) ([]Namespace, error)
-	NSResolveParams(ns Namespace) (string, error)
-	ResolvePath(ksApp app.App, path string) (Namespace, Component, error)
+	CreateModule(ksApp app.App, name string) error
+	Module(ksApp app.App, module string) (Module, error)
+	Modules(ksApp app.App, envName string) ([]Module, error)
+	NSResolveParams(ns Module) (string, error)
+	ResolvePath(ksApp app.App, path string) (Module, Component, error)
 }
 
 type defaultManager struct{}
 
 var _ Manager = (*defaultManager)(nil)
 
-func (dm *defaultManager) Namespaces(ksApp app.App, envName string) ([]Namespace, error) {
-	return NamespacesFromEnv(ksApp, envName)
+func (dm *defaultManager) Modules(ksApp app.App, envName string) ([]Module, error) {
+	return ModulesFromEnv(ksApp, envName)
 }
 
-func (dm *defaultManager) Namespace(ksApp app.App, nsName string) (Namespace, error) {
-	return GetNamespace(ksApp, nsName)
+func (dm *defaultManager) Module(ksApp app.App, module string) (Module, error) {
+	return GetModule(ksApp, module)
 }
 
-func (dm *defaultManager) NSResolveParams(ns Namespace) (string, error) {
+func (dm *defaultManager) NSResolveParams(ns Module) (string, error) {
 	return ns.ResolvedParams()
 }
 
-func (dm *defaultManager) Components(ns Namespace) ([]Component, error) {
+func (dm *defaultManager) Components(ns Module) ([]Component, error) {
 	return ns.Components()
 }
 
-func (dm *defaultManager) Component(ksApp app.App, nsName, componentName string) (Component, error) {
-	return LocateComponent(ksApp, nsName, componentName)
+func (dm *defaultManager) Component(ksApp app.App, module, componentName string) (Component, error) {
+	return LocateComponent(ksApp, module, componentName)
 }
 
 func (dm *defaultManager) CreateComponent(ksApp app.App, name, text string, params param.Params, templateType prototype.TemplateType) (string, error) {
 	return Create(ksApp, name, text, params, templateType)
 }
 
-func (dm *defaultManager) CreateNamespace(ksApp app.App, name string) error {
+func (dm *defaultManager) CreateModule(ksApp app.App, name string) error {
 	parts := strings.Split(name, "/")
 	dir := filepath.Join(append([]string{ksApp.Root(), "components"}, parts...)...)
 
@@ -84,14 +84,14 @@ func (dm *defaultManager) CreateNamespace(ksApp app.App, name string) error {
 	return afero.WriteFile(ksApp.Fs(), paramsDir, GenParamsContent(), app.DefaultFilePermissions)
 }
 
-func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Namespace, Component, error) {
+func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Module, Component, error) {
 	isDir, err := dm.isComponentDir(ksApp, path)
 	if err != nil {
 		return nil, nil, errors.Wrap(err, "check for namespace directory")
 	}
 
 	if isDir {
-		ns, err := dm.Namespace(ksApp, path)
+		ns, err := dm.Module(ksApp, path)
 		if err != nil {
 			return nil, nil, err
 		}
@@ -99,17 +99,17 @@ func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Namespace, Co
 		return ns, nil, nil
 	}
 
-	nsName, cName, err := dm.checkComponent(ksApp, path)
+	module, cName, err := dm.checkComponent(ksApp, path)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	ns, err := dm.Namespace(ksApp, nsName)
+	ns, err := dm.Module(ksApp, module)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	c, err := dm.Component(ksApp, nsName, cName)
+	c, err := dm.Component(ksApp, module, cName)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -139,12 +139,12 @@ func (dm *defaultManager) checkComponent(ksApp app.App, name string) (string, st
 
 		if exists {
 			dir, file := path.Split(base)
-			nsName := strings.TrimPrefix(dir, path.Join(ksApp.Root(), componentsRoot))
-			if len(nsName) > 0 {
-				nsName = strings.TrimSuffix(nsName, "/")
+			module := strings.TrimPrefix(dir, path.Join(ksApp.Root(), componentsRoot))
+			if len(module) > 0 {
+				module = strings.TrimSuffix(module, "/")
 			}
 
-			return nsName, file, nil
+			return module, file, nil
 		}
 	}
 
diff --git a/component/manager_test.go b/component/manager_test.go
index 9c42c412..7004fec4 100644
--- a/component/manager_test.go
+++ b/component/manager_test.go
@@ -52,31 +52,31 @@ func Test_default_manager_ResolvePath(t *testing.T) {
 	cases := []struct {
 		name   string
 		cName  string
-		nsName string
+		module string
 		isErr  bool
 	}{
 		{
 			name:   "/",
-			nsName: "/",
+			module: "/",
 		},
 		{
 			name:   "deployment",
-			nsName: "/",
+			module: "/",
 			cName:  "deployment",
 		},
 		{
 			name:   "/deployment",
-			nsName: "/",
+			module: "/",
 			cName:  "deployment",
 		},
 		{
 			name:   "/nested/deployment",
-			nsName: "/nested",
+			module: "/nested",
 			cName:  "deployment",
 		},
 		{
 			name:   "nested/deployment",
-			nsName: "/nested",
+			module: "/nested",
 			cName:  "deployment",
 		},
 		{
@@ -107,7 +107,7 @@ func Test_default_manager_ResolvePath(t *testing.T) {
 				assert.Equal(t, tc.cName, c.Name(false))
 			}
 
-			assert.Equal(t, tc.nsName, ns.Name())
+			assert.Equal(t, tc.module, ns.Name())
 		})
 	}
 }
diff --git a/component/mocks/Component.go b/component/mocks/Component.go
index 52e609e7..a29e15b5 100644
--- a/component/mocks/Component.go
+++ b/component/mocks/Component.go
@@ -77,15 +77,15 @@ func (_m *Component) Objects(paramsStr string, envName string) ([]*unstructured.
 }
 
 // Params provides a mock function with given fields: envName
-func (_m *Component) Params(envName string) ([]component.NamespaceParameter, error) {
+func (_m *Component) Params(envName string) ([]component.ModuleParameter, error) {
 	ret := _m.Called(envName)
 
-	var r0 []component.NamespaceParameter
-	if rf, ok := ret.Get(0).(func(string) []component.NamespaceParameter); ok {
+	var r0 []component.ModuleParameter
+	if rf, ok := ret.Get(0).(func(string) []component.ModuleParameter); ok {
 		r0 = rf(envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.NamespaceParameter)
+			r0 = ret.Get(0).([]component.ModuleParameter)
 		}
 	}
 
diff --git a/component/mocks/Manager.go b/component/mocks/Manager.go
index de0c0bc2..a9106672 100644
--- a/component/mocks/Manager.go
+++ b/component/mocks/Manager.go
@@ -27,13 +27,13 @@ type Manager struct {
 	mock.Mock
 }
 
-// Component provides a mock function with given fields: ksApp, nsName, componentName
-func (_m *Manager) Component(ksApp app.App, nsName string, componentName string) (component.Component, error) {
-	ret := _m.Called(ksApp, nsName, componentName)
+// Component provides a mock function with given fields: ksApp, module, componentName
+func (_m *Manager) Component(ksApp app.App, module string, componentName string) (component.Component, error) {
+	ret := _m.Called(ksApp, module, componentName)
 
 	var r0 component.Component
 	if rf, ok := ret.Get(0).(func(app.App, string, string) component.Component); ok {
-		r0 = rf(ksApp, nsName, componentName)
+		r0 = rf(ksApp, module, componentName)
 	} else {
 		if ret.Get(0) != nil {
 			r0 = ret.Get(0).(component.Component)
@@ -42,7 +42,7 @@ func (_m *Manager) Component(ksApp app.App, nsName string, componentName string)
 
 	var r1 error
 	if rf, ok := ret.Get(1).(func(app.App, string, string) error); ok {
-		r1 = rf(ksApp, nsName, componentName)
+		r1 = rf(ksApp, module, componentName)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -51,11 +51,11 @@ func (_m *Manager) Component(ksApp app.App, nsName string, componentName string)
 }
 
 // Components provides a mock function with given fields: ns
-func (_m *Manager) Components(ns component.Namespace) ([]component.Component, error) {
+func (_m *Manager) Components(ns component.Module) ([]component.Component, error) {
 	ret := _m.Called(ns)
 
 	var r0 []component.Component
-	if rf, ok := ret.Get(0).(func(component.Namespace) []component.Component); ok {
+	if rf, ok := ret.Get(0).(func(component.Module) []component.Component); ok {
 		r0 = rf(ns)
 	} else {
 		if ret.Get(0) != nil {
@@ -64,7 +64,7 @@ func (_m *Manager) Components(ns component.Namespace) ([]component.Component, er
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(component.Namespace) error); ok {
+	if rf, ok := ret.Get(1).(func(component.Module) error); ok {
 		r1 = rf(ns)
 	} else {
 		r1 = ret.Error(1)
@@ -94,8 +94,8 @@ func (_m *Manager) CreateComponent(ksApp app.App, name string, text string, _a3
 	return r0, r1
 }
 
-// CreateNamespace provides a mock function with given fields: ksApp, name
-func (_m *Manager) CreateNamespace(ksApp app.App, name string) error {
+// CreateModule provides a mock function with given fields: ksApp, name
+func (_m *Manager) CreateModule(ksApp app.App, name string) error {
 	ret := _m.Called(ksApp, name)
 
 	var r0 error
@@ -108,20 +108,22 @@ func (_m *Manager) CreateNamespace(ksApp app.App, name string) error {
 	return r0
 }
 
-// NSResolveParams provides a mock function with given fields: ns
-func (_m *Manager) NSResolveParams(ns component.Namespace) (string, error) {
-	ret := _m.Called(ns)
+// Module provides a mock function with given fields: ksApp, module
+func (_m *Manager) Module(ksApp app.App, module string) (component.Module, error) {
+	ret := _m.Called(ksApp, module)
 
-	var r0 string
-	if rf, ok := ret.Get(0).(func(component.Namespace) string); ok {
-		r0 = rf(ns)
+	var r0 component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) component.Module); ok {
+		r0 = rf(ksApp, module)
 	} else {
-		r0 = ret.Get(0).(string)
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(component.Module)
+		}
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(component.Namespace) error); ok {
-		r1 = rf(ns)
+	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
+		r1 = rf(ksApp, module)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -129,22 +131,22 @@ func (_m *Manager) NSResolveParams(ns component.Namespace) (string, error) {
 	return r0, r1
 }
 
-// Namespace provides a mock function with given fields: ksApp, nsName
-func (_m *Manager) Namespace(ksApp app.App, nsName string) (component.Namespace, error) {
-	ret := _m.Called(ksApp, nsName)
+// Modules provides a mock function with given fields: ksApp, envName
+func (_m *Manager) Modules(ksApp app.App, envName string) ([]component.Module, error) {
+	ret := _m.Called(ksApp, envName)
 
-	var r0 component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) component.Namespace); ok {
-		r0 = rf(ksApp, nsName)
+	var r0 []component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) []component.Module); ok {
+		r0 = rf(ksApp, envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(component.Namespace)
+			r0 = ret.Get(0).([]component.Module)
 		}
 	}
 
 	var r1 error
 	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
-		r1 = rf(ksApp, nsName)
+		r1 = rf(ksApp, envName)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -152,22 +154,20 @@ func (_m *Manager) Namespace(ksApp app.App, nsName string) (component.Namespace,
 	return r0, r1
 }
 
-// Namespaces provides a mock function with given fields: ksApp, envName
-func (_m *Manager) Namespaces(ksApp app.App, envName string) ([]component.Namespace, error) {
-	ret := _m.Called(ksApp, envName)
+// NSResolveParams provides a mock function with given fields: ns
+func (_m *Manager) NSResolveParams(ns component.Module) (string, error) {
+	ret := _m.Called(ns)
 
-	var r0 []component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) []component.Namespace); ok {
-		r0 = rf(ksApp, envName)
+	var r0 string
+	if rf, ok := ret.Get(0).(func(component.Module) string); ok {
+		r0 = rf(ns)
 	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.Namespace)
-		}
+		r0 = ret.Get(0).(string)
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
-		r1 = rf(ksApp, envName)
+	if rf, ok := ret.Get(1).(func(component.Module) error); ok {
+		r1 = rf(ns)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -176,15 +176,15 @@ func (_m *Manager) Namespaces(ksApp app.App, envName string) ([]component.Namesp
 }
 
 // ResolvePath provides a mock function with given fields: ksApp, path
-func (_m *Manager) ResolvePath(ksApp app.App, path string) (component.Namespace, component.Component, error) {
+func (_m *Manager) ResolvePath(ksApp app.App, path string) (component.Module, component.Component, error) {
 	ret := _m.Called(ksApp, path)
 
-	var r0 component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) component.Namespace); ok {
+	var r0 component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) component.Module); ok {
 		r0 = rf(ksApp, path)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(component.Namespace)
+			r0 = ret.Get(0).(component.Module)
 		}
 	}
 
diff --git a/component/mocks/Namespace.go b/component/mocks/Module.go
similarity index 80%
rename from component/mocks/Namespace.go
rename to component/mocks/Module.go
index 5fdfc899..ca874f49 100644
--- a/component/mocks/Namespace.go
+++ b/component/mocks/Module.go
@@ -19,13 +19,13 @@ package mocks
 import component "github.com/ksonnet/ksonnet/component"
 import mock "github.com/stretchr/testify/mock"
 
-// Namespace is an autogenerated mock type for the Namespace type
-type Namespace struct {
+// Module is an autogenerated mock type for the Module type
+type Module struct {
 	mock.Mock
 }
 
 // Components provides a mock function with given fields:
-func (_m *Namespace) Components() ([]component.Component, error) {
+func (_m *Module) Components() ([]component.Component, error) {
 	ret := _m.Called()
 
 	var r0 []component.Component
@@ -48,7 +48,7 @@ func (_m *Namespace) Components() ([]component.Component, error) {
 }
 
 // Dir provides a mock function with given fields:
-func (_m *Namespace) Dir() string {
+func (_m *Module) Dir() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -62,7 +62,7 @@ func (_m *Namespace) Dir() string {
 }
 
 // Name provides a mock function with given fields:
-func (_m *Namespace) Name() string {
+func (_m *Module) Name() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -76,15 +76,15 @@ func (_m *Namespace) Name() string {
 }
 
 // Params provides a mock function with given fields: envName
-func (_m *Namespace) Params(envName string) ([]component.NamespaceParameter, error) {
+func (_m *Module) Params(envName string) ([]component.ModuleParameter, error) {
 	ret := _m.Called(envName)
 
-	var r0 []component.NamespaceParameter
-	if rf, ok := ret.Get(0).(func(string) []component.NamespaceParameter); ok {
+	var r0 []component.ModuleParameter
+	if rf, ok := ret.Get(0).(func(string) []component.ModuleParameter); ok {
 		r0 = rf(envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.NamespaceParameter)
+			r0 = ret.Get(0).([]component.ModuleParameter)
 		}
 	}
 
@@ -99,7 +99,7 @@ func (_m *Namespace) Params(envName string) ([]component.NamespaceParameter, err
 }
 
 // ParamsPath provides a mock function with given fields:
-func (_m *Namespace) ParamsPath() string {
+func (_m *Module) ParamsPath() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -113,7 +113,7 @@ func (_m *Namespace) ParamsPath() string {
 }
 
 // ResolvedParams provides a mock function with given fields:
-func (_m *Namespace) ResolvedParams() (string, error) {
+func (_m *Module) ResolvedParams() (string, error) {
 	ret := _m.Called()
 
 	var r0 string
@@ -134,7 +134,7 @@ func (_m *Namespace) ResolvedParams() (string, error) {
 }
 
 // SetParam provides a mock function with given fields: path, value
-func (_m *Namespace) SetParam(path []string, value interface{}) error {
+func (_m *Module) SetParam(path []string, value interface{}) error {
 	ret := _m.Called(path, value)
 
 	var r0 error
diff --git a/component/namespace.go b/component/module.go
similarity index 67%
rename from component/namespace.go
rename to component/module.go
index e02ce4a4..2ec9bb45 100644
--- a/component/namespace.go
+++ b/component/module.go
@@ -28,59 +28,59 @@ import (
 	"github.com/spf13/afero"
 )
 
-func nsErrorMsg(format, nsName string) string {
-	s := fmt.Sprintf("namespace %q", nsName)
-	if nsName == "" {
+func nsErrorMsg(format, module string) string {
+	s := fmt.Sprintf("namespace %q", module)
+	if module == "" {
 		s = "root namespace"
 	}
 
 	return fmt.Sprintf(format, s)
 }
 
-// Namespace is a component namespace
-type Namespace interface {
+// Module is a component module
+type Module interface {
 	Components() ([]Component, error)
 	// TODO: is this needed?
 	Dir() string
 	Name() string
-	Params(envName string) ([]NamespaceParameter, error)
+	Params(envName string) ([]ModuleParameter, error)
 	ParamsPath() string
 	ResolvedParams() (string, error)
 	SetParam(path []string, value interface{}) error
 }
 
-// FilesystemNamespace is a component namespace that uses a filesystem for storage.
-type FilesystemNamespace struct {
+// FilesystemModule is a component namespace that uses a filesystem for storage.
+type FilesystemModule struct {
 	path string
 
 	app app.App
 }
 
-var _ Namespace = (*FilesystemNamespace)(nil)
+var _ Module = (*FilesystemModule)(nil)
 
-// NewNamespace creates an instance of Namespace.
-func NewNamespace(ksApp app.App, path string) *FilesystemNamespace {
-	return &FilesystemNamespace{app: ksApp, path: path}
+// NewModule creates an instance of .
+func NewModule(ksApp app.App, path string) *FilesystemModule {
+	return &FilesystemModule{app: ksApp, path: path}
 }
 
-// ExtractNamespacedComponent extracts a namespace and a component from a path.
-func ExtractNamespacedComponent(a app.App, path string) (Namespace, string) {
+// ExtractModuleComponent extracts a namespace and a component from a path.
+func ExtractModuleComponent(a app.App, path string) (Module, string) {
 	nsPath, component := filepath.Split(path)
-	ns := &FilesystemNamespace{path: nsPath, app: a}
+	ns := &FilesystemModule{path: nsPath, app: a}
 	return ns, component
 }
 
 // Name returns the namespace name.
-func (n *FilesystemNamespace) Name() string {
+func (n *FilesystemModule) Name() string {
 	if n.path == "" {
 		return "/"
 	}
 	return n.path
 }
 
-// GetNamespace gets a namespace by path.
-func GetNamespace(a app.App, nsName string) (Namespace, error) {
-	parts := strings.Split(nsName, "/")
+// GetModule gets a namespace by path.
+func GetModule(a app.App, module string) (Module, error) {
+	parts := strings.Split(module, "/")
 	nsDir := filepath.Join(append([]string{a.Root(), componentsRoot}, parts...)...)
 
 	exists, err := afero.Exists(a.Fs(), nsDir)
@@ -89,19 +89,19 @@ func GetNamespace(a app.App, nsName string) (Namespace, error) {
 	}
 
 	if !exists {
-		return nil, errors.New(nsErrorMsg("unable to find %s", nsName))
+		return nil, errors.New(nsErrorMsg("unable to find %s", module))
 	}
 
-	return &FilesystemNamespace{path: nsName, app: a}, nil
+	return &FilesystemModule{path: module, app: a}, nil
 }
 
 // ParamsPath generates the path to params.libsonnet for a namespace.
-func (n *FilesystemNamespace) ParamsPath() string {
+func (n *FilesystemModule) ParamsPath() string {
 	return filepath.Join(n.Dir(), paramsFile)
 }
 
 // SetParam sets params for a namespace.
-func (n *FilesystemNamespace) SetParam(path []string, value interface{}) error {
+func (n *FilesystemModule) SetParam(path []string, value interface{}) error {
 	paramsData, err := n.readParams()
 	if err != nil {
 		return err
@@ -119,12 +119,12 @@ func (n *FilesystemNamespace) SetParam(path []string, value interface{}) error {
 	return nil
 }
 
-func (n *FilesystemNamespace) writeParams(src string) error {
+func (n *FilesystemModule) writeParams(src string) error {
 	return afero.WriteFile(n.app.Fs(), n.ParamsPath(), []byte(src), 0644)
 }
 
 // Dir is the absolute directory for a namespace.
-func (n *FilesystemNamespace) Dir() string {
+func (n *FilesystemModule) Dir() string {
 	parts := strings.Split(n.path, "/")
 	path := []string{n.app.Root(), componentsRoot}
 	if len(n.path) != 0 {
@@ -134,8 +134,8 @@ func (n *FilesystemNamespace) Dir() string {
 	return filepath.Join(path...)
 }
 
-// NamespaceParameter is a namespaced paramater.
-type NamespaceParameter struct {
+// ModuleParameter is a namespaced paramater.
+type ModuleParameter struct {
 	Component string
 	Index     string
 	Key       string
@@ -144,7 +144,7 @@ type NamespaceParameter struct {
 
 // ResolvedParams resolves paramaters for a namespace. It returns a JSON encoded
 // string of component parameters.
-func (n *FilesystemNamespace) ResolvedParams() (string, error) {
+func (n *FilesystemModule) ResolvedParams() (string, error) {
 	s, err := n.readParams()
 	if err != nil {
 		return "", err
@@ -154,13 +154,13 @@ func (n *FilesystemNamespace) ResolvedParams() (string, error) {
 }
 
 // Params returns the params for a namespace.
-func (n *FilesystemNamespace) Params(envName string) ([]NamespaceParameter, error) {
+func (n *FilesystemModule) Params(envName string) ([]ModuleParameter, error) {
 	components, err := n.Components()
 	if err != nil {
 		return nil, err
 	}
 
-	var nsps []NamespaceParameter
+	var nsps []ModuleParameter
 	for _, c := range components {
 		params, err := c.Params(envName)
 		if err != nil {
@@ -175,7 +175,7 @@ func (n *FilesystemNamespace) Params(envName string) ([]NamespaceParameter, erro
 	return nsps, nil
 }
 
-func (n *FilesystemNamespace) readParams() (string, error) {
+func (n *FilesystemModule) readParams() (string, error) {
 	b, err := afero.ReadFile(n.app.Fs(), n.ParamsPath())
 	if err != nil {
 		return "", err
@@ -184,8 +184,8 @@ func (n *FilesystemNamespace) readParams() (string, error) {
 	return string(b), nil
 }
 
-// NamespacesFromEnv returns all namespaces given an environment.
-func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
+// ModulesFromEnv returns all namespaces given an environment.
+func ModulesFromEnv(a app.App, env string) ([]Module, error) {
 	paths, err := MakePaths(a, env)
 	if err != nil {
 		return nil, err
@@ -194,12 +194,12 @@ func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
 	prefix := a.Root() + "/components"
 
 	seen := make(map[string]bool)
-	var namespaces []Namespace
+	var namespaces []Module
 	for _, path := range paths {
-		nsName := strings.TrimPrefix(path, prefix)
-		if _, ok := seen[nsName]; !ok {
-			seen[nsName] = true
-			ns, err := GetNamespace(a, nsName)
+		module := strings.TrimPrefix(path, prefix)
+		if _, ok := seen[module]; !ok {
+			seen[module] = true
+			ns, err := GetModule(a, module)
 			if err != nil {
 				return nil, err
 			}
@@ -211,11 +211,11 @@ func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
 	return namespaces, nil
 }
 
-// Namespaces returns all component namespaces
-func Namespaces(a app.App) ([]Namespace, error) {
+// Modules returns all component namespaces
+func Modules(a app.App) ([]Module, error) {
 	componentRoot := filepath.Join(a.Root(), componentsRoot)
 
-	var namespaces []Namespace
+	var namespaces []Module
 
 	err := afero.Walk(a.Fs(), componentRoot, func(path string, fi os.FileInfo, err error) error {
 		if err != nil {
@@ -231,7 +231,7 @@ func Namespaces(a app.App) ([]Namespace, error) {
 			if ok {
 				nsPath := strings.TrimPrefix(path, componentRoot)
 				nsPath = strings.TrimPrefix(nsPath, string(filepath.Separator))
-				ns := &FilesystemNamespace{path: nsPath, app: a}
+				ns := &FilesystemModule{path: nsPath, app: a}
 				namespaces = append(namespaces, ns)
 			}
 		}
@@ -251,7 +251,7 @@ func Namespaces(a app.App) ([]Namespace, error) {
 }
 
 // Components returns the components in a namespace.
-func (n *FilesystemNamespace) Components() ([]Component, error) {
+func (n *FilesystemModule) Components() ([]Component, error) {
 	parts := strings.Split(n.path, "/")
 	nsDir := filepath.Join(append([]string{n.app.Root(), componentsRoot}, parts...)...)
 
diff --git a/component/namespace_test.go b/component/module_test.go
similarity index 88%
rename from component/namespace_test.go
rename to component/module_test.go
index 1640817f..b05aab3a 100644
--- a/component/namespace_test.go
+++ b/component/module_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNamespace_Components(t *testing.T) {
+func TestModule_Components(t *testing.T) {
 	app, fs := appMock("/app")
 
 	stageFile(t, fs, "certificate-crd.yaml", "/app/components/ns1/certificate-crd.yaml")
@@ -31,16 +31,16 @@ func TestNamespace_Components(t *testing.T) {
 
 	cases := []struct {
 		name   string
-		nsName string
+		module string
 		count  int
 	}{
 		{
 			name:   "no components",
-			nsName: "/",
+			module: "/",
 		},
 		{
 			name:   "with components",
-			nsName: "ns1",
+			module: "ns1",
 			count:  1,
 		},
 	}
@@ -48,10 +48,10 @@ func TestNamespace_Components(t *testing.T) {
 	for _, tc := range cases {
 		t.Run(tc.name, func(t *testing.T) {
 
-			ns, err := GetNamespace(app, tc.nsName)
+			ns, err := GetModule(app, tc.module)
 			require.NoError(t, err)
 
-			assert.Equal(t, tc.nsName, ns.Name())
+			assert.Equal(t, tc.module, ns.Name())
 			components, err := ns.Components()
 			require.NoError(t, err)
 
diff --git a/component/yaml.go b/component/yaml.go
index 1063c48c..e1dbecbe 100644
--- a/component/yaml.go
+++ b/component/yaml.go
@@ -85,7 +85,7 @@ func ImportYaml(r io.Reader) (*TypeSpec, Properties, error) {
 // YAML represents a YAML component. Since JSON is a subset of YAML, it can handle JSON as well.
 type YAML struct {
 	app        app.App
-	nsName     string
+	module     string
 	source     string
 	paramsPath string
 }
@@ -93,10 +93,10 @@ type YAML struct {
 var _ Component = (*YAML)(nil)
 
 // NewYAML creates an instance of YAML.
-func NewYAML(a app.App, nsName, source, paramsPath string) *YAML {
+func NewYAML(a app.App, module, source, paramsPath string) *YAML {
 	return &YAML{
 		app:        a,
-		nsName:     nsName,
+		module:     module,
 		source:     source,
 		paramsPath: paramsPath,
 	}
@@ -110,15 +110,15 @@ func (y *YAML) Name(wantsNameSpaced bool) string {
 		return name
 	}
 
-	if y.nsName == "/" {
+	if y.module == "/" {
 		return name
 	}
 
-	return path.Join(y.nsName, name)
+	return path.Join(y.module, name)
 }
 
 // Params returns params for a component.
-func (y *YAML) Params(envName string) ([]NamespaceParameter, error) {
+func (y *YAML) Params(envName string) ([]ModuleParameter, error) {
 	libPath, err := y.app.LibPath("default")
 	if err != nil {
 		return nil, err
@@ -154,7 +154,7 @@ func (y *YAML) Params(envName string) ([]NamespaceParameter, error) {
 		return nil, err
 	}
 
-	var params []NamespaceParameter
+	var params []ModuleParameter
 	for componentName, componentValue := range props {
 		matches := re.FindAllStringSubmatch(componentName, 1)
 		if len(matches) > 0 {
@@ -202,8 +202,8 @@ func isLeaf(path []string, key string, valueMap map[string]Values) (string, bool
 	return "", false
 }
 
-func (y *YAML) paramValues(componentName, index string, valueMap map[string]Values, m map[string]interface{}, path []string) ([]NamespaceParameter, error) {
-	var params []NamespaceParameter
+func (y *YAML) paramValues(componentName, index string, valueMap map[string]Values, m map[string]interface{}, path []string) ([]ModuleParameter, error) {
+	var params []ModuleParameter
 
 	for k, v := range m {
 		var s string
@@ -211,7 +211,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 		default:
 			if childPath, exists := isLeaf(path, k, valueMap); exists {
 				s = fmt.Sprintf("%v", v)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -227,7 +227,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 					return nil, err
 				}
 				s = string(b)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -250,7 +250,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 					return nil, err
 				}
 				s = string(b)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -331,7 +331,7 @@ func (y *YAML) readParams(envName string) (string, error) {
 		return y.readNamespaceParams()
 	}
 
-	ns, err := GetNamespace(y.app, y.nsName)
+	ns, err := GetModule(y.app, y.module)
 	if err != nil {
 		return "", err
 	}
diff --git a/component/yaml_test.go b/component/yaml_test.go
index 5828e985..f9dec01d 100644
--- a/component/yaml_test.go
+++ b/component/yaml_test.go
@@ -73,7 +73,7 @@ func TestYAML_Params(t *testing.T) {
 	require.Len(t, params, 1)
 
 	param := params[0]
-	expected := NamespaceParameter{
+	expected := ModuleParameter{
 		Component: "deployment",
 		Index:     "0",
 		Key:       "metadata.labels",
@@ -96,7 +96,7 @@ func TestYAML_Params_literal(t *testing.T) {
 	require.Len(t, params, 1)
 
 	param := params[0]
-	expected := NamespaceParameter{
+	expected := ModuleParameter{
 		Component: "rbac",
 		Index:     "1",
 		Key:       "metadata.name",
diff --git a/docs/cli-reference/ks.md b/docs/cli-reference/ks.md
index fd92abd7..397fc15e 100644
--- a/docs/cli-reference/ks.md
+++ b/docs/cli-reference/ks.md
@@ -32,7 +32,7 @@ ks [flags]
 * [ks generate](ks_generate.md)	 - Use the specified prototype to generate a component manifest
 * [ks import](ks_import.md)	 - Import manifest
 * [ks init](ks_init.md)	 - Initialize a ksonnet application
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 * [ks param](ks_param.md)	 - Manage ksonnet parameters for components and environments
 * [ks pkg](ks_pkg.md)	 - Manage packages and dependencies for the current ksonnet application
 * [ks prototype](ks_prototype.md)	 - Instantiate, inspect, and get examples for ksonnet prototypes
diff --git a/docs/cli-reference/ks_component_list.md b/docs/cli-reference/ks_component_list.md
index e82d82fa..ce5bbf79 100644
--- a/docs/cli-reference/ks_component_list.md
+++ b/docs/cli-reference/ks_component_list.md
@@ -25,9 +25,9 @@ ks component list
 ### Options
 
 ```
-  -h, --help               help for list
-      --namespace string   Namespace
-  -o, --output string      Output format. Valid options: wide
+  -h, --help            help for list
+      --module string   Component module
+  -o, --output string   Output format. Valid options: wide
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_env_targets.md b/docs/cli-reference/ks_env_targets.md
index b1d072c9..854ac7fa 100644
--- a/docs/cli-reference/ks_env_targets.md
+++ b/docs/cli-reference/ks_env_targets.md
@@ -13,7 +13,8 @@ ks env targets [flags]
 ### Options
 
 ```
-  -h, --help   help for targets
+  -h, --help                 help for targets
+      --module stringSlice   Component modules to include
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_import.md b/docs/cli-reference/ks_import.md
index 0b0699a0..db55343a 100644
--- a/docs/cli-reference/ks_import.md
+++ b/docs/cli-reference/ks_import.md
@@ -13,9 +13,9 @@ ks import [flags]
 ### Options
 
 ```
-  -f, --filename string    Filename or directory for component to import
-  -h, --help               help for import
-      --namespace string   Component namespace
+  -f, --filename string   Filename or directory for component to import
+  -h, --help              help for import
+      --module string     Component module
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_ns.md b/docs/cli-reference/ks_module.md
similarity index 62%
rename from docs/cli-reference/ks_ns.md
rename to docs/cli-reference/ks_module.md
index 5ccfe111..6f0ab3d2 100644
--- a/docs/cli-reference/ks_ns.md
+++ b/docs/cli-reference/ks_module.md
@@ -1,15 +1,15 @@
-## ks ns
+## ks module
 
-ns
+module
 
 ### Synopsis
 
-ns
+module
 
 ### Options
 
 ```
-  -h, --help   help for ns
+  -h, --help   help for module
 ```
 
 ### Options inherited from parent commands
@@ -21,6 +21,6 @@ ns
 ### SEE ALSO
 
 * [ks](ks.md)	 - Configure your application to deploy to a Kubernetes cluster
-* [ks ns create](ks_ns_create.md)	 - create
-* [ks ns list](ks_ns_list.md)	 - list
+* [ks module create](ks_module_create.md)	 - create
+* [ks module list](ks_module_list.md)	 - list
 
diff --git a/docs/cli-reference/ks_ns_create.md b/docs/cli-reference/ks_module_create.md
similarity index 72%
rename from docs/cli-reference/ks_ns_create.md
rename to docs/cli-reference/ks_module_create.md
index 3239b291..9fe6fd73 100644
--- a/docs/cli-reference/ks_ns_create.md
+++ b/docs/cli-reference/ks_module_create.md
@@ -1,4 +1,4 @@
-## ks ns create
+## ks module create
 
 create
 
@@ -7,7 +7,7 @@ create
 create
 
 ```
-ks ns create <name> [flags]
+ks module create <name> [flags]
 ```
 
 ### Options
@@ -24,5 +24,5 @@ ks ns create <name> [flags]
 
 ### SEE ALSO
 
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 
diff --git a/docs/cli-reference/ks_ns_list.md b/docs/cli-reference/ks_module_list.md
similarity index 64%
rename from docs/cli-reference/ks_ns_list.md
rename to docs/cli-reference/ks_module_list.md
index 0929c200..c2aaacc1 100644
--- a/docs/cli-reference/ks_ns_list.md
+++ b/docs/cli-reference/ks_module_list.md
@@ -1,4 +1,4 @@
-## ks ns list
+## ks module list
 
 list
 
@@ -7,13 +7,13 @@ list
 list
 
 ```
-ks ns list [flags]
+ks module list [flags]
 ```
 
 ### Options
 
 ```
-      --env string   Environment to list namespaces for
+      --env string   Environment to list modules for
   -h, --help         help for list
 ```
 
@@ -25,5 +25,5 @@ ks ns list [flags]
 
 ### SEE ALSO
 
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 
diff --git a/docs/cli-reference/ks_param_list.md b/docs/cli-reference/ks_param_list.md
index 390980ed..7ef1dffc 100644
--- a/docs/cli-reference/ks_param_list.md
+++ b/docs/cli-reference/ks_param_list.md
@@ -42,9 +42,9 @@ ks param list guestbook --env=dev
 ### Options
 
 ```
-      --env string         Specify environment to list parameters for
-  -h, --help               help for list
-      --namespace string   Specify namespace to list parameters for
+      --env string      Specify environment to list parameters for
+  -h, --help            help for list
+      --module string   Specify module to list parameters for
 ```
 
 ### Options inherited from parent commands
diff --git a/e2e/component_test.go b/e2e/component_test.go
index 0281b33e..1a577890 100644
--- a/e2e/component_test.go
+++ b/e2e/component_test.go
@@ -46,7 +46,7 @@ var _ = Describe("ks component", func() {
 
 		Context("with a namespace", func() {
 			It("lists the components for a namespace in wide format", func() {
-				o := a.runKs("component", "list", "--namespace", "/")
+				o := a.runKs("component", "list", "--module", "/")
 				assertExitStatus(o, 0)
 				assertOutput("component/list/output.txt", o.stdout)
 			})
diff --git a/e2e/env_test.go b/e2e/env_test.go
index 6f79ffe7..6b3bc5ef 100644
--- a/e2e/env_test.go
+++ b/e2e/env_test.go
@@ -165,7 +165,7 @@ var _ = Describe("ks env", func() {
 			Context("updating the targets", func() {
 				It("updates the name of an environment", func() {
 					o := a.runKs("env", "targets", "default",
-						"--namespace", "/")
+						"--module", "/")
 					assertExitStatus(o, 0)
 
 					o = a.envDescribe("default")
@@ -182,7 +182,7 @@ var _ = Describe("ks env", func() {
 			Context("target namespace does not exist", func() {
 				It("return an error", func() {
 					o := a.runKs("env", "targets", "default",
-						"--namespace", "bad")
+						"--module", "bad")
 					assertExitStatus(o, 1)
 					assertOutput("env/targets/invalid-target.txt", o.stderr)
 				})
diff --git a/e2e/ns_test.go b/e2e/module_test.go
similarity index 71%
rename from e2e/ns_test.go
rename to e2e/module_test.go
index 9eb71e85..bf5e08dc 100644
--- a/e2e/ns_test.go
+++ b/e2e/module_test.go
@@ -21,7 +21,7 @@ import (
 	. "github.com/onsi/ginkgo"
 )
 
-var _ = Describe("ks ns", func() {
+var _ = Describe("ks module", func() {
 	var a app
 
 	BeforeEach(func() {
@@ -32,39 +32,39 @@ var _ = Describe("ks ns", func() {
 	Describe("create", func() {
 		Context("it does not exist", func() {
 			It("creates the namespace", func() {
-				o := a.runKs("ns", "create", "new-ns")
+				o := a.runKs("module", "create", "new-module")
 				assertExitStatus(o, 0)
 			})
 		})
 		Context("it exists", func() {
 			It("returns an error", func() {
-				o := a.runKs("ns", "create", "/")
+				o := a.runKs("module", "create", "/")
 				assertExitStatus(o, 1)
-				assertOutput("ns/create/invalid.txt", o.stderr)
+				assertOutput("module/create/invalid.txt", o.stderr)
 			})
 		})
 	})
 
 	Describe("list", func() {
-		It("shows a list of namespaces", func() {
-			o := a.runKs("ns", "list")
+		It("shows a list of modules", func() {
+			o := a.runKs("module", "list")
 			assertExitStatus(o, 0)
-			assertOutput("ns/list/output.txt", o.stdout)
+			assertOutput("module/list/output.txt", o.stdout)
 		})
 
 		Context("with a valid environment", func() {
 			It("shows a list of namespaces", func() {
-				o := a.runKs("ns", "list", "--env", "default")
+				o := a.runKs("module", "list", "--env", "default")
 				assertExitStatus(o, 0)
-				assertOutput("ns/list/output.txt", o.stdout)
+				assertOutput("module/list/output.txt", o.stdout)
 			})
 		})
 
 		Context("with an invalid environment", func() {
 			It("returns an error", func() {
-				o := a.runKs("ns", "list", "--env", "invalid")
+				o := a.runKs("module", "list", "--env", "invalid")
 				assertExitStatus(o, 1)
-				assertOutput("ns/list/invalid.txt", o.stderr)
+				assertOutput("module/list/invalid.txt", o.stderr)
 			})
 		})
 	})
diff --git a/e2e/testdata/output/module/create/invalid.txt b/e2e/testdata/output/module/create/invalid.txt
new file mode 100644
index 00000000..47d43d11
--- /dev/null
+++ b/e2e/testdata/output/module/create/invalid.txt
@@ -0,0 +1 @@
+module "/" already exists
diff --git a/e2e/testdata/output/ns/list/invalid.txt b/e2e/testdata/output/module/list/invalid.txt
similarity index 100%
rename from e2e/testdata/output/ns/list/invalid.txt
rename to e2e/testdata/output/module/list/invalid.txt
diff --git a/e2e/testdata/output/module/list/output.txt b/e2e/testdata/output/module/list/output.txt
new file mode 100644
index 00000000..43acadd5
--- /dev/null
+++ b/e2e/testdata/output/module/list/output.txt
@@ -0,0 +1,3 @@
+MODULE
+======
+/
diff --git a/e2e/testdata/output/ns/create/invalid.txt b/e2e/testdata/output/ns/create/invalid.txt
deleted file mode 100644
index 8ae68547..00000000
--- a/e2e/testdata/output/ns/create/invalid.txt
+++ /dev/null
@@ -1 +0,0 @@
-namespace "/" already exists
diff --git a/e2e/testdata/output/ns/list/output.txt b/e2e/testdata/output/ns/list/output.txt
deleted file mode 100644
index 14ca3bcf..00000000
--- a/e2e/testdata/output/ns/list/output.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-NAMESPACE
-=========
-/
diff --git a/metadata/component.go b/metadata/component.go
index a9ce6c55..84dd7e5c 100644
--- a/metadata/component.go
+++ b/metadata/component.go
@@ -52,7 +52,7 @@ func (m *manager) GetAllComponents() ([]component.Component, error) {
 	if err != nil {
 		return nil, err
 	}
-	namespaces, err := component.Namespaces(ksApp)
+	namespaces, err := component.Modules(ksApp)
 	if err != nil {
 		return nil, err
 	}
@@ -100,7 +100,7 @@ func (m *manager) GetAllComponentParams(root string) (map[string]param.Params, e
 		return nil, err
 	}
 
-	namespaces, err := component.Namespaces(ksApp)
+	namespaces, err := component.Modules(ksApp)
 	if err != nil {
 		return nil, errors.Wrap(err, "find component namespaces")
 	}
@@ -137,7 +137,7 @@ func (m *manager) SetComponentParams(path string, params param.Params) error {
 		return err
 	}
 
-	ns, componentName := component.ExtractNamespacedComponent(ksApp, path)
+	ns, componentName := component.ExtractModuleComponent(ksApp, path)
 	paramsPath := ns.ParamsPath()
 
 	text, err := afero.ReadFile(m.appFS, paramsPath)
diff --git a/metadata/environment.go b/metadata/environment.go
index df366d55..6f533fb0 100644
--- a/metadata/environment.go
+++ b/metadata/environment.go
@@ -34,7 +34,7 @@ var (
 	envCreate = env.Create
 )
 
-func (m *manager) GetEnvironmentParams(name, nsName string) (map[string]param.Params, error) {
+func (m *manager) GetEnvironmentParams(name, module string) (map[string]param.Params, error) {
 	a, err := m.App()
 	if err != nil {
 		return nil, err
@@ -44,7 +44,7 @@ func (m *manager) GetEnvironmentParams(name, nsName string) (map[string]param.Pa
 		App: a,
 	}
 
-	return env.GetParams(name, nsName, config)
+	return env.GetParams(name, module, config)
 }
 
 func (m *manager) SetEnvironmentParams(envName, component string, params param.Params) error {
diff --git a/metadata/interface.go b/metadata/interface.go
index c31324fc..05d8f3c9 100644
--- a/metadata/interface.go
+++ b/metadata/interface.go
@@ -48,7 +48,7 @@ type Manager interface {
 	// mapping of parameters of the form:
 	// componentName => {param key => param val}
 	// i.e.: "nginx" => {"replicas" => 1, "name": "nginx"}
-	GetEnvironmentParams(name, nsName string) (map[string]param.Params, error)
+	GetEnvironmentParams(name, module string) (map[string]param.Params, error)
 	SetEnvironmentParams(env, component string, params param.Params) error
 }
 
diff --git a/pkg/env/params.go b/pkg/env/params.go
index d435b894..8903ee6c 100644
--- a/pkg/env/params.go
+++ b/pkg/env/params.go
@@ -66,7 +66,7 @@ type GetParamsConfig struct {
 }
 
 // GetParams gets all parameters for an environment.
-func GetParams(envName, nsName string, config GetParamsConfig) (map[string]param.Params, error) {
+func GetParams(envName, module string, config GetParamsConfig) (map[string]param.Params, error) {
 	exists, err := envExists(config.App, envName)
 	if err != nil {
 		return nil, err
@@ -87,7 +87,7 @@ func GetParams(envName, nsName string, config GetParamsConfig) (map[string]param
 	}
 
 	// figure out what component we need
-	ns := component.NewNamespace(config.App, nsName)
+	ns := component.NewModule(config.App, module)
 	componentParamsFile, err := afero.ReadFile(config.App.Fs(), ns.ParamsPath())
 	if err != nil {
 		return nil, err
diff --git a/pkg/kubecfg/param_diff.go b/pkg/kubecfg/param_diff.go
index f3024671..1dcfb3a4 100644
--- a/pkg/kubecfg/param_diff.go
+++ b/pkg/kubecfg/param_diff.go
@@ -75,7 +75,7 @@ func (c *ParamDiffCmd) Run(out io.Writer) error {
 		return err
 	}
 
-	ns, componentName := component.ExtractNamespacedComponent(ksApp, c.component)
+	ns, componentName := component.ExtractModuleComponent(ksApp, c.component)
 
 	params1, err := manager.GetEnvironmentParams(c.env1, ns.Name())
 	if err != nil {
diff --git a/pkg/pipeline/pipeline.go b/pkg/pipeline/pipeline.go
index 8715a754..eeabd4ae 100644
--- a/pkg/pipeline/pipeline.go
+++ b/pkg/pipeline/pipeline.go
@@ -63,20 +63,20 @@ func New(ksApp app.App, envName string, opts ...Opt) *Pipeline {
 }
 
 // Namespaces returns the namespaces that belong to this pipeline.
-func (p *Pipeline) Namespaces() ([]component.Namespace, error) {
-	return p.cm.Namespaces(p.app, p.envName)
+func (p *Pipeline) Modules() ([]component.Module, error) {
+	return p.cm.Modules(p.app, p.envName)
 }
 
 // EnvParameters creates parameters for a namespace given an environment.
-func (p *Pipeline) EnvParameters(nsName string) (string, error) {
-	ns, err := p.cm.Namespace(p.app, nsName)
+func (p *Pipeline) EnvParameters(module string) (string, error) {
+	ns, err := p.cm.Module(p.app, module)
 	if err != nil {
-		return "", errors.Wrapf(err, "load namespace %s", nsName)
+		return "", errors.Wrapf(err, "load module %s", module)
 	}
 
 	paramsStr, err := p.cm.NSResolveParams(ns)
 	if err != nil {
-		return "", errors.Wrapf(err, "resolve params for %s", nsName)
+		return "", errors.Wrapf(err, "resolve params for %s", module)
 	}
 
 	data, err := p.app.EnvironmentParams(p.envName)
@@ -93,7 +93,7 @@ func (p *Pipeline) EnvParameters(nsName string) (string, error) {
 
 // Components returns the components that belong to this pipeline.
 func (p *Pipeline) Components(filter []string) ([]component.Component, error) {
-	namespaces, err := p.Namespaces()
+	namespaces, err := p.Modules()
 	if err != nil {
 		return nil, err
 	}
@@ -114,7 +114,7 @@ func (p *Pipeline) Components(filter []string) ([]component.Component, error) {
 
 // Objects converts components into Kubernetes objects.
 func (p *Pipeline) Objects(filter []string) ([]*unstructured.Unstructured, error) {
-	namespaces, err := p.Namespaces()
+	namespaces, err := p.Modules()
 	if err != nil {
 		return nil, errors.Wrap(err, "get namespaces")
 	}
diff --git a/pkg/pipeline/pipeline_test.go b/pkg/pipeline/pipeline_test.go
index d857dd89..83151f16 100644
--- a/pkg/pipeline/pipeline_test.go
+++ b/pkg/pipeline/pipeline_test.go
@@ -30,10 +30,10 @@ import (
 
 func TestPipeline_Namespaces(t *testing.T) {
 	withPipeline(t, func(p *Pipeline, m *cmocks.Manager, a *appmocks.App) {
-		namespaces := []component.Namespace{}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
+		namespaces := []component.Module{}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
 
-		got, err := p.Namespaces()
+		got, err := p.Modules()
 		require.NoError(t, err)
 
 		require.Equal(t, namespaces, got)
@@ -42,10 +42,10 @@ func TestPipeline_Namespaces(t *testing.T) {
 
 func TestPipeline_EnvParameters(t *testing.T) {
 	withPipeline(t, func(p *Pipeline, m *cmocks.Manager, a *appmocks.App) {
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 
@@ -61,10 +61,10 @@ func TestPipeline_Components(t *testing.T) {
 		cpnt := &cmocks.Component{}
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -89,10 +89,10 @@ func TestPipeline_Components_filtered(t *testing.T) {
 		cpnt2 := mockComponent("cpnt2")
 		components := []component.Component{cpnt1, cpnt2}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -117,10 +117,10 @@ func TestPipeline_Objects(t *testing.T) {
 		cpnt.On("Name", true).Return("name")
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -143,10 +143,10 @@ func TestPipeline_YAML(t *testing.T) {
 		cpnt.On("Name", true).Return("name")
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
diff --git a/testdata/schema-v1.json b/testdata/schema-v1.json
index 0cbeb306..b263c035 100644
--- a/testdata/schema-v1.json
+++ b/testdata/schema-v1.json
@@ -9976,7 +9976,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Pod",
-      "nickname": "connectOptionsNamespacedPodProxy",
+      "nickname": "connectOptiomodulespacedPodProxy",
       "parameters": [
        {
         "type": "string",
@@ -10296,7 +10296,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Pod",
-      "nickname": "connectOptionsNamespacedPodProxyWithPath",
+      "nickname": "connectOptiomodulespacedPodProxyWithPath",
       "parameters": [
        {
         "type": "string",
@@ -16771,7 +16771,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Service",
-      "nickname": "connectOptionsNamespacedServiceProxy",
+      "nickname": "connectOptiomodulespacedServiceProxy",
       "parameters": [
        {
         "type": "string",
@@ -17091,7 +17091,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Service",
-      "nickname": "connectOptionsNamespacedServiceProxyWithPath",
+      "nickname": "connectOptiomodulespacedServiceProxyWithPath",
       "parameters": [
        {
         "type": "string",
-- 
GitLab