diff --git a/cmd/build.go b/cmd/build.go
index 17ff43b021783026c21232364c25b45c28d7985b_Y21kL2J1aWxkLmdv..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_Y21kL2J1aWxkLmdv 100644
--- a/cmd/build.go
+++ b/cmd/build.go
@@ -9,10 +9,11 @@
 
 type BuildCmd struct {
 	Args struct {
-		DryRun    bool   `short:"d" long:"dry-run" description:"if set only prints commands but do not run them"`
-		Keep      bool   `short:"k" long:"keep" description:"Keep the temporary files"`
-		Output    string `short:"o" long:"output" description:"output directory, use \"stdout\" to print to stdout"`
-		Namespace string `short:"n" long:"namespace" description:"force helm namespace flag for all helm charts"`
+		DryRun         bool   `short:"d" long:"dry-run" description:"if set only prints commands but do not run them"`
+		Keep           bool   `short:"k" long:"keep" description:"Keep the temporary files"`
+		Output         string `short:"o" long:"output" description:"output directory, use \"stdout\" to print to stdout"`
+		Namespace      string `short:"n" long:"namespace" description:"force helm namespace flag for all helm charts"`
+		WithoutHydrate bool   `short:"h" long:"without-hydrate" description:"don't hydrate files with beaver variables"`
 	}
 	PositionalArgs struct {
 		DirName string `required:"yes" positional-arg-name:"directory"`
@@ -30,7 +31,15 @@
 	log := LoggingOptions.Logger()
 	log.Debug().Str("directory", cmd.PositionalArgs.DirName).Msg("starting beaver")
 
-	config := runner.NewCmdConfig(log, ".", cmd.PositionalArgs.DirName, cmd.Args.DryRun, cmd.Args.Output, cmd.Args.Namespace)
+	config := runner.NewCmdConfig(
+		cmd.log,
+		".",
+		cmd.PositionalArgs.DirName,
+		cmd.Args.DryRun,
+		cmd.Args.WithoutHydrate,
+		cmd.Args.Output,
+		cmd.Args.Namespace,
+	)
 
 	path, err := os.Getwd()
 	if err != nil {
diff --git a/runner/cmd_config.go b/runner/cmd_config.go
index 17ff43b021783026c21232364c25b45c28d7985b_cnVubmVyL2NtZF9jb25maWcuZ28=..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_cnVubmVyL2NtZF9jb25maWcuZ28= 100644
--- a/runner/cmd_config.go
+++ b/runner/cmd_config.go
@@ -61,12 +61,13 @@
 }
 
 type CmdConfig struct {
-	Spec      CmdSpec
-	RootDir   string
-	Layers    []string
-	Namespace string
-	Logger    zerolog.Logger
-	DryRun    bool
-	Output    string
+	Spec           CmdSpec
+	RootDir        string
+	Layers         []string
+	Namespace      string
+	Logger         zerolog.Logger
+	DryRun         bool
+	WithoutHydrate bool
+	Output         string
 }
 
@@ -71,5 +72,13 @@
 }
 
-func NewCmdConfig(logger zerolog.Logger, rootDir, configDir string, dryRun bool, output string, namespace string) *CmdConfig {
+func NewCmdConfig(
+	logger zerolog.Logger,
+	rootDir,
+	configDir string,
+	dryRun bool,
+	withoutHydrate bool,
+	output string,
+	namespace string,
+) *CmdConfig {
 	cmdConfig := &CmdConfig{}
 	cmdConfig.DryRun = dryRun
@@ -74,5 +83,6 @@
 	cmdConfig := &CmdConfig{}
 	cmdConfig.DryRun = dryRun
+	cmdConfig.WithoutHydrate = withoutHydrate
 	cmdConfig.Output = output
 	cmdConfig.RootDir = rootDir
 	cmdConfig.Layers = append(cmdConfig.Layers, configDir)
@@ -363,10 +373,10 @@
 	}
 
 	for key, chart := range c.Spec.Charts {
-		paths, err := hydrateFiles(dirName, variables, chart.ValuesFileNames)
+		paths, err := hydrateFiles(dirName, variables, chart.ValuesFileNames, c.WithoutHydrate)
 		if err != nil {
 			return err
 		}
 		chart.ValuesFileNames = paths
 		c.Spec.Charts[key] = chart
 	}
@@ -367,10 +377,10 @@
 		if err != nil {
 			return err
 		}
 		chart.ValuesFileNames = paths
 		c.Spec.Charts[key] = chart
 	}
-	paths, err := hydrateFiles(dirName, variables, c.Spec.Ytt)
+	paths, err := hydrateFiles(dirName, variables, c.Spec.Ytt, c.WithoutHydrate)
 	if err != nil {
 		return err
 	}
diff --git a/runner/cmd_test.go b/runner/cmd_test.go
index 17ff43b021783026c21232364c25b45c28d7985b_cnVubmVyL2NtZF90ZXN0Lmdv..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_cnVubmVyL2NtZF90ZXN0Lmdv 100644
--- a/runner/cmd_test.go
+++ b/runner/cmd_test.go
@@ -35,7 +35,7 @@
 	testPath := filepath.Join("environments", "ns1")
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testPath, false, "", "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testPath, false, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
diff --git a/runner/config_test.go b/runner/config_test.go
index 17ff43b021783026c21232364c25b45c28d7985b_cnVubmVyL2NvbmZpZ190ZXN0Lmdv..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_cnVubmVyL2NvbmZpZ190ZXN0Lmdv 100644
--- a/runner/config_test.go
+++ b/runner/config_test.go
@@ -179,7 +179,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -209,7 +209,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -225,7 +225,7 @@
 	testNS := "environments/ns1"
 	absConfigDir, err := filepath.Abs(fixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "", "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
@@ -391,7 +391,7 @@
 	tl := testutils.NewTestLogger(t)
 	absConfigDir, err := filepath.Abs(shaFixtures)
 	require.NoError(t, err)
-	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, "base", false, "", "")
+	c := runner.NewCmdConfig(tl.Logger(), absConfigDir, "base", false, false, "", "")
 	tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
 	require.NoError(t, err)
 	defer func() {
diff --git a/runner/hydrate.go b/runner/hydrate.go
index 17ff43b021783026c21232364c25b45c28d7985b_cnVubmVyL2h5ZHJhdGUuZ28=..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_cnVubmVyL2h5ZHJhdGUuZ28= 100644
--- a/runner/hydrate.go
+++ b/runner/hydrate.go
@@ -161,8 +161,8 @@
 }
 
 // hydrate a given file
-func hydrate(input string, output io.Writer, variables map[string]interface{}) error {
+func hydrate(input string, output io.Writer, variables map[string]interface{}, disabled bool) error {
 	byteTemplate, err := os.ReadFile(input)
 	if err != nil {
 		return fmt.Errorf("failed to read %s: %w", input, err)
 	}
@@ -165,8 +165,12 @@
 	byteTemplate, err := os.ReadFile(input)
 	if err != nil {
 		return fmt.Errorf("failed to read %s: %w", input, err)
 	}
+	if disabled {
+		_, err := output.Write(byteTemplate)
+		return err
+	}
 	return Hydrate(byteTemplate, output, variables)
 }
 
 // hydrateFiles in a given directory
@@ -169,8 +173,8 @@
 	return Hydrate(byteTemplate, output, variables)
 }
 
 // hydrateFiles in a given directory
-func hydrateFiles(tmpDir string, variables map[string]interface{}, paths []string) ([]string, error) {
+func hydrateFiles(tmpDir string, variables map[string]interface{}, paths []string, disabled bool) ([]string, error) {
 	var result []string
 	for _, path := range paths {
 		fileInfo, err := os.Stat(path)
@@ -190,7 +194,7 @@
 		defer func() {
 			_ = tmpFile.Close()
 		}()
-		if err := hydrate(path, tmpFile, variables); err != nil {
+		if err := hydrate(path, tmpFile, variables, disabled); err != nil {
 			return nil, fmt.Errorf("failed to hydrate: %w", err)
 		}
 		result = append(result, tmpFile.Name())
diff --git a/runner/main.go b/runner/main.go
index 17ff43b021783026c21232364c25b45c28d7985b_cnVubmVyL21haW4uZ28=..4157e9d38f078a9e1d71c4d8371716019eb9d0f5_cnVubmVyL21haW4uZ28= 100644
--- a/runner/main.go
+++ b/runner/main.go
@@ -105,7 +105,7 @@
 				}
 			}()
 		}
-		if err := hydrate(inFilePath, outFile, variables); err != nil {
+		if err := hydrate(inFilePath, outFile, variables, r.config.WithoutHydrate); err != nil {
 			return fmt.Errorf("cannot hydrate: %s - %w", outFilePath, err)
 		}
 	}
@@ -209,7 +209,7 @@
 				"build": RelInputFilePath,
 			}
 
-			if err := hydrate(backupFile, outFile, variables); err != nil {
+			if err := hydrate(backupFile, outFile, variables, r.config.WithoutHydrate); err != nil {
 				return nil, fmt.Errorf("cannot hydrate: %s - %w", fPath, err)
 			}
 			lastKustomizeFolder = filepath.Join(layer, "kustomize")