mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-25 03:33:36 +03:00
feature/tiny serverless (#11)
* feat(readme) add new stats, licenses, technical description Signed-off-by: Daniel Thompson-Yvetot <denjell@quasar.dev> * feat(main.js) make serverless work correctly for bundle Signed-off-by: Daniel Thompson-Yvetot <denjell@quasar.dev> * feat(main.js) validate dev&build for server&less Signed-off-by: Daniel Thompson-Yvetot <denjell@quasar.dev>
This commit is contained in:
parent
32b2e951be
commit
fcd0c7fc35
34
README.md
34
README.md
@ -62,7 +62,16 @@ more. - [https://www.rust-lang.org/](https://www.rust-lang.org/)
|
||||
This combination of power, safety and usability are why we chose Rust to be
|
||||
the default binding for Proton. It is our intention to provide the most safe
|
||||
and performant native app experience (for devs and app consumers), out of
|
||||
the box.
|
||||
the box.
|
||||
|
||||
To this end, we have spent a great deal of time creating an especially secure
|
||||
localhost-free backend for the security conscious application-artisans. This
|
||||
means that your app does not use a localhost server, as is generally the case with
|
||||
cordova apps. This also has the positive side effect, that less code is needed
|
||||
and the final binaries are smaller.
|
||||
|
||||
> Less code doesn't always mean something is safer, but it does mean that
|
||||
> there is less surface area for attackers to barnacle themselves. - Denjell
|
||||
|
||||
### Current Status
|
||||
We are in the process of vetting this new mode. It is not yet available to
|
||||
@ -75,22 +84,23 @@ you through the process. Here is a bit of a status report.
|
||||
- [ ] Frameless Mode
|
||||
- [x] Build on MacOS
|
||||
- [x] Build on Linux
|
||||
- [ ] Build on Windows
|
||||
- [x] Build on Windows
|
||||
- [x] STDOUT Passthrough with Command Invocation
|
||||
- [x] Self Updater
|
||||
- [x] Inter Process Communication (IPC)
|
||||
- [x] Documentation
|
||||
- [x] Filesystem R/W (scoped to permissions)
|
||||
- [ ] Secure Cryptographic Enclave
|
||||
- [ ] Message Bus
|
||||
- [x] Message Bus
|
||||
- [x] Copy Buffer
|
||||
- [ ] API Spec (in progress)
|
||||
- [x] localhost-free mode (:fire:)
|
||||
|
||||
### Comparison between Proton 1 and Electron 5
|
||||
|
||||
| | Proton | Electron |
|
||||
|--|--------|----------|
|
||||
| Binary Size MacOS | 3.6 MB | 148.7 MB |
|
||||
| Binary Size MacOS | 2.6 MB | 147.7 MB |
|
||||
| Memory Consumption MacOS | 13 MB | 34.1 MB |
|
||||
| Benchmark FPS | TODO | TODO |
|
||||
| Interface Service Provider | Varies | Chromium |
|
||||
@ -107,6 +117,13 @@ you through the process. Here is a bit of a status report.
|
||||
| Inter Process Communication (IPC) | Yes | Yes |
|
||||
| Cross Platform | Yes | Yes |
|
||||
| Custom App Icon | Yes | Yes |
|
||||
| Windows Binary | Yes | Yes |
|
||||
| MacOS Binary | Yes | Yes |
|
||||
| Linux Binary | Yes | Yes |
|
||||
| iOS Binary | Soon | No |
|
||||
| Android Binary | Soon | No |
|
||||
| Localhost Server | Yes | Yes |
|
||||
| No localhost option | Yes | No |
|
||||
|
||||
#### Notes
|
||||
1) Electron has no native auto updater on Linux
|
||||
@ -127,9 +144,7 @@ honoured to carry the torch further. Of special note:
|
||||
- [zserge](https://github.com/zserge) for the original webview approach and
|
||||
go bindings
|
||||
- [Boscop](https://github.com/Boscop) for the Rust Bindings
|
||||
|
||||
## But there is already a project called Proton...
|
||||
But aren't there other projects with the same name that do something similar? If you search Github, you will find 1,500 repositories with proton in their name. There are also many, many Quasar projects out there - and that is indeed a bit of a risk when you use a word from science to name your project. But Quasar Proton is the official name of this project now, we think its fitting and good for us, especially because no one can trademark the word proton and tell us to stop using it. This protects the project's longevity at the minor cost of needing disambiguation. C'est la vie.
|
||||
- [Burtonago](https://github.com/burtonageo) for the Cargo Bundle prototype
|
||||
|
||||
## Documentation
|
||||
Head over to the Quasar Framework official website:
|
||||
@ -160,8 +175,9 @@ Thank you to all the people who already <a href="https://github.com/quasarframew
|
||||
quasarframework/proton is following [Semantic Versioning 2.0](https://semver.org/).
|
||||
|
||||
## Licenses
|
||||
Code: (c) 2019 - Daniel Thompson-Yvetot, Razvan Stoenescu, Lucas Nogueira, Boscop, Serge Zaitsev.
|
||||
MIT
|
||||
Code: (c) 2015- 2019 - Daniel Thompson-Yvetot, Razvan Stoenescu, Lucas Nogueira, Boscop, Serge Zaitsev, George Burton and contributors.
|
||||
|
||||
MIT or MIT/Apache where applicable.
|
||||
|
||||
Logo: CC-BY-NC-ND
|
||||
- Original Proton Logo Design by [Daniel Thompson-Yvetot](https://github.com/nothingismagick)
|
||||
|
@ -17,6 +17,7 @@ extern crate tiny_http;
|
||||
use clap::{App, Arg};
|
||||
|
||||
#[cfg(not(feature = "dev"))]
|
||||
#[cfg(not(feature = "serverless"))]
|
||||
use std::thread;
|
||||
|
||||
mod cmd;
|
||||
@ -30,7 +31,7 @@ fn main() {
|
||||
let content;
|
||||
let _server_url: String;
|
||||
|
||||
#[cfg(not(feature = "dev"))]
|
||||
#[cfg(feature = "updater")]
|
||||
{
|
||||
thread::spawn(|| {
|
||||
proton::command::spawn_relative_command(
|
||||
@ -68,7 +69,18 @@ fn main() {
|
||||
debug = cfg!(debug_assertions);
|
||||
#[cfg(feature = "serverless")]
|
||||
{
|
||||
content = proton_ui::Content::Html(include_str!("../target/compiled-web/index.html"));
|
||||
fn inline_style(s: &str) -> String {
|
||||
format!(r#"<style type="text/css">{}</style>"#, s)
|
||||
}
|
||||
|
||||
fn inline_script(s: &str) -> String {
|
||||
format!(r#"<script type="text/javascript">{}</script>"#, s)
|
||||
}
|
||||
let html = format!(r#"<!DOCTYPE html><html><head><meta http-equiv="Content-Security-Policy" content="default-src data: filesystem: ws: http: https: 'unsafe-eval' 'unsafe-inline'">{styles}</head><body><div id="q-app"></div>{scripts}</body></html>"#,
|
||||
styles = inline_style(include_str!("../target/compiled-web/css/app.css")),
|
||||
scripts = inline_script(include_str!("../target/compiled-web/js/app.js")),
|
||||
);
|
||||
content = proton_ui::Content::Html(html);
|
||||
}
|
||||
#[cfg(not(feature = "serverless"))]
|
||||
{
|
||||
@ -82,15 +94,14 @@ fn main() {
|
||||
}
|
||||
|
||||
let webview = proton_ui::builder()
|
||||
.title("MyAppTitle")
|
||||
.content(content)
|
||||
.title("MyApp - Serverless")
|
||||
.size(800, 600) // TODO:Resolution is fixed right now, change this later to be dynamic
|
||||
.resizable(true)
|
||||
.debug(debug)
|
||||
.user_data(())
|
||||
.invoke_handler(|_webview, arg| {
|
||||
.invoke_handler(|webview, arg| {
|
||||
// leave this as is to use the proton API from your JS code
|
||||
if !proton::api::handler(_webview, arg) {
|
||||
if !proton::api::handler(webview, arg) {
|
||||
use cmd::Cmd::*;
|
||||
match serde_json::from_str(arg) {
|
||||
Err(_) => {}
|
||||
@ -108,19 +119,12 @@ fn main() {
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.content(content)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
#[cfg(not(feature = "dev"))]
|
||||
{
|
||||
#[cfg(feature = "serverless")]
|
||||
{
|
||||
let handle = webview.handle();
|
||||
handle.dispatch(move |_webview| {
|
||||
_webview.inject_css(include_str!("../target/compiled-web/css/app.css")).unwrap();
|
||||
_webview.eval(include_str!("../target/compiled-web/js/app.js"))
|
||||
}).unwrap();
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "serverless"))]
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user