# Why Use Recal Over Nylas for Scheduling

Mar 15, 2022

When building calendar scheduling features, the choice between Nylas and Recal comes down to architecture philosophy: do you want a centralized service storing your tokens, or control over your integration? Here's what sets Recal apart.

## No Vendor Lock-in

**How Nylas Works** When users authenticate with Nylas, they store the OAuth refresh tokens and provide you with proprietary grant IDs. These grant IDs work only within Nylas's system. If you decide to migrate, every user must re-authenticate since you cannot export the underlying tokens.

**How Recal Works**

```javascript
const tokens = await recal.oauth.getTokens(userId);
// Returns actual Google/Microsoft refresh tokens
// Switch to another provider or build your own - your choice
```

You can leave Recal anytime and take your tokens with you. No re-authentication needed. True data portability.

## Complete Scheduling Flexibility

**Nylas Constraints:**

- Buffer times in 5-minute increments only
- Microsoft EWS meetings minimum 30 minutes
- Fixed scheduling parameters
- 90-day forward availability limit

**Recal Flexibility:**

```javascript
await recal.scheduling.userSchedulingBasic(userId, start, end, {
    slotDuration: 17, // 17-minute calls work
    padding: 8, // 8-minute buffers work
    earliestTimeEachDay: '09:12', // Start at 9:12am? Sure
    customSchedules: [{
        days: ['monday'],
        start: '09:00',
        end: '11:30'
    }, {
        days: ['tuesday', 'thursday'],
        start: '14:15',
        end: '16:45'
    }]
});
```

## Stateless Edge Architecture

**Nylas:** Centralized architecture where they store your tokens, maintain sync state, and manage webhooks on their servers. Your data lives in their infrastructure.

**Recal:** Stateless edge computing. Our servers process requests but don't store your tokens or maintain state.

```javascript
const availability = await recal.scheduling.getAvailability(userId);
// No central token storage
// No sync state on our servers
// You control the data
```

This fundamental difference means you're not dependent on our specific infrastructure for your data - you own it.

## Responsive Development

**What customers tell us they need from Nylas:**

- "We need 15-minute Microsoft meetings" (limited to 30 minutes)
- "Our sales team needs exactly 12-minute prep time" (forced to use 10 or 15)
- "We want to export our tokens for backup" (not possible)

**How Recal handles requests:**

```javascript
{
    slotDuration: 15, // 15-minute Microsoft meetings work
    padding: 12, // Exactly 12-minute prep time
    // Need something specific? We'll likely ship it this week
}
```

Our engineering team ships customer-requested features rapidly. If you need a specific scheduling pattern or integration feature, we work directly with you to implement it.

## The Architecture Difference

**Nylas Approach:**

- Your app → Nylas (stores tokens) → Calendar Provider
- Centralized token and state management
- Your auth data lives on their servers

**Recal Approach:**

- Your app → Recal (edge processing) → Calendar Provider
- You store tokens and state
- We process requests without holding your data

## Real-World Benefits

**Common migration feedback:**

- "Finally, we can do 7-minute buffer times for our workflow"
- "Microsoft users can book 15-minute demos now"
- "Having our own tokens gives us peace of mind"
- "The team actually responds and ships features we need"

## Migration Path

Switching from Nylas takes a week typically. Yes, users need to re-authenticate once (due to how Nylas stores tokens), but then you have permanent control.

```javascript
const recal = new RecalClient({token: 'your_token'});
// Generate auth URLs for users
const authUrl = await recal.oauth.generateAuthUrl(userId);
// One-time reauth, then freedom
```

## Choose Your Architecture

Both Nylas and Recal solve calendar scheduling. The difference is control:

**Nylas:** Convenient unified API with centralized token storage.

**Recal:** Complete flexibility, token ownership, stateless edge processing, and engineers who ship what you need.

Start at [recal.dev](/content/site-root.html) - where your calendar integration is actually yours.

### UI Components on the way

In our next release, you'll get copy-paste React components for every scheduling need. Availability grids, booking forms, calendar widgets.
