Powerful console tool for cooking your swifweb apps
macOS 10.15 and Xcode 11.4 or later.
or
any ubuntu supported on swift.org
On macOS webber can be installed with Homebrew. Make sure you have Homebrew installed and then run:
brew install swifweb/tap/webberto update already installed version run
brew upgrade webber- Install swift manually or via swiftlang.xyz
- Install
binaryen
apt-get install binaryen- Install
wasmer
curl https://get.wasmer.io -sSfL | sh- Install
npm
apt-get install npm- Install
webber
cd /opt
git clone https://github.com/swifweb/webber
cd /opt/webber
swift build -c release
ln -s /opt/webber/.build/release/Webber /usr/bin/webber
exec bash- Start using it inside of your project folder
To update webber to latest version just do
cd /opt/webber && git pull && swift build -c releaseIf you already have a project then just go to its folder in console
If you don't then manually git clone a template and then go to its directory
You can either simply execute webber new or clone one of templates manually
git clone https://github.com/swifweb/spa-template myspawebsite
cd myspawebsite
open Package.swift # to work with code
webber serve # to launch in browserprogressive web app
git clone https://github.com/swifweb/pwa-template mypwawebsite
cd mypwawebsite
open Package.swift # to work with code
webber serve -t pwa -s Service # to launch in browserif your project is single page application then this command will be enough to start working
webber serve This command do:
- compile your project into webassembly file
- cook needed html and js files, store them into
.webberhidden folder inside project directory - spinup local webserver
- open default browser to see your web app (it is on http/2 by default with self-signed cert, so add it into system)
- watch for changes in the project directory, rebuild project automatically and update page in browser
if you clone the pwa template then you should additionally provide the following arguments:
-t pwato saywebberthat your project should be cooked as PWA- the name of your service worker target e.g.
-s Service
so in the end serve command for pwa template could look like this
webber serve -t pwa -s Service -p 443 --browser chrome --browser-self-signed --browser-incognito-v or --verbose to show more info in console for debugging purposes
-d or --debug-verbose to show even more details about each step of webber execution
-p 443 or --port 443 to start webber server on 443 port instead of default 8888
--browser chrome/safari to automatically open desired browser, by default it doesn't open any
--browser-self-signed needed to debug service workers locally, otherwise they doesn't work
--browser-incognito to open additional instance of browser in incognito mode, works only with chrome
--toolchain to set custom toolchain e.g. webber serve --toolchain 5.9-SNAPSHOT-2023-08-06-a
for SPA just run
webber releasefor PWA execute it this way
webber release -t pwa -s Serviceand then grub your files from .webber/release/
- Install nginx by the official instrucation
- Edit
/etc/nginx/mime.typesaddapplication/wasm wasm;in order to servewasmfiles correctly - Generate SSL certificate with letsencrypt (or anything else)
- Declare your server like this
server {
server_name yourdomain.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
ssl_stapling on;
ssl_stapling_verify on;
root /app/yourdomain.com/.webber/release;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|jpg|png|css|wasm)$ {
root /app/yourdomain.com/.webber/release;
expires 30d;
add_header Cache-Control "public, no-transform";
}
}Infinite thanks to the swiftwasm organization for their
- awesome swift fork adopted for webassembly
- awesome JavaScriptKit which is used under the hood of the
webpackage - awesome carton tool which was an inspiration for creating
webberto cover all the needs