diff --git a/.scripts/init_env.bat b/.scripts/init_env.bat
index 24f49df63..b7e4ef692 100644
--- a/.scripts/init_env.bat
+++ b/.scripts/init_env.bat
@@ -8,8 +8,8 @@ IF "%cd%\"=="%~dp0" (
)
rem setup relative paths from root folder
-set "TAURI_DIST_DIR=%~1tauri\test\fixture\dist"
-set "TAURI_DIR=%~1tauri\test\fixture\src-tauri"
+set "TAURI_DIST_DIR=%~1tauri\examples\communication\dist"
+set "TAURI_DIR=%~1tauri\examples\communication\src-tauri"
rem convert relative path to absolute path and re-set it into the enviroment var
for /F "delims=" %%F IN ("%TAURI_DIST_DIR%") DO SET "TAURI_DIST_DIR=%%~fF"
for /F "delims=" %%F IN ("%TAURI_DIR%") DO SET "TAURI_DIR=%%~fF"
diff --git a/.scripts/init_env.ps1 b/.scripts/init_env.ps1
index 52a3a0d14..00e71d083 100644
--- a/.scripts/init_env.ps1
+++ b/.scripts/init_env.ps1
@@ -1,7 +1,7 @@
Write-Output "Setting up enviromental Variables"
# setup relative paths
-$dist_path = "tauri\test\fixture\dist"
-$src_path = "tauri\test\fixture\src-tauri"
+$dist_path = "tauri\examples\communication\dist"
+$src_path = "tauri\examples\communication\src-tauri"
# check to see if path variables are directories
if ((Test-Path $dist_path -PathType Any) -Or (Test-Path $src_path -PathType Any)) {
diff --git a/.scripts/init_env.sh b/.scripts/init_env.sh
index 0875838c9..9afdd3f6c 100644
--- a/.scripts/init_env.sh
+++ b/.scripts/init_env.sh
@@ -2,8 +2,8 @@
# Note: Script must be run like this `. .init_env.sh` to setup variables for your current shell
# define relative paths
-DistPath='tauri/test/fixture/dist'
-SrcPath='tauri/test/fixture/src-tauri'
+DistPath='tauri/examples/communication/dist'
+SrcPath='tauri/examples/communication/src-tauri'
echo "Setting up enviroment Variables"
diff --git a/tauri/Cargo.toml b/tauri/Cargo.toml
index 7c54ae1d8..09d97525c 100644
--- a/tauri/Cargo.toml
+++ b/tauri/Cargo.toml
@@ -31,6 +31,9 @@ tauri_includedir_codegen = "0.5.2"
[dev-dependencies]
proptest = "0.9.5"
+serde_json = "1.0"
+tauri = {path = ".", features = [ "all-api", "edge" ]}
+serde = { version = "1.0", features = [ "derive" ] }
[features]
edge = ["web-view/edge"]
@@ -50,5 +53,9 @@ event = []
updater = []
[package.metadata.docs.rs]
+features = ["dev-server", "all-api"]
+
+[[example]]
+name = "communication"
+path = "examples/communication/src-tauri/src/main.rs"
-features = ["dev-server", "all-api"]
\ No newline at end of file
diff --git a/tauri/examples/communication/dist/index.html b/tauri/examples/communication/dist/index.html
new file mode 100644
index 000000000..420b140cb
--- /dev/null
+++ b/tauri/examples/communication/dist/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tauri/examples/communication/dist/index.tauri.html b/tauri/examples/communication/dist/index.tauri.html
new file mode 100644
index 000000000..d614632d8
--- /dev/null
+++ b/tauri/examples/communication/dist/index.tauri.html
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tauri/examples/communication/package.json b/tauri/examples/communication/package.json
new file mode 100644
index 000000000..d95b49f21
--- /dev/null
+++ b/tauri/examples/communication/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "communication-example",
+ "version": "1.0.0",
+ "description": "A Tauri example showcasing the JS-Rust communication",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "private": true
+}
diff --git a/tauri/examples/communication/src-tauri/.gitignore b/tauri/examples/communication/src-tauri/.gitignore
new file mode 100644
index 000000000..5dae1ee09
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/.gitignore
@@ -0,0 +1,11 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+WixTools
+
+# These are backup files generated by rustfmt
+**/*.rs.bk
+
+tauri.js
+config.json
+bundle.json
diff --git a/tauri/examples/communication/src-tauri/Cargo.toml b/tauri/examples/communication/src-tauri/Cargo.toml
new file mode 100644
index 000000000..d54137849
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/Cargo.toml
@@ -0,0 +1,39 @@
+workspace = { }
+
+[package]
+name = "app"
+version = "0.1.0"
+description = "A Tauri App"
+authors = [ "you" ]
+license = ""
+repository = ""
+default-run = "app"
+edition = "2018"
+build = "src/build.rs"
+
+[package.metadata.bundle]
+identifier = "com.tauri.dev"
+icon = [
+ "icons/32x32.png",
+ "icons/128x128.png",
+ "icons/128x128@2x.png",
+ "icons/icon.icns",
+ "icons/icon.ico"
+]
+
+[dependencies]
+serde_json = "1.0"
+serde = { version = "1.0", features = [ "derive" ] }
+tauri = { version = "0.4", features = [ "all-api", "edge" ] }
+
+[target."cfg(windows)".build-dependencies]
+winres = "0.1"
+
+[features]
+dev-server = [ "tauri/dev-server" ]
+embedded-server = [ "tauri/embedded-server" ]
+no-server = [ "tauri/no-server" ]
+
+[[bin]]
+name = "app"
+path = "src/main.rs"
diff --git a/tauri/examples/communication/src-tauri/icons/128x128.png b/tauri/examples/communication/src-tauri/icons/128x128.png
new file mode 100644
index 000000000..f8d9962cc
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/128x128.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/128x128@2x.png b/tauri/examples/communication/src-tauri/icons/128x128@2x.png
new file mode 100644
index 000000000..44d26d04b
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/128x128@2x.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/32x32.png b/tauri/examples/communication/src-tauri/icons/32x32.png
new file mode 100644
index 000000000..b6bf7d610
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/32x32.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png b/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png
new file mode 100644
index 000000000..6146c3354
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png b/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png
new file mode 100644
index 000000000..e24cb2a75
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png b/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png
new file mode 100644
index 000000000..a389fb4a6
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png b/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png
new file mode 100644
index 000000000..c43c42ffd
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png b/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png
new file mode 100644
index 000000000..493f155ac
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png b/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png
new file mode 100644
index 000000000..6380a98dd
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png b/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png
new file mode 100644
index 000000000..61e4eff35
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png b/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png
new file mode 100644
index 000000000..668945bab
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png b/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png
new file mode 100644
index 000000000..1e14926fd
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/StoreLogo.png b/tauri/examples/communication/src-tauri/icons/StoreLogo.png
new file mode 100644
index 000000000..1f20ed7b0
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/StoreLogo.png differ
diff --git a/tauri/examples/communication/src-tauri/icons/icon.icns b/tauri/examples/communication/src-tauri/icons/icon.icns
new file mode 100644
index 000000000..43c73bda9
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.icns differ
diff --git a/tauri/examples/communication/src-tauri/icons/icon.ico b/tauri/examples/communication/src-tauri/icons/icon.ico
new file mode 100644
index 000000000..db7fd9820
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.ico differ
diff --git a/tauri/examples/communication/src-tauri/icons/icon.png b/tauri/examples/communication/src-tauri/icons/icon.png
new file mode 100644
index 000000000..e65ea7e86
Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.png differ
diff --git a/tauri/examples/communication/src-tauri/rustfmt.toml b/tauri/examples/communication/src-tauri/rustfmt.toml
new file mode 100644
index 000000000..45642c190
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/rustfmt.toml
@@ -0,0 +1,13 @@
+max_width = 100
+hard_tabs = false
+tab_spaces = 2
+newline_style = "Auto"
+use_small_heuristics = "Default"
+reorder_imports = true
+reorder_modules = true
+remove_nested_parens = true
+edition = "2018"
+merge_derives = true
+use_try_shorthand = false
+use_field_init_shorthand = false
+force_explicit_abi = true
diff --git a/tauri/examples/communication/src-tauri/src/build.rs b/tauri/examples/communication/src-tauri/src/build.rs
new file mode 100644
index 000000000..34fe92b12
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/src/build.rs
@@ -0,0 +1,16 @@
+#[cfg(windows)]
+extern crate winres;
+
+#[cfg(windows)]
+fn main() {
+ if std::path::Path::new("icons/icon.ico").exists() {
+ let mut res = winres::WindowsResource::new();
+ res.set_icon("icons/icon.ico");
+ res.compile().expect("Unable to find visual studio tools");
+ } else {
+ panic!("No Icon.ico found. Please add one or check the path");
+ }
+}
+
+#[cfg(not(windows))]
+fn main() {}
diff --git a/tauri/examples/communication/src-tauri/src/cmd.rs b/tauri/examples/communication/src-tauri/src/cmd.rs
new file mode 100644
index 000000000..71c08cef3
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/src/cmd.rs
@@ -0,0 +1,14 @@
+use serde::Deserialize;
+
+#[derive(Debug, Deserialize)]
+pub struct RequestBody {
+ id: i32,
+ name: String
+}
+
+#[derive(Deserialize)]
+#[serde(tag = "cmd", rename_all = "camelCase")]
+pub enum Cmd {
+ LogOperation { event: String, payload: Option },
+ PerformRequest { endpoint: String, body: RequestBody, callback: String, error: String },
+}
diff --git a/tauri/examples/communication/src-tauri/src/main.rs b/tauri/examples/communication/src-tauri/src/main.rs
new file mode 100644
index 000000000..792670010
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/src/main.rs
@@ -0,0 +1,64 @@
+#![cfg_attr(
+ all(not(debug_assertions), target_os = "windows"),
+ windows_subsystem = "windows"
+)]
+
+mod cmd;
+
+use serde::Serialize;
+
+#[derive(Serialize)]
+struct Reply {
+ data: String
+}
+
+fn main() {
+ tauri::AppBuilder::new()
+ .setup(|webview, _source| {
+ let handle = webview.handle();
+ tauri::event::listen(String::from("js-event"), move |msg| {
+ println!("got js-event with message '{}'", msg);
+ let reply = Reply {
+ data: "something else".to_string(),
+ };
+
+ tauri::event::emit(
+ &handle,
+ String::from("rust-event"),
+ serde_json::to_string(&reply).unwrap(),
+ );
+ });
+ })
+ .invoke_handler(|_webview, arg| {
+ use cmd::Cmd::*;
+ match serde_json::from_str(arg) {
+ Err(_) => {}
+ Ok(command) => {
+ match command {
+ LogOperation { event, payload } => {
+ println!("{} {:?}", event, payload);
+ },
+ PerformRequest { endpoint, body, callback, error } => {
+ // tauri::execute_promise is a helper for APIs that uses the tauri.promisified JS function
+ // so you can easily communicate between JS and Rust with promises
+ tauri::execute_promise(
+ _webview,
+ move || {
+ println!("{} {:?}", endpoint, body);
+ // perform an async operation here
+ // if the returned value is Ok, the promise will be resolved with its value
+ // if the returned value is Err, the promise will be rejected with its value
+ // the value is a string that will be eval'd
+ Ok("{ key: 'response', value: [{ id: 3 }] }".to_string())
+ },
+ callback,
+ error
+ )
+ },
+ }
+ }
+ }
+ })
+ .build()
+ .run();
+}
diff --git a/tauri/examples/communication/src-tauri/tauri.conf.json b/tauri/examples/communication/src-tauri/tauri.conf.json
new file mode 100644
index 000000000..9f6f4aa65
--- /dev/null
+++ b/tauri/examples/communication/src-tauri/tauri.conf.json
@@ -0,0 +1,33 @@
+{
+ "build": {
+ "distDir": "../dist",
+ "devPath": "../dist"
+ },
+ "ctx": {},
+ "tauri": {
+ "embeddedServer": {
+ "active": true
+ },
+ "bundle": {
+ "active": true,
+ "icon": [
+ "icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"
+ ]
+ },
+ "whitelist": {
+ "all": true
+ },
+ "window": {
+ "title": "Tauri App"
+ },
+ "security": {
+ "csp": "default-src blob: data: filesystem: ws: http: https: 'unsafe-eval' 'unsafe-inline'"
+ },
+ "edge": {
+ "active": true
+ },
+ "inliner": {
+ "active": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/tauri/src/lib.rs b/tauri/src/lib.rs
index 18e1d8134..f2497d703 100644
--- a/tauri/src/lib.rs
+++ b/tauri/src/lib.rs
@@ -18,6 +18,7 @@ mod file_system;
mod salt;
#[cfg(feature = "embedded-server")]
mod tcp;
+mod view;
use std::process::Stdio;
diff --git a/tauri/src/view.rs b/tauri/src/view.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/tauri/src/view.rs
@@ -0,0 +1 @@
+