The Webnative App Template is a clone-and-go template for building a web application using Webnative, fast. Clone, customize, and deploy to have a running distributed app in mere minutes.
❗️Webnative is alpha software.
We recommend you do not develop production applications using the Webnative App Template at this time. We're working on making it reliable, fast, and awesome, but we're not there yet!
The Webnative SDK empowers developers to build fully distributed web applications without needing a complex back-end. The SDK provides:
- user accounts (via the browser's Web Crypto API),
- authorization (using UCAN)
- encrypted file storage (via the Webnative File System, backed by the InterPlanetary File System, or IPFS)
- and key management (via websockets and a two-factor auth-like flow).
Webnative applications work offline and store data encrypted for the user by leveraging the power of the web platform. You can read more about Webnative in Fission's Webnative Guide.
The Webnative App Template provides a silky-smooth user experience out of the box. Creating an account and linking a second device feels familiar, comfortable, and obvious. Webnative authentication is key-based rather than password-based, so we've focused heavily on the authentication flows, borrowing language and screens from two-factor auth flows.
The app template is built with modern web technologies:
- SvelteKit (powered by Vite under the hood)
- TypeScript
- Tailwind
- DaisyUI
The app template includes a functioning application: an image gallery. Check out the image gallery code to learn how a Webnative application handles things like file uploads, directories, etc.
You can try out the template yourself here.
Ready? Let's go.
Prerequiste: ensure you are running Node 16.14 or greater, but not Node 17 (18 is fine though!).
-
Clone the repository:
git clone [email protected]:webnative-examples/webnative-app-template.git
-
Install the dependencies.
npm install
-
Start the local development server.
npm run dev
-
Navigate to
http://localhost:5173
in your web browser.
The app template is designed to be easy for you to make it your own. Here's how:
-
Rename your application.
In
/src/lib/app-info.ts
:- Change
appName
to the name of your app. - Change
appDescription
to a simple, 1-sentence description of your app. - Update
webnativeNamespace
with your project details. - Once you deploy your app, change
appURL
to the production URL.
In
package.json
, changename
to your application's name. - Change
-
Customize your app's logo.
- App Logo SVG can be customized in
/src/components/icons/Brand.svelte
. Target an image that is 35 pixels high. - Replace the favicon files in
/static
by following the instructions in this blog post - Generate a Twitter/Social Media Embed image.
- In
/src/lib/app-info.ts
, changeappImageURL
to match the URL of your embed image. - In
/src/routes/+layout.svelte
, updateog:image:width
andog:image:height
to the size of your embed image.
- In
- App Logo SVG can be customized in
-
Customize the look and feel.
The app template is built using Tailwind and DaisyUI. You can customize basic theme colors by editing
/tailwind.config.css
. Check out the DaisyUI Theme Generator to play around with theme colors or read the customization guide to customize the component appearance. -
Clear out the app's home page.
The home page content is in
/src/routes/+page.svelte
. Delete everything in the file (but don't delete the file!) to start over with a blank home page. -
Remove the image gallery demo app code.
If you're not building an image gallery, you don't need the gallery demo code, except perhaps to learn from. To get rid of it, delete:
/src/routes/gallery
- the
initializeFilesystem
function in/src/lib/auth/account.ts
creates directories used by WNFS. Change those to what you need for your app or delete them if you're not using WNFS.
👏 You're ready to start adding custom functionality! 🚀
Check out the Webnative Guide for Webnative questions or UCAN.xyz for UCAN questions.
When you go through the registration flow in WAT, the username you type in the form field has a #{DID}
appended to it in the background. We did this to enable discord style usernames where users can share the same usernames, but have unique identifiers attached to the end to distinguish them from one another. We then create a hash of the fullUsername
(the one with the #{DID}
appended to the end) that is passed to Webnative. So Webnative only has a notion of the hashed
username currently. This should also allow users to create usernames using emojis or non-English characters. Also, this is the only username schema that currently supports our File System recovery flow.
You don’t necessarily need to follow that same pattern though. If you were to register two of the same usernames in the app without hashing them, you would be able to call session.authStrategy.isUsernameAvailable(username)
to ensure duplicate usernames aren't present in the app. We will be working on porting some of this functionality over to the Webnative library over the next while and we will be updating the docs to reflect that.
Please take a look at our init function to see how we are currently constructing the username schema.
Any static hosting platform should be supported. The Webnative App Template is currently deployed on:
Try out Webnative App Template on Fission
A Webnative application can be published to IPFS with the Fission CLI or the Fission GitHub publish action.
To publish with the Fission CLI:
- Install the CLI
- Run
fission setup
to make a Fission account - Run
npm run build
to build the app - Delete
fission.yaml
- Run
fission app register
to register a new Fission app (accept the./build
directory suggestion for your build directory) - Run
fission app publish
to publish your app to the web
Your app will be available online at the domain assigned by the register command.
To set up the GitHub publish action:
- Register the app with the CLI
- Export your machine key with
base64 ~/.config/fission/key/machine_id.ed25519
- Add your machine key as a GH Repository secret named
FISSION_MACHINE_KEY
- Update the
publish.yml
with the name of your registered app
See the Fission Guide and the publish action README for more details.
In order to deploy your Webnative application on Netlify:
- Create a new Netlify site and connect your app's git repository. (If you don't have your application stored in a git repository, you can upload the output of a static build.)
- Just click Deploy. Netlify takes care of the rest. No Netlify-specific configuration is needed.
- There is no step 3.
Try out the Webnative App Template on Vercel.
In order to deploy your Webnative application on Vercel:
- Create a new Vercel project and connect your app's git repository. (If you don't have your application stored in a git repository, you can upload the output of a static build.)
- Override the default output directory and set it to
build
. - Deploy. That's it!
Try out the Webnative App Template on Cloudflare Pages.
In order to deploy your Webnative application on Cloudflare Pages:
- Create a new Pages project and connect your app's git repository. (If you don't have your application stored in a git repository, you can upload the output of a static build.)
- Select
SvelteKit
from the "Framework preset". - Set the "Build output directory" to
build
. - Under "Environment variables", add a variable with name of
NODE_VERSION
and value of16
. - Add the same environment variable to the "Preview" environment.
- Click "Save and Deploy".
Export a static build.
npm run build
The build outputs the static site to the build
directory.