diff --git a/.changes/tauri-v2-stable.md b/.changes/tauri-v2-stable.md
new file mode 100644
index 0000000000..beab57af1d
--- /dev/null
+++ b/.changes/tauri-v2-stable.md
@@ -0,0 +1,6 @@
+---
+"create-tauri-app": minor
+"create-tauri-app-js": minor
+---
+
+Update to v2 stable, meaning the `--alpha`, `--beta`, `--rc` flags are removed, and added a `--tauri-version [1|2]` option to change the Tauri version (defaults to latest stable - v2).
diff --git a/.github/workflows/templates-test.yml b/.github/workflows/templates-test.yml
index 86517dd2e6..3f49e55a0d 100644
--- a/.github/workflows/templates-test.yml
+++ b/.github/workflows/templates-test.yml
@@ -97,10 +97,10 @@ jobs:
       - uses: dtolnay/rust-toolchain@stable
 
       - run: cargo install tauri-cli --locked
-        if: (matrix.settings.manager == 'cargo' || matrix.settings.manager == 'dotnet') && matrix.settings.rc != true
+        if: (matrix.settings.manager == 'cargo' || matrix.settings.manager == 'dotnet') && matrix.settings.tauriVersion == 'latest'
 
-      - run: cargo install tauri-cli --version '^2.0.0-rc' --locked
-        if: (matrix.settings.manager == 'cargo' || matrix.settings.manager == 'dotnet') && matrix.settings.rc == true
+      - run: cargo install tauri-cli --version '^1.0.0' --locked
+        if: (matrix.settings.manager == 'cargo' || matrix.settings.manager == 'dotnet') && matrix.settings.tauriVersion == 1
 
       - run: |
           rustup target add wasm32-unknown-unknown
@@ -112,13 +112,13 @@ jobs:
         if: matrix.settings.install_dioxus_cli
 
       - name: install system dependencies
-        if: matrix.settings.rc != true
+        if: matrix.settings.tauriVersion == 1
         run: |
           sudo apt-get update
           sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf
 
       - name: install system dependencies (rc)
-        if: matrix.settings.rc == true
+        if: matrix.settings.tauriVersion == 'latest'
         run: |
           sudo apt-get update
           sudo apt-get install -y libgtk-3-dev webkit2gtk-4.1 libayatana-appindicator3-dev librsvg2-dev patchelf
diff --git a/.scripts/generate-templates-matrix.js b/.scripts/generate-templates-matrix.js
index 15e672e85d..6c389bb43f 100644
--- a/.scripts/generate-templates-matrix.js
+++ b/.scripts/generate-templates-matrix.js
@@ -79,16 +79,16 @@ matrixConfig
           template: t,
           install_trunk: ["yew", "sycamore", "leptos"].includes(t),
           install_dioxus_cli: t === "dioxus",
-          rc: false,
-          no_bundle_flag: "-b none",
+          tauriVersion: "latest",
+          no_bundle_flag: "--no-bundle",
           ...managerInfo,
         };
         outMatrix.push(jobInfo);
         outMatrix.push({
           ...jobInfo,
-          rc: true,
-          no_bundle_flag: "--no-bundle",
-          flags: "--rc",
+          tauriVersion: 1,
+          no_bundle_flag: "-b none",
+          flags: "--tauri-version 1",
         });
       }
     }
diff --git a/src/args.rs b/src/args.rs
index 112b248cde..2fb2367de2 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -2,12 +2,45 @@
 // SPDX-License-Identifier: Apache-2.0
 // SPDX-License-Identifier: MIT
 
-use std::ffi::OsString;
+use std::{ffi::OsString, fmt::Display, str::FromStr};
 
 use pico_args::Arguments;
 
 use crate::{package_manager::PackageManager, template::Template, utils::colors::*};
 
+#[derive(Debug, Copy, Clone, Default, PartialEq, Eq)]
+pub enum TauriVersion {
+    V1,
+    #[default]
+    V2,
+}
+
+impl TauriVersion {
+    pub fn all() -> &'static [TauriVersion] {
+        &[TauriVersion::V1, TauriVersion::V2]
+    }
+}
+
+impl Display for TauriVersion {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        match self {
+            Self::V1 => write!(f, "1"),
+            Self::V2 => write!(f, "2"),
+        }
+    }
+}
+
+impl FromStr for TauriVersion {
+    type Err = &'static str;
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        match s {
+            "1" => Ok(Self::V1),
+            "2" => Ok(Self::V1),
+            _ => Err("unknown Tauri version"),
+        }
+    }
+}
+
 #[derive(Debug)]
 pub struct Args {
     pub project_name: Option<String>,
@@ -16,7 +49,7 @@ pub struct Args {
     pub identifier: Option<String>,
     pub skip: bool,
     pub force: bool,
-    pub rc: bool,
+    pub tauri_version: TauriVersion,
 }
 
 impl Default for Args {
@@ -28,7 +61,7 @@ impl Default for Args {
             template: Some(Template::Vanilla),
             skip: false,
             force: false,
-            rc: false,
+            tauri_version: TauriVersion::default(),
         }
     }
 }
@@ -55,7 +88,7 @@ pub fn parse(argv: Vec<OsString>, bin_name: Option<String>) -> anyhow::Result<Ar
                     {GREEN}--identifier <identifier>{RESET} Specify a unique identifier for your application
   {GREEN}-y{RESET}, {GREEN}--yes{RESET}                     Skip prompts and use defaults where applicable
   {GREEN}-f{RESET}, {GREEN}--force{RESET}                   Force create the directory even if it is not empty.
-                    {GREEN}--rc{RESET}                      Bootstraps a project using tauri@2.0-rc.
+                    {GREEN}--tauri-version [1 | 2]{RESET}   Bootstrap a project using the provided Tauri version. Defaults to the latest stable release.
   {GREEN}-h{RESET}, {GREEN}--help{RESET}                    Prints help information
   {GREEN}-v{RESET}, {GREEN}--version{RESET}                 Prints version information
 "#,
@@ -83,27 +116,14 @@ pub fn parse(argv: Vec<OsString>, bin_name: Option<String>) -> anyhow::Result<Ar
         std::process::exit(0);
     }
 
-    // pargs.contains() consume the flag so we have to bind the bool to a variable.
-    let rc = if pargs.contains("--alpha") {
-        eprintln!(
-                "{BOLD}{YELLOW}warning{RESET}: The `{GREEN}--alpha{RESET}` option is now an alias for `{GREEN}--rc{RESET}` and may be removed in the future."
-            );
-        true
-    } else if pargs.contains("--beta") {
-        eprintln!(
-                "{BOLD}{YELLOW}warning{RESET}: The `{GREEN}--beta{RESET}` option is now an alias for `{GREEN}--rc{RESET}` and may be removed in the future."
-            );
-        true
-    } else {
-        pargs.contains("--rc")
-    };
+    let tauri_version: Option<TauriVersion> = pargs.opt_value_from_str("--tauri-version")?;
 
     let args = Args {
         manager: pargs.opt_value_from_str(["-m", "--manager"])?,
         template: pargs.opt_value_from_str(["-t", "--template"])?,
         skip: pargs.contains(["-y", "--yes"]),
         force: pargs.contains(["-f", "--force"]),
-        rc,
+        tauri_version: tauri_version.unwrap_or_default(),
         identifier: pargs.opt_value_from_str("--identifier")?,
         project_name: pargs.opt_free_from_str()?,
     };
diff --git a/src/deps.rs b/src/deps.rs
index c2c6ef48e6..707e359a01 100644
--- a/src/deps.rs
+++ b/src/deps.rs
@@ -1,8 +1,8 @@
 use template::Template;
 
-use crate::internal::template;
 use crate::package_manager::PackageManager;
 use crate::utils::colors::*;
+use crate::{args::TauriVersion, internal::template};
 use std::process::{Command, Output};
 
 fn is_rustc_installed() -> bool {
@@ -45,11 +45,11 @@ fn is_dioxus_cli_installed() -> bool {
         .unwrap_or(false)
 }
 
-fn is_appropriate_tauri_cli_installed(rc: bool) -> bool {
+fn is_appropriate_tauri_cli_installed(tauri_version: TauriVersion) -> bool {
     let check = |o: Output| match o.status.success() {
         true => String::from_utf8_lossy(&o.stdout)
             .split_once(' ')
-            .map(|(_, v)| v.starts_with(if rc { '2' } else { '1' }))
+            .map(|(_, v)| v.starts_with(&tauri_version.to_string()))
             .unwrap_or(false),
         s => s,
     };
@@ -119,12 +119,11 @@ fn is_webview2_installed() -> bool {
     target_os = "openbsd",
     target_os = "netbsd"
 ))]
-fn is_webkit2gtk_installed(rc: bool) -> bool {
+fn is_webkit2gtk_installed(tauri_version: TauriVersion) -> bool {
     Command::new("pkg-config")
-        .arg(if rc {
-            "webkit2gtk-4.1"
-        } else {
-            "webkit2gtk-4.0"
+        .arg(match tauri_version {
+            TauriVersion::V1 => "webkit2gtk-4.0",
+            TauriVersion::V2 => "webkit2gtk-4.1",
         })
         .output()
         .map(|o| o.status.success())
@@ -171,7 +170,11 @@ struct Dep<'a> {
 }
 
 /// Print missing deps in a table and returns whether there was any missing deps.
-pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: bool) -> bool {
+pub fn print_missing_deps(
+    pkg_manager: PackageManager,
+    template: Template,
+    tauri_version: TauriVersion,
+) -> bool {
     let rustc_installed = is_rustc_installed();
     let cargo_installed = is_cargo_installed();
 
@@ -183,7 +186,7 @@ pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: b
         target_os = "netbsd"
     ))]
     let (webkit2gtk_installed, rsvg2_installed) =
-        (is_webkit2gtk_installed(rc), is_rsvg2_installed());
+        (is_webkit2gtk_installed(tauri_version), is_rsvg2_installed());
 
     let deps: &[Dep<'_>] = &[
         Dep {
@@ -206,12 +209,11 @@ pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: b
         },
         Dep {
             name: "Tauri CLI",
-            instruction: if rc {
-                format!("Run `{BLUE}{BOLD}cargo install tauri-cli --version '^2.0.0-rc' --locked{RESET}`")
-            } else {
-                format!("Run `{BLUE}{BOLD}cargo install tauri-cli{RESET} --locked`")
+            instruction: match tauri_version {
+                TauriVersion::V1 => format!("Run `{BLUE}{BOLD}cargo install tauri-cli --version '^2.0.0' --locked{RESET}`"),
+                TauriVersion::V2 => format!("Run `{BLUE}{BOLD}cargo install tauri-cli --version '^1.0.0' --locked{RESET}`"),
             },
-            exists: &|| is_appropriate_tauri_cli_installed(rc),
+            exists: &|| is_appropriate_tauri_cli_installed(tauri_version),
             skip: pkg_manager.is_node() || !template.needs_tauri_cli(),
         },
         Dep {
@@ -254,10 +256,9 @@ pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: b
         ))]
         Dep {
             name: "webkit2gtk & rsvg2",
-            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", if rc {
-                "https://v2.tauri.app/guides/prerequisites/#linux"
-            } else {
-                "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux"
+            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", match tauri_version {
+                TauriVersion::V1 => "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux",
+                TauriVersion::V2 => "https://v2.tauri.app/guides/prerequisites/#linux",
             }),
             exists: &|| webkit2gtk_installed && rsvg2_installed,
             skip: webkit2gtk_installed || rsvg2_installed,
@@ -271,10 +272,9 @@ pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: b
         ))]
         Dep {
             name: "webkit2gtk",
-            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", if rc {
-                "https://v2.tauri.app/guides/prerequisites/#linux"
-            } else {
-                "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux"
+            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", match tauri_version {
+                TauriVersion::V1 => "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux",
+                TauriVersion::V2 => "https://v2.tauri.app/guides/prerequisites/#linux",
             }),
             exists: &|| webkit2gtk_installed,
             skip: !rsvg2_installed && !webkit2gtk_installed,
@@ -288,10 +288,9 @@ pub fn print_missing_deps(pkg_manager: PackageManager, template: Template, rc: b
         ))]
         Dep {
             name: "rsvg2",
-            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", if rc {
-                "https://v2.tauri.app/guides/prerequisites/#linux"
-            } else {
-                "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux"
+            instruction: format!("Visit {BLUE}{BOLD}{}{RESET}", match tauri_version {
+                TauriVersion::V2 => "https://v2.tauri.app/guides/prerequisites/#linux",
+                TauriVersion::V1 => "https://tauri.app/v1/guides/getting-started/prerequisites#setting-up-linux"
             }),
             exists: &|| rsvg2_installed,
             skip: !rsvg2_installed && !webkit2gtk_installed,
diff --git a/src/lib.rs b/src/lib.rs
index 6eb26437bd..34e114a324 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -7,6 +7,7 @@ use dialoguer::{Confirm, Input, Select};
 use std::{ffi::OsString, fs, process::exit};
 
 use crate::{
+    args::TauriVersion,
     category::Category,
     deps::print_missing_deps,
     package_manager::PackageManager,
@@ -66,7 +67,7 @@ where
     let defaults = args::Args::default();
     let args::Args {
         skip,
-        rc,
+        tauri_version,
         manager,
         project_name,
         template,
@@ -328,13 +329,13 @@ where
         &project_name,
         &package_name,
         &identifier,
-        rc,
+        tauri_version,
     )?;
 
     // Print post-render instructions
     println!();
     print!("Template created!");
-    let has_missing = print_missing_deps(pkg_manager, template, rc);
+    let has_missing = print_missing_deps(pkg_manager, template, tauri_version);
     if has_missing {
         println!("Make sure you have installed the prerequisites for your OS: {BLUE}{BOLD}https://tauri.app/v1/guides/getting-started/prerequisites{RESET}, then run:");
     } else {
@@ -353,7 +354,7 @@ where
     if let Some(cmd) = pkg_manager.install_cmd() {
         println!("  {cmd}");
     }
-    if !rc {
+    if matches!(tauri_version, TauriVersion::V1) {
         println!("  {} tauri dev", pkg_manager.run_cmd());
     } else {
         println!("  {} tauri android init", pkg_manager.run_cmd());
diff --git a/src/template.rs b/src/template.rs
index c325e4ca36..f3ac09a109 100644
--- a/src/template.rs
+++ b/src/template.rs
@@ -8,6 +8,7 @@ use anyhow::Context;
 use rust_embed::Embed;
 
 use crate::{
+    args::TauriVersion,
     manifest::Manifest,
     package_manager::PackageManager,
     utils::{self, colors::*, lte},
@@ -264,7 +265,7 @@ impl<'a> Template {
         project_name: &str,
         package_name: &str,
         identifier: &str,
-        rc: bool,
+        tauri_version: TauriVersion,
     ) -> anyhow::Result<()> {
         let manifest_bytes =
             EMBEDDED_TEMPLATES::get(&format!("template-{self}/{CTA_MANIFEST_FILENAME}"))
@@ -277,9 +278,7 @@ impl<'a> Template {
         let lib_name = format!("{}_lib", package_name.replace('-', "_"));
         let project_name_pascal_case = utils::to_pascal_case(project_name);
 
-        let rc_str = rc.to_string();
-        let manifest_template_data: HashMap<&str, &str> = [
-            ("rc", rc_str.as_str()),
+        let mut manifest_template_data: HashMap<&str, &str> = [
             ("pkg_manager_run_command", pkg_manager.run_cmd()),
             ("lib_name", &lib_name),
             ("package_name", package_name),
@@ -297,6 +296,16 @@ impl<'a> Template {
         ]
         .into();
 
+        let versions = TauriVersion::all()
+            .iter()
+            .map(|v| format!("v{v}"))
+            .collect::<Vec<_>>();
+        for version in &versions {
+            manifest_template_data.insert(version.as_str(), "false");
+        }
+        let tauri_version_key = format!("v{tauri_version}");
+        manifest_template_data.insert(tauri_version_key.as_str(), "true");
+
         let styles = String::from_utf8(
             EMBEDDED_TEMPLATES::get("_assets_/styles.css")
                 .unwrap()
@@ -304,9 +313,7 @@ impl<'a> Template {
                 .to_vec(),
         )?;
 
-        let template_data: HashMap<&str, String> = [
-            ("stable", (!rc).to_string()),
-            ("rc", rc_str.clone()),
+        let mut template_data: HashMap<&str, String> = [
             ("project_name", project_name.to_string()),
             (
                 "project_name_pascal_case",
@@ -365,6 +372,16 @@ impl<'a> Template {
         ]
         .into();
 
+        let versions = TauriVersion::all()
+            .iter()
+            .map(|v| format!("v{v}"))
+            .collect::<Vec<_>>();
+        for version in &versions {
+            template_data.insert(version.as_str(), "false".to_string());
+        }
+        let tauri_version_key = format!("v{tauri_version}");
+        template_data.insert(tauri_version_key.as_str(), "true".to_string());
+
         let write_file = |file: &str, template_data| -> anyhow::Result<()> {
             // remove the first component, which is certainly the template directory they were in before getting embeded into the binary
             let p = path::PathBuf::from(file)
@@ -377,6 +394,11 @@ impl<'a> Template {
             let p = target_dir.join(p);
             let file_name = p.file_name().unwrap().to_string_lossy();
 
+            let version_flags = TauriVersion::all()
+                .iter()
+                .map(|version| (format!("v{version}"), *version))
+                .collect::<Vec<_>>();
+
             let file_name = match &*file_name {
                 "_gitignore" => ".gitignore",
                 // skip manifest
@@ -384,8 +406,8 @@ impl<'a> Template {
                 // conditional files:
                 // are files that start with a special syntax
                 //          "%(<list of flags separated by `-`>%)<file_name>"
-                // flags are supported package managers, stable and rc.
-                // example: "%(pnpm-npm-yarn-stable-rc)%package.json"
+                // flags are supported package managers, and `v-$versionNumber` (tauri version filter).
+                // example: "%(pnpm-npm-yarn-stable-v1)%package.json"
                 name if name.starts_with("%(") && name[1..].contains(")%") => {
                     let mut s = name.strip_prefix("%(").unwrap().split(")%");
                     let (mut flags, name) = (
@@ -393,14 +415,21 @@ impl<'a> Template {
                         s.next().unwrap(),
                     );
 
-                    let for_stable = flags.contains(&"stable");
-                    let for_rc = flags.contains(&"rc");
+                    let for_version = version_flags
+                        .iter()
+                        .find(|(flag, _version)| flags.contains(&flag.as_str()))
+                        .map(|(_flag, version)| *version);
 
                     // remove these flags to only keep package managers flags
                     flags.retain(|e| !["stable", "rc"].contains(e));
 
-                    if ((for_stable && !rc) || (for_rc && rc) || (!for_stable && !for_rc))
-                        && (flags.contains(&pkg_manager.to_string().as_str()) || flags.is_empty())
+                    if let Some(for_version) = for_version {
+                        if for_version == tauri_version {
+                            name
+                        } else {
+                            return Ok(());
+                        }
+                    } else if flags.contains(&pkg_manager.to_string().as_str()) || flags.is_empty()
                     {
                         name
                     } else {
diff --git a/src/utils/lte.rs b/src/utils/lte.rs
index 2a67e2112c..1d051cc471 100644
--- a/src/utils/lte.rs
+++ b/src/utils/lte.rs
@@ -509,11 +509,11 @@ mod tests {
         <html>
         <h1>Hello<h2>{% if alpha %}
         <em>{% alpha_str %}</em>{% else %}
-        <em>{% if rc %}rc{%else%}stable{%endif%}</em>{% endif %}
+        <em>{% if v2 %}rc{%else%}stable{%endif%}</em>{% endif %}
         </html>"#;
         let data: HashMap<&str, &str> = [
             ("alpha", "false"),
-            ("rc", "true"),
+            ("v2", "true"),
             ("alpha_str", "holla alpha"),
         ]
         .into();
diff --git a/templates/_base_/src-tauri/%(stable)%tauri.conf.json.lte b/templates/_base_/src-tauri/%(v1)%tauri.conf.json.lte
similarity index 100%
rename from templates/_base_/src-tauri/%(stable)%tauri.conf.json.lte
rename to templates/_base_/src-tauri/%(v1)%tauri.conf.json.lte
diff --git a/templates/_base_/src-tauri/%(rc)%tauri.conf.json.lte b/templates/_base_/src-tauri/%(v2)%tauri.conf.json.lte
similarity index 93%
rename from templates/_base_/src-tauri/%(rc)%tauri.conf.json.lte
rename to templates/_base_/src-tauri/%(v2)%tauri.conf.json.lte
index eb966a74fb..b634376ae2 100644
--- a/templates/_base_/src-tauri/%(rc)%tauri.conf.json.lte
+++ b/templates/_base_/src-tauri/%(v2)%tauri.conf.json.lte
@@ -1,5 +1,5 @@
 {
-  "$schema": "https://schema.tauri.app/config/2.0.0-rc",
+  "$schema": "https://schema.tauri.app/config/2.0.0",
   "productName": "{% package_name %}",
   "version": "0.1.0",
   "identifier": "{% identifier %}",
@@ -16,6 +16,7 @@
         "title": "{% package_name %}",
         "width": 800,
         "height": 600
+        
       }
     ],
     "security": {
diff --git a/templates/_base_/src-tauri/Cargo.toml.lte b/templates/_base_/src-tauri/Cargo.toml.lte
index 35c413c01d..e4eb95f79c 100644
--- a/templates/_base_/src-tauri/Cargo.toml.lte
+++ b/templates/_base_/src-tauri/Cargo.toml.lte
@@ -7,26 +7,26 @@ edition = "2021"
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
-{% if rc %}[lib]
+{% if v2 %}[lib]
 # The `_lib` suffix may seem redundant but it is necessary
 # to make the lib name unique and wouldn't conflict with the bin name.
 # This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
 name = "{% lib_name %}"
 crate-type = ["staticlib", "cdylib", "rlib"]
 
-{% endif %}{% if stable %}[build-dependencies]
+{% endif %}{% if v1 %}[build-dependencies]
 tauri-build = { version = "1", features = [] }
 
 [dependencies]
 tauri = { version = "1", features = ["shell-open"] }{% else %}[build-dependencies]
-tauri-build = { version = "2.0.0-rc", features = [] }
+tauri-build = { version = "2.0.0", features = [] }
 
 [dependencies]
-tauri = { version = "2.0.0-rc", features = [] }
-tauri-plugin-shell = "2.0.0-rc"{% endif %}
+tauri = { version = "2.0.0", features = [] }
+tauri-plugin-shell = "2.0.0"{% endif %}
 serde = { version = "1", features = ["derive"] }
 serde_json = "1"
-{% if stable %}
+{% if v1 %}
 [features]
 # This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!!
 custom-protocol = ["tauri/custom-protocol"]{% endif %}
diff --git a/templates/_base_/src-tauri/capabilities/%(rc)%default.json.lte b/templates/_base_/src-tauri/capabilities/%(v2)%default.json.lte
similarity index 100%
rename from templates/_base_/src-tauri/capabilities/%(rc)%default.json.lte
rename to templates/_base_/src-tauri/capabilities/%(v2)%default.json.lte
diff --git a/templates/_base_/src-tauri/src/%(rc)%lib.rs.lte b/templates/_base_/src-tauri/src/%(v2)%lib.rs.lte
similarity index 100%
rename from templates/_base_/src-tauri/src/%(rc)%lib.rs.lte
rename to templates/_base_/src-tauri/src/%(v2)%lib.rs.lte
diff --git a/templates/_base_/src-tauri/src/main.rs.lte b/templates/_base_/src-tauri/src/main.rs.lte
index d66e058be6..0999b3e3b7 100644
--- a/templates/_base_/src-tauri/src/main.rs.lte
+++ b/templates/_base_/src-tauri/src/main.rs.lte
@@ -1,7 +1,7 @@
 // Prevents additional console window on Windows in release, DO NOT REMOVE!!
 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
 
-{% if rc %}fn main() {
+{% if v2 %}fn main() {
     {% lib_name %}::run()
 }{% else %}// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
 #[tauri::command]
diff --git a/templates/template-angular/angular.json.lte b/templates/template-angular/angular.json.lte
index ad93cdf580..16a66fb94d 100644
--- a/templates/template-angular/angular.json.lte
+++ b/templates/template-angular/angular.json.lte
@@ -49,8 +49,7 @@
         "serve": {
           "builder": "@angular-devkit/build-angular:dev-server",
           "options": {
-            "port": 1420{% if rc %},
-            "host": "0.0.0.0"{% endif %}
+            "port": 1420
           },
           "configurations": {
             "production": {
diff --git a/templates/template-angular/package.json.lte b/templates/template-angular/package.json.lte
index 159eb3ecf7..4e990a3c63 100644
--- a/templates/template-angular/package.json.lte
+++ b/templates/template-angular/package.json.lte
@@ -21,8 +21,8 @@
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
     "zone.js": "~0.14.2",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@angular-devkit/build-angular": "^17.0.0",
@@ -36,6 +36,6 @@
     "karma-jasmine": "~5.1.0",
     "karma-jasmine-html-reporter": "~2.1.0",
     "typescript": "~5.2.2",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-angular/src/app/app.component.ts.lte b/templates/template-angular/src/app/app.component.ts.lte
index 287a8574bb..ced45b0960 100644
--- a/templates/template-angular/src/app/app.component.ts.lte
+++ b/templates/template-angular/src/app/app.component.ts.lte
@@ -1,7 +1,7 @@
 import { Component } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { RouterOutlet } from '@angular/router';
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
 @Component({
   selector: 'app-root',
diff --git a/templates/template-blazor/src/Pages/Home.razor.lte b/templates/template-blazor/src/Pages/Home.razor.lte
index 152442dbc9..f9d2fcf9b8 100644
--- a/templates/template-blazor/src/Pages/Home.razor.lte
+++ b/templates/template-blazor/src/Pages/Home.razor.lte
@@ -31,6 +31,6 @@
 
     private async Task GreetAsync()
     {
-        GreetMsg = await JsRuntime.InvokeAsync<string>("__TAURI__.{% if rc %}core{% else %}tauri{% endif %}.invoke", "greet", new { name = GreetInput });
+        GreetMsg = await JsRuntime.InvokeAsync<string>("__TAURI__.{% if v2 %}core{% else %}tauri{% endif %}.invoke", "greet", new { name = GreetInput });
     }
 }
diff --git a/templates/template-dioxus/src/app.rs.lte b/templates/template-dioxus/src/app.rs.lte
index c706e5e716..1399a3c1dc 100644
--- a/templates/template-dioxus/src/app.rs.lte
+++ b/templates/template-dioxus/src/app.rs.lte
@@ -6,7 +6,7 @@ use wasm_bindgen::prelude::*;
 
 #[wasm_bindgen]
 extern "C" {
-    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if rc %}core{% else %}tauri{% endif %}"])]
+    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if v2 %}core{% else %}tauri{% endif %}"])]
     async fn invoke(cmd: &str, args: JsValue) -> JsValue;
 }
 
diff --git a/templates/template-leptos/Trunk.toml.lte b/templates/template-leptos/Trunk.toml.lte
index 7fb7e617fa..c9a88b7490 100644
--- a/templates/template-leptos/Trunk.toml.lte
+++ b/templates/template-leptos/Trunk.toml.lte
@@ -5,7 +5,5 @@ target = "./index.html"
 ignore = ["./src-tauri"]
 
 [serve]
-address = "{% if rc %}0.0.0.0{% else %}127.0.0.1{% endif %}"
 port = 1420
-open = false{% if rc %}
-ws_protocol = "ws"{% endif %}
+open = false
diff --git a/templates/template-leptos/src/app.rs.lte b/templates/template-leptos/src/app.rs.lte
index c41c980937..740beea5ff 100644
--- a/templates/template-leptos/src/app.rs.lte
+++ b/templates/template-leptos/src/app.rs.lte
@@ -5,7 +5,7 @@ use wasm_bindgen::prelude::*;
 
 #[wasm_bindgen]
 extern "C" {
-    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if rc %}core{% else %}tauri{% endif %}"])]
+    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if v2 %}core{% else %}tauri{% endif %}"])]
     async fn invoke(cmd: &str, args: JsValue) -> JsValue;
 }
 
diff --git a/templates/template-preact-ts/package.json.lte b/templates/template-preact-ts/package.json.lte
index 7286ef52ca..934cb701af 100644
--- a/templates/template-preact-ts/package.json.lte
+++ b/templates/template-preact-ts/package.json.lte
@@ -11,13 +11,13 @@
   },
   "dependencies": {
     "preact": "^10.16.0",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@preact/preset-vite": "^2.5.0",
     "typescript": "^5.2.2",
     "vite": "^5.3.1",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-preact-ts/src/App.tsx.lte b/templates/template-preact-ts/src/App.tsx.lte
index c499bc09cc..99bf7ac5ff 100644
--- a/templates/template-preact-ts/src/App.tsx.lte
+++ b/templates/template-preact-ts/src/App.tsx.lte
@@ -1,6 +1,6 @@
 import { useState } from "preact/hooks";
 import preactLogo from "./assets/preact.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-preact-ts/vite.config.ts.lte b/templates/template-preact-ts/vite.config.ts.lte
index 2ea6d81242..adaa97b56a 100644
--- a/templates/template-preact-ts/vite.config.ts.lte
+++ b/templates/template-preact-ts/vite.config.ts.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import preact from "@preact/preset-vite";{% if rc %}
+import preact from "@preact/preset-vite";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-preact/package.json.lte b/templates/template-preact/package.json.lte
index 92ac29d770..dd2685243e 100644
--- a/templates/template-preact/package.json.lte
+++ b/templates/template-preact/package.json.lte
@@ -11,12 +11,12 @@
   },
   "dependencies": {
     "preact": "^10.16.0",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@preact/preset-vite": "^2.5.0",
     "vite": "^5.3.1",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-preact/src/App.jsx.lte b/templates/template-preact/src/App.jsx.lte
index c499bc09cc..99bf7ac5ff 100644
--- a/templates/template-preact/src/App.jsx.lte
+++ b/templates/template-preact/src/App.jsx.lte
@@ -1,6 +1,6 @@
 import { useState } from "preact/hooks";
 import preactLogo from "./assets/preact.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-preact/vite.config.js.lte b/templates/template-preact/vite.config.js.lte
index 78a052772a..ff530adeee 100644
--- a/templates/template-preact/vite.config.js.lte
+++ b/templates/template-preact/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import preact from "@preact/preset-vite";{% if rc %}
+import preact from "@preact/preset-vite";{% if v2 %}
 
 const host = process.env.TAURI_DEV_HOST;{% endif %}
 
@@ -14,7 +14,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-react-ts/package.json.lte b/templates/template-react-ts/package.json.lte
index 0c470b4f9f..1b20d584f9 100644
--- a/templates/template-react-ts/package.json.lte
+++ b/templates/template-react-ts/package.json.lte
@@ -12,8 +12,8 @@
   "dependencies": {
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@types/react": "^18.2.15",
@@ -21,6 +21,6 @@
     "@vitejs/plugin-react": "^4.2.1",
     "typescript": "^5.2.2",
     "vite": "^5.3.1",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-react-ts/src/App.tsx.lte b/templates/template-react-ts/src/App.tsx.lte
index 75f9503a07..f78581815c 100644
--- a/templates/template-react-ts/src/App.tsx.lte
+++ b/templates/template-react-ts/src/App.tsx.lte
@@ -1,6 +1,6 @@
 import { useState } from "react";
 import reactLogo from "./assets/react.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-react-ts/vite.config.ts.lte b/templates/template-react-ts/vite.config.ts.lte
index 67b80f169a..d13319b2e9 100644
--- a/templates/template-react-ts/vite.config.ts.lte
+++ b/templates/template-react-ts/vite.config.ts.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";{% if rc %}
+import react from "@vitejs/plugin-react";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-react/package.json.lte b/templates/template-react/package.json.lte
index 327ce67db2..9aad98feca 100644
--- a/templates/template-react/package.json.lte
+++ b/templates/template-react/package.json.lte
@@ -12,12 +12,12 @@
   "dependencies": {
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@vitejs/plugin-react": "^4.2.1",
     "vite": "^5.3.1",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-react/src/App.jsx.lte b/templates/template-react/src/App.jsx.lte
index 75f9503a07..f78581815c 100644
--- a/templates/template-react/src/App.jsx.lte
+++ b/templates/template-react/src/App.jsx.lte
@@ -1,6 +1,6 @@
 import { useState } from "react";
 import reactLogo from "./assets/react.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-react/vite.config.js.lte b/templates/template-react/vite.config.js.lte
index cdeab028ec..aad80a3556 100644
--- a/templates/template-react/vite.config.js.lte
+++ b/templates/template-react/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";{% if rc %}
+import react from "@vitejs/plugin-react";{% if v2 %}
 
 const host = process.env.TAURI_DEV_HOST;{% endif %}
 
@@ -14,7 +14,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-solid-ts/package.json.lte b/templates/template-solid-ts/package.json.lte
index dbfd581c69..b8322d631a 100644
--- a/templates/template-solid-ts/package.json.lte
+++ b/templates/template-solid-ts/package.json.lte
@@ -13,13 +13,13 @@
   "license": "MIT",
   "dependencies": {
     "solid-js": "^1.7.8",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "typescript": "^5.2.2",
     "vite": "^5.3.1",
     "vite-plugin-solid": "^2.8.0",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-solid-ts/src/App.tsx.lte b/templates/template-solid-ts/src/App.tsx.lte
index 836339df72..8db047459c 100644
--- a/templates/template-solid-ts/src/App.tsx.lte
+++ b/templates/template-solid-ts/src/App.tsx.lte
@@ -1,6 +1,6 @@
 import { createSignal } from "solid-js";
 import logo from "./assets/logo.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-solid-ts/vite.config.ts.lte b/templates/template-solid-ts/vite.config.ts.lte
index b497ad36f7..e3c5c5a3bc 100644
--- a/templates/template-solid-ts/vite.config.ts.lte
+++ b/templates/template-solid-ts/vite.config.ts.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import solid from "vite-plugin-solid";{% if rc %}
+import solid from "vite-plugin-solid";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-solid/package.json.lte b/templates/template-solid/package.json.lte
index bfbae42ed4..0a154f8494 100644
--- a/templates/template-solid/package.json.lte
+++ b/templates/template-solid/package.json.lte
@@ -13,12 +13,12 @@
   "license": "MIT",
   "dependencies": {
     "solid-js": "^1.7.8",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "vite": "^5.3.1",
     "vite-plugin-solid": "^2.8.0",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-solid/src/App.jsx.lte b/templates/template-solid/src/App.jsx.lte
index 836339df72..8db047459c 100644
--- a/templates/template-solid/src/App.jsx.lte
+++ b/templates/template-solid/src/App.jsx.lte
@@ -1,6 +1,6 @@
 import { createSignal } from "solid-js";
 import logo from "./assets/logo.svg";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 import "./App.css";
 
 function App() {
diff --git a/templates/template-solid/vite.config.js.lte b/templates/template-solid/vite.config.js.lte
index c82b3c2d65..c3404ec8e7 100644
--- a/templates/template-solid/vite.config.js.lte
+++ b/templates/template-solid/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import solid from "vite-plugin-solid";{% if rc %}
+import solid from "vite-plugin-solid";{% if v2 %}
 
 const host = process.env.TAURI_DEV_HOST;{% endif %}
 
@@ -14,7 +14,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-svelte-ts/package.json.lte b/templates/template-svelte-ts/package.json.lte
index 0a35920991..07fbe071bf 100644
--- a/templates/template-svelte-ts/package.json.lte
+++ b/templates/template-svelte-ts/package.json.lte
@@ -13,8 +13,8 @@
   },
   "license": "MIT",
   "dependencies": {
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@sveltejs/adapter-static": "^3.0.1",
@@ -25,6 +25,6 @@
 		"tslib": "^2.4.1",
     "typescript": "^5.0.0",
     "vite": "^5.0.3",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-svelte-ts/src/routes/+page.svelte.lte b/templates/template-svelte-ts/src/routes/+page.svelte.lte
index 942c779bbc..6cb7199a78 100644
--- a/templates/template-svelte-ts/src/routes/+page.svelte.lte
+++ b/templates/template-svelte-ts/src/routes/+page.svelte.lte
@@ -1,5 +1,5 @@
 <script lang="ts">
-  import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+  import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
   let name = "";
   let greetMsg = "";
diff --git a/templates/template-svelte-ts/vite.config.js.lte b/templates/template-svelte-ts/vite.config.js.lte
index 7d02e65e0f..4ba6da1f1e 100644
--- a/templates/template-svelte-ts/vite.config.js.lte
+++ b/templates/template-svelte-ts/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import { sveltekit } from "@sveltejs/kit/vite";{% if rc %}
+import { sveltekit } from "@sveltejs/kit/vite";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-svelte/package.json.lte b/templates/template-svelte/package.json.lte
index 06e109e6c4..35fb02c9a3 100644
--- a/templates/template-svelte/package.json.lte
+++ b/templates/template-svelte/package.json.lte
@@ -13,8 +13,8 @@
   },
   "license": "MIT",
   "dependencies": {
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@sveltejs/adapter-static": "^3.0.1",
@@ -24,6 +24,6 @@
     "svelte-check": "^3.6.0",
     "typescript": "^5.0.0",
     "vite": "^5.0.3",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-svelte/src/routes/+page.svelte.lte b/templates/template-svelte/src/routes/+page.svelte.lte
index bb9ee4bfce..4ca54b9cf7 100644
--- a/templates/template-svelte/src/routes/+page.svelte.lte
+++ b/templates/template-svelte/src/routes/+page.svelte.lte
@@ -1,5 +1,5 @@
 <script>
-  import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+  import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
   let name = "";
   let greetMsg = "";
diff --git a/templates/template-svelte/vite.config.js.lte b/templates/template-svelte/vite.config.js.lte
index 7d02e65e0f..4ba6da1f1e 100644
--- a/templates/template-svelte/vite.config.js.lte
+++ b/templates/template-svelte/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import { sveltekit } from "@sveltejs/kit/vite";{% if rc %}
+import { sveltekit } from "@sveltejs/kit/vite";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-sycamore/Trunk.toml.lte b/templates/template-sycamore/Trunk.toml.lte
index 7fb7e617fa..c9a88b7490 100644
--- a/templates/template-sycamore/Trunk.toml.lte
+++ b/templates/template-sycamore/Trunk.toml.lte
@@ -5,7 +5,5 @@ target = "./index.html"
 ignore = ["./src-tauri"]
 
 [serve]
-address = "{% if rc %}0.0.0.0{% else %}127.0.0.1{% endif %}"
 port = 1420
-open = false{% if rc %}
-ws_protocol = "ws"{% endif %}
+open = false
diff --git a/templates/template-sycamore/src/app.rs.lte b/templates/template-sycamore/src/app.rs.lte
index e697f3f472..71eb2b216d 100644
--- a/templates/template-sycamore/src/app.rs.lte
+++ b/templates/template-sycamore/src/app.rs.lte
@@ -6,7 +6,7 @@ use wasm_bindgen::prelude::*;
 
 #[wasm_bindgen]
 extern "C" {
-    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if rc %}core{% else %}tauri{% endif %}"])]
+    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if v2 %}core{% else %}tauri{% endif %}"])]
     async fn invoke(cmd: &str, args: JsValue) -> JsValue;
 }
 
diff --git a/templates/template-vanilla-ts/package.json.lte b/templates/template-vanilla-ts/package.json.lte
index 186d2199e1..eadd22edc5 100644
--- a/templates/template-vanilla-ts/package.json.lte
+++ b/templates/template-vanilla-ts/package.json.lte
@@ -10,11 +10,11 @@
     "tauri": "tauri"
   },
   "dependencies": {
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}",
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}",
     "vite": "^5.3.1",
     "typescript": "^5.2.2"
   }
diff --git a/templates/template-vanilla-ts/src/main.ts.lte b/templates/template-vanilla-ts/src/main.ts.lte
index 2387bb6d89..14bcc105e0 100644
--- a/templates/template-vanilla-ts/src/main.ts.lte
+++ b/templates/template-vanilla-ts/src/main.ts.lte
@@ -1,4 +1,4 @@
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
 let greetInputEl: HTMLInputElement | null;
 let greetMsgEl: HTMLElement | null;
diff --git a/templates/template-vanilla-ts/vite.config.ts.lte b/templates/template-vanilla-ts/vite.config.ts.lte
index 02435153e3..3234480f58 100644
--- a/templates/template-vanilla-ts/vite.config.ts.lte
+++ b/templates/template-vanilla-ts/vite.config.ts.lte
@@ -1,4 +1,4 @@
-import { defineConfig } from "vite";{% if rc %}
+import { defineConfig } from "vite";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -13,7 +13,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-vanilla/%(pnpm-yarn-npm-bun)%package.json.lte b/templates/template-vanilla/%(pnpm-yarn-npm-bun)%package.json.lte
index 11b4180202..129b2c3d99 100644
--- a/templates/template-vanilla/%(pnpm-yarn-npm-bun)%package.json.lte
+++ b/templates/template-vanilla/%(pnpm-yarn-npm-bun)%package.json.lte
@@ -7,6 +7,6 @@
     "tauri": "tauri"
   },
   "devDependencies": {
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-vanilla/.manifest b/templates/template-vanilla/.manifest
index ae299bc194..6db3c1efff 100644
--- a/templates/template-vanilla/.manifest
+++ b/templates/template-vanilla/.manifest
@@ -1,4 +1,4 @@
-devPath = {% if !rc %}../src{% endif %}
+devPath = {% if v1 %}../src{% endif %}
 distDir = ../src
 withGlobalTauri = true
 
diff --git a/templates/template-vanilla/src/main.js.lte b/templates/template-vanilla/src/main.js.lte
index 144c810d7f..e3c7162e0f 100644
--- a/templates/template-vanilla/src/main.js.lte
+++ b/templates/template-vanilla/src/main.js.lte
@@ -1,4 +1,4 @@
-const { invoke } = window.__TAURI__.{% if rc %}core{% else %}tauri{% endif %};
+const { invoke } = window.__TAURI__.{% if v2 %}core{% else %}tauri{% endif %};
 
 let greetInputEl;
 let greetMsgEl;
diff --git a/templates/template-vue-ts/package.json.lte b/templates/template-vue-ts/package.json.lte
index facd7aebf0..79ff07b636 100644
--- a/templates/template-vue-ts/package.json.lte
+++ b/templates/template-vue-ts/package.json.lte
@@ -11,14 +11,14 @@
   },
   "dependencies": {
     "vue": "^3.3.4",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^5.0.5",
     "typescript": "^5.2.2",
     "vite": "^5.3.1",
     "vue-tsc": "^2.0.22",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-vue-ts/src/components/Greet.vue.lte b/templates/template-vue-ts/src/components/Greet.vue.lte
index 601496e458..4f24d5150a 100644
--- a/templates/template-vue-ts/src/components/Greet.vue.lte
+++ b/templates/template-vue-ts/src/components/Greet.vue.lte
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { ref } from "vue";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
 const greetMsg = ref("");
 const name = ref("");
diff --git a/templates/template-vue-ts/vite.config.ts.lte b/templates/template-vue-ts/vite.config.ts.lte
index e15c26fea4..9e701f42f6 100644
--- a/templates/template-vue-ts/vite.config.ts.lte
+++ b/templates/template-vue-ts/vite.config.ts.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import vue from "@vitejs/plugin-vue";{% if rc %}
+import vue from "@vitejs/plugin-vue";{% if v2 %}
 
 // @ts-expect-error process is a nodejs global
 const host = process.env.TAURI_DEV_HOST;{% endif %}
@@ -15,7 +15,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-vue/package.json.lte b/templates/template-vue/package.json.lte
index bdbaef718e..96dcdf73b0 100644
--- a/templates/template-vue/package.json.lte
+++ b/templates/template-vue/package.json.lte
@@ -11,12 +11,12 @@
   },
   "dependencies": {
     "vue": "^3.3.4",
-    "@tauri-apps/api": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"{% if rc %},
-    "@tauri-apps/plugin-shell": ">=2.0.0-rc.0"{% endif %}
+    "@tauri-apps/api": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"{% if v2 %},
+    "@tauri-apps/plugin-shell": ">=2.0.0"{% endif %}
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^5.0.5",
     "vite": "^5.3.1",
-    "@tauri-apps/cli": "{% if rc %}>=2.0.0-rc.0{% else %}^1{% endif %}"
+    "@tauri-apps/cli": "{% if v2 %}>=2.0.0{% else %}^1{% endif %}"
   }
 }
diff --git a/templates/template-vue/src/components/Greet.vue.lte b/templates/template-vue/src/components/Greet.vue.lte
index 56cc3c85a1..f0153519aa 100644
--- a/templates/template-vue/src/components/Greet.vue.lte
+++ b/templates/template-vue/src/components/Greet.vue.lte
@@ -1,6 +1,6 @@
 <script setup>
 import { ref } from "vue";
-import { invoke } from "@tauri-apps/api/{% if rc %}core{% else %}tauri{% endif %}";
+import { invoke } from "@tauri-apps/api/{% if v2 %}core{% else %}tauri{% endif %}";
 
 const greetMsg = ref("");
 const name = ref("");
diff --git a/templates/template-vue/vite.config.js.lte b/templates/template-vue/vite.config.js.lte
index 4907d1c16e..a631c6828f 100644
--- a/templates/template-vue/vite.config.js.lte
+++ b/templates/template-vue/vite.config.js.lte
@@ -1,5 +1,5 @@
 import { defineConfig } from "vite";
-import vue from "@vitejs/plugin-vue";{% if rc %}
+import vue from "@vitejs/plugin-vue";{% if v2 %}
 
 const host = process.env.TAURI_DEV_HOST;{% endif %}
 
@@ -14,7 +14,7 @@ export default defineConfig(async () => ({
   // 2. tauri expects a fixed port, fail if that port is not available
   server: {
     port: 1420,
-    strictPort: true,{% if rc %}
+    strictPort: true,{% if v2 %}
     host: host || false,
     hmr: host
       ? {
diff --git a/templates/template-yew/Trunk.toml.lte b/templates/template-yew/Trunk.toml.lte
index 7fb7e617fa..c9a88b7490 100644
--- a/templates/template-yew/Trunk.toml.lte
+++ b/templates/template-yew/Trunk.toml.lte
@@ -5,7 +5,5 @@ target = "./index.html"
 ignore = ["./src-tauri"]
 
 [serve]
-address = "{% if rc %}0.0.0.0{% else %}127.0.0.1{% endif %}"
 port = 1420
-open = false{% if rc %}
-ws_protocol = "ws"{% endif %}
+open = false
diff --git a/templates/template-yew/src/app.rs.lte b/templates/template-yew/src/app.rs.lte
index 3659aa363c..764e401999 100644
--- a/templates/template-yew/src/app.rs.lte
+++ b/templates/template-yew/src/app.rs.lte
@@ -5,7 +5,7 @@ use yew::prelude::*;
 
 #[wasm_bindgen]
 extern "C" {
-    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if rc %}core{% else %}tauri{% endif %}"])]
+    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "{% if v2 %}core{% else %}tauri{% endif %}"])]
     async fn invoke(cmd: &str, args: JsValue) -> JsValue;
 }