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/webber
to 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 release
If 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 could either clone one of templates from swifweb organization repos or you could use webber
single page app
git clone https://github.com/swifweb/spa-template myspawebsite
cd myspawebsite
open Package.swift # to work with code
webber serve # to launch in browser
progressive 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 browser
if 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
.webber
hidden 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 pwa
to saywebber
that 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
-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
for SPA just run
webber release
for PWA execute it this way
webber release -t pwa -s Service
and then grub your files from .webber/release/
- Install nginx by the official instrucation
- Edit
/etc/nginx/mime.types
addapplication/wasm wasm;
in order to servewasm
files 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
web
package - awesome carton tool which was an inspiration for creating
webber
to cover all the needs