A port of WAGMI to SvelteJS 5, to make Web3 development even easier.
This library has been made to emulate the React experience as much as possible.
However, because Svelte is not React[citation needed], there will inevitably be some differences. Here is a (hopefully comprehensive) list:
create- instead of use- (e.g. createAccount instead of useAccount, createChainId instead of useChainId, etc.)createConfig sounds like it’s, well, creating a config), this library uses this naming convention very consistently.@wagmi/core starting with create- have now been renamed to createWagmi- (e.g. createWagmiConfig instead of createConfig) to avoid naming conflictsIf you’re coming from React, you are probably used to using hooks like this:
const { address, chainId, status } = useAccount(); However, in Svelte, runes containing primitive values cannot be directly returned and also stay reactive. As a workaround, we return a function, which you can access through $derived.by. For example:
const { address, chainId, status } = $derived.by(createAccount()); // createAccount is the Svelte version of useAccount First, install the library:
$ pnpm add @byteatatime/wagmi-svelte Then, you need to wrap everything that will use these hooks in the WagmiProvider component. If not all the pages will do so, I would recommend creating a group and putting it in the +layout.svelte file. Otherwise, just put it inside the layout at the root of the project.
Your +layout.svelte file should look something like this:
<script>
import { WagmiProvider } from "wagmi-svelte";
</script>
<WagmiProvider>
<slot />
</WagmiProvider> Much like Wagmi React, you pass your config into the provider component. As mentioned above, the config is now created with createWagmiConfig. Here is a basic example:
<script>
import { WagmiProvider, createWagmiConfig, http } from "wagmi-svelte";
import { mainnet, sepolia } from "wagmi-svelte/chains";
const config = createWagmiConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
});
</script>
<WagmiProvider>
<slot />
</WagmiProvider> You can then use the hooks in any child components.