
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
@nylas/react
Advanced tools
React components for Nylas Scheduler
Install Nylas React Components via npm:
npm install @nylas/react@latest
or yarn
yarn add @nylas/react@latest
Elements
NylasSchedulerEditor, NylasScheduling, NylasSchedulingMethod@nylas/react or @nylas/react/elementsConnect
useNylasConnect, NylasConnectButton@nylas/react or @nylas/react/connectThe following example adds the Nylas Scheduler Editor and Scheduling components to your React app.
⚠️ Important: Make sure to replace the
NYLAS_CLIENT_IDwith your Nylas Client ID. Your Nylas Client ID can be found in your app's Overview page on the Nylas Dashboard.
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { NylasSchedulerEditor, NylasScheduling } from "@nylas/react";
function App() {
// Get the configuration ID from the URL query string
const urlParams = new URLSearchParams(window.location.search);
const configId = urlParams.get("config_id") || "";
return (
<BrowserRouter>
<Routes>
<Route
path="/"
element={
<div>
<a href="/scheduler-editor" className="button">
View Scheduler Editor
</a>
<NylasScheduling
configurationId={configId}
schedulerApiUrl="https://api.us.nylas.com"
/>
</div>
}
/>
<Route
path="/scheduler-editor"
element={
<div>
<NylasSchedulerEditor
schedulerPreviewLink={`${window.location.origin}/?config_id=${config.id}`}
nylasSessionsConfig={{
clientId: "NYLAS_CLIENT_ID", // Replace with your Nylas client ID from the previous
redirectUri: `${window.location.origin}/scheduler-editor`,
domain: "https://api.us.nylas.com/v3", // or 'https://api.eu.nylas.com/v3' for EU data center
hosted: true,
accessType: "offline",
}}
defaultSchedulerConfigState={{
selectedConfiguration: {
requires_session_auth: false, // Creates a public configuration which doesn't require a session
scheduler: {
// The callback URLs to be set in email notifications
rescheduling_url: `${window.location.origin}/reschedule/:booking_ref`, // The URL of the email notification includes the booking reference
cancellation_url: `${window.location.origin}/cancel/:booking_ref`,
},
},
}}
/>
</div>
}
/>
</Routes>
</BrowserRouter>
);
}
export default App;
To create a Scheduling Page from the Scheduler Editor, you'll need a working Scheduler UI. To do this, run a local server to host your Scheduler Editor and Scheduling Pages.
Navigate the root directory of your project and run the following command.
npm run dev -- --port <PORT>
After you run the command, open your browser to http://localhost:<PORT>/scheduler-editor to see your Scheduler Editor and create your first Scheduling Page.
The useNylasConnect hook provides a simple way to add OAuth authentication to your React app using Nylas Connect.
import { useNylasConnect } from '@nylas/react';
function LoginButton() {
const { isConnected, connect, logout, grant, isLoading } = useNylasConnect({
clientId: 'your-nylas-client-id',
redirectUri: 'http://localhost:3000/callback'
});
if (isLoading) return <div>Loading...</div>;
if (isConnected) {
return (
<div>
<p>Connected as: {grant?.email}</p>
<button onClick={() => logout()}>Logout</button>
</div>
);
}
return (
<button onClick={() => connect({ method: 'popup' })}>
Connect Account
</button>
);
}
| Option | Type | Default | Description |
|---|---|---|---|
clientId | string | - | Your Nylas Client ID |
redirectUri | string | - | OAuth callback URL |
autoHandleCallback | boolean | true | Automatically handle OAuth callback |
autoRefreshInterval | number | - | Auto-refresh session interval (ms) |
retryAttempts | number | 0 | Number of retry attempts for failed operations |
enableAutoRecovery | boolean | false | Enable automatic error recovery |
The hook returns an object with the following properties:
State:
isConnected - Whether user is authenticatedgrant - Current user's grant informationisLoading - Loading state for operationserror - Current error, if anyActions:
connect(options) - Start OAuth flowlogout(grantId?) - Sign out userrefreshSession() - Refresh current sessionsubscribe(callback) - Listen to connection eventsFor security, use environment variables for your configuration:
# .env.local
VITE_NYLAS_CLIENT_ID=your-nylas-client-id
VITE_NYLAS_REDIRECT_URI=http://localhost:3000/callback
const { isConnected, connect } = useNylasConnect({
clientId: import.meta.env.VITE_NYLAS_CLIENT_ID,
redirectUri: import.meta.env.VITE_NYLAS_REDIRECT_URI
});
The NylasConnectButton component provides a simple way to add email provider authentication to your React application.
import { NylasConnectButton } from "@nylas/react";
function App() {
return (
<NylasConnectButton
clientId="your-nylas-client-id"
redirectUri="http://localhost:3000/callback"
onSuccess={(result) => {
console.log("Connected successfully:", result);
}}
onError={(error) => {
console.error("Connection failed:", error);
}}
/>
);
}
For applications that use external identity providers (via JWKS), you can pass identity provider tokens during authentication:
import { NylasConnectButton } from "@nylas/react";
function App() {
// Function to retrieve JWT token from your external identity provider
const getIdpToken = async () => {
// Get the JWT token from your authentication system
const token = await yourAuthSystem.getJWT();
return token; // or return null if not available
};
return (
<NylasConnectButton
clientId="your-nylas-client-id"
redirectUri="http://localhost:3000/callback"
identityProviderToken={getIdpToken}
onSuccess={(result) => {
console.log("Connected with IDP claims:", result);
}}
onError={(error) => {
console.error("Connection failed:", error);
}}
/>
);
}
For enhanced security, you can handle the OAuth code exchange on your backend:
import { NylasConnectButton } from "@nylas/react";
function App() {
const handleCodeExchange = async (params) => {
// Send the authorization code to your backend
const response = await fetch("/api/auth/exchange", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
code: params.code,
state: params.state,
clientId: params.clientId,
redirectUri: params.redirectUri,
scopes: params.scopes,
provider: params.provider,
}),
});
if (!response.ok) {
throw new Error(`Token exchange failed: ${response.statusText}`);
}
const tokenData = await response.json();
// Return the expected ConnectResult format
return {
accessToken: tokenData.access_token,
idToken: tokenData.id_token,
grantId: tokenData.grant_id,
expiresAt: Date.now() + tokenData.expires_in * 1000,
scope: tokenData.scope,
grantInfo: tokenData.grant_info,
};
};
return (
<NylasConnectButton
clientId="your-nylas-client-id"
redirectUri="http://localhost:3000/callback"
codeExchange={handleCodeExchange}
onSuccess={(result) => {
console.log("Connected successfully:", result);
}}
onError={(error) => {
console.error("Connection failed:", error);
}}
/>
);
}
A complete walkthrough for setting up Scheduler can be found at https://developer.nylas.com/docs/v3/getting-started/scheduler/, with the complete code available on GitHub.
FAQs
React components and hooks for Nylas API integration
The npm package @nylas/react receives a total of 8,051 weekly downloads. As such, @nylas/react popularity was classified as popular.
We found that @nylas/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.