visit
Appwrite is an open-source backend-as-a-service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way.If you haven't heard of Appwrite before, you should really ! 👀 If you ask yourself, why you should use Appwrite over something like Firebase, I've written down my reasons .
Using the Javascript SDK worked right away, but didn't really fit the component driven approach of Svelte. So I sat down, inspired by , and worked out a collection of components which feel at home in Svelte projects. This resulted in the project
svelte-appwrite
.
Enough talking, let's start with a code comparison between
appwrite
and svelte-appwrite
:
Short isn't always better, except in this case. Let's take a look at the shorter variant, the
svelte-appwrite
one:
<script>
import { Appwrite, User, AuthEmail } from "svelte-appwrite";
const config = {
endpoint: "//localhost/v1",
project: "5ffc6c043586d",
};
let email = "";
let password = "";
</script>
<Appwrite {...config}>
<User let:user let:actions>
<p>Hello {user.name}!</p>
<button on:click={actions.logout}>Logout</button>
<div slot="error">
<AuthEmail let:authorize on:success={actions.reload}>
<input type="text" bind:value={email} />
<input type="text" bind:value={password} />
<button on:click={authorize(email, password)}>
Login
</button>
</AuthEmail>
</div>
</User>
</Appwrite>
<Appwrite {...config}>
The
<Appwrite />
component initializes the SDK for your Appwrite project and must wrap every svelte-appwrite
component. You can simply spread a configuration like this:
const config = {
endpoint: "//localhost/v1",
project: "5f4938898667e",
locale: "de"
};
<User let:user let:actions>
The
<User/>
component requests the currently logged in user and provides you 2 :
The
user
directive provides you with the currently logged-in user and actions
with following set of functions:
reload()
logout()
logoutFrom(session: string)
logoutAll()
By default, everything inside the
<User />
component is only shown when a user is logged in. By using the error
we can show content when a user is not logged in.
<User let:user>
<h1>Hello {user.name}!</h1>
<div>{user.email}</div>
<div slot="error">
You are not logged in!
</div>
<div slot="loading">
Loading...
</div>
</User>
<AuthEmail let:authorize on:success>
The last component we used lets users authenticate via e-mail with the provided
authorize(email, password)
method. This component can also emit success
and failure
events.
<AuthEmail let:authorize on:success={actions.reload}>
<input type="text" bind:value={email}>
<input type="text" bind:value={password}>
<button on:click={authorize(email,password)}>Login</button>
</AuthEmail>
As you can see in the example above, the
on:success
event points to the reload()
function from <User />
. This way, when a successful login happens, the component will fetch the user from Appwrite and renders the default slot.
You can find more components .
Also published at: