Particle Connect enables a unified modal driving connection with social logins (through Particle Auth) and standard Web3 wallets, creating an equally accessible experience for Web3 natives and traditional consumers. Particle Connect is an all-in-one SDK capable of handling end-to-end onboarding and wallet connection.
This app enables you to log in using social logins or Web3 methods via Particle Connect and interact with the Ethereum Sepolia, Base Sepolia, and Avalanche Fuji testnets. You can view your account information and send transfer transactions to any address you input in the UI.
Built using:
- Particle Connect 2.0
- ethers.js V6.x.x
- TypeScript
- Tailwind CSS
Find the Particle Connect SDK docs.
๐ Learn more about Particle Network.
git clone https://github.com/Particle-Network/particle-connectkit2.0-quickstart.git
cd particle-connectyarn installOr
npm installThis project requires several keys from Particle Network to be defined in .env. The following should be defined:
NEXT_PUBLIC_PROJECT_ID, the ID of the corresponding application in your Particle Network dashboard.NEXT_PUBLIC_CLIENT_KEY, the ID of the corresponding project in your Particle Network dashboard.NEXT_PUBLIC_APP_ID, the client key of the corresponding project in your Particle Network dashboard.
npm run devOr
yarn devTo get started with Particle Connect in your application, follow these steps:
This is based on a standard Next JS application initialized with
npx create-next-app@latest.
-
Install the SDK:
Begin by installing the ConnectKit SDK:
yarn add @particle-network/connectkit viem@^2
-
Create
Connectkit.tsxand Configure the SDK:
Create a new component named Connectkit.tsx to set up your Particle Connect configuration.
Required Configurations:
projectId,clientKey, andappIdโ Obtain these from the Particle dashboard.chainsโ Specify the supported chains for your dApp.walletConnectorsโ Define the wallets you want to support.
Optional Configurations:
themeandlanguagefor the connection modal UI.- Additional appearance customizations.
'use client';
import { ConnectKitProvider, createConfig } from '@particle-network/connectkit';
import { authWalletConnectors } from '@particle-network/connectkit/auth';
import { mainnet, solana } from '@particle-network/connectkit/chains';
import { evmWalletConnectors } from '@particle-network/connectkit/evm';
import { injected as solaInjected, solanaWalletConnectors } from '@particle-network/connectkit/solana';
import { wallet, EntryPosition } from '@particle-network/connectkit/wallet';
import React from 'react';
const config = createConfig({
projectId: 'Replace with your Particle Project ID',
clientKey: 'Replace with your Particle Client Key', // Retrieved from https://dashboard.particle.network
appId: 'Replace with your Particle App ID',
appearance: {
recommendedWallets: [
{ walletId: 'metaMask', label: 'Recommended' },
{ walletId: 'coinbaseWallet', label: 'Popular' },
],
splitEmailAndPhone: false,
collapseWalletList: false,
hideContinueButton: false,
connectorsOrder: ['email', 'phone', 'social', 'wallet'],
language: 'en-US',
mode: 'light',
theme: {
'--pcm-accent-color': '#ff4d4f',
},
logo: 'https://...',
filterCountryCallingCode: (countries) => {
return countries.filter((item) => item === 'US');
},
},
walletConnectors: [
evmWalletConnectors({
metadata: { name: 'My App', icon: '', description: '', url: '' },
walletConnectProjectId: 'Replace with your WalletConnect Project ID',
}),
authWalletConnectors({
authTypes: ["email", "google", "apple", "twitter", "github"],
fiatCoin: "USD",
promptSettingConfig: {
promptMasterPasswordSettingWhenLogin: 1,
promptPaymentPasswordSettingWhenSign: 1,
},
}),
solanaWalletConnectors(),
],
plugins: [
wallet({
entryPosition: EntryPosition.BR,
visible: true,
}),
],
chains: [mainnet, solana],
});
export const ParticleConnectkit = ({ children }: React.PropsWithChildren) => {
return <ConnectKitProvider config={config}>{children}</ConnectKitProvider>;
};-
Wrap Your App:
Import and wrap your application with the
ParticleConnectKitcomponent (export ofConnectKitProvider) in yourindexorlayoutfile. Hereโs an example for alayout.tsxfile:import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import { ParticleConnectkit } from "./components/Connectkit"; const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { title: "Particle Connect", description: "Demo showcasing a quickstart for Particle Connect 2.0", }; export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) { return ( <html lang="en"> <body className={inter.className}> <ParticleConnectkit>{children}</ParticleConnectkit> </body> </html> ); }
-
Add a Connection Button:
Include the Connect button in your main
Appcomponent to allow users to log in via Particle Connect.Example integration:
import { ConnectButton, useAccount } from '@particle-network/connectkit'; export const App = () => { const { address, isConnected, chainId } = useAccount(); return ( <> {isConnected ? ( <> <h2>Address: {address}</h2> <h2>Chain ID: {chainId}</h2> </> ) : ( <ConnectButton /> )} </> ); };
Find the features available in the Particle Connect SDK docs.