Integrate Spackle with Next.js

Learn how to integrate Spackle with a Next.js 14 application to manage entitlements and feature gating based on user subscriptions.

Getting Started


Ensure you have Node.js installed on your machine. If not, download and install it from the official Node.js website.

Set Up Your Next.js Project

If you haven't already created a Next.js project, do so by running:

npx create-next-app@latest my-next-app
cd my-next-app

Install the Spackle Library

To use Spackle in your Next.js project, install the Spackle library via npm:

npm install spackle-node

Spackle Integration

Configure the Spackle Client

Create a Spackle client with your API key. You can find your API key in the Spackle dashboard under settings. It's recommended to store sensitive information like your API key in environment variables. Create a .env.local file in the root of your Next.js project and add your Spackle API key:

# .env.local

Then, configure your Spackle client in your application. Create a new file lib/spackle.js and add:

// lib/spackle.js
import Spackle from 'spackle-node';

const spackleApiKey = process.env.SPACKLE_API_KEY;
const spackle = new Spackle(spackleApiKey);

export default spackle;

Fetching Pricing Tables

Create a page to display pricing information fetched from Spackle. Here's an example on how to fetch and render a pricing table:

// pages/pricing.js
import React from 'react';
import spackle from '../lib/spackle';

const Pricing = ({ pricingTable }) => {
  return (
      {/* Render your pricing table here */}

export async function getServerSideProps() {
  const pricingTable = await spackle.pricingTables.retrieve('abcde123');
  return { props: { pricingTable } };

export default Pricing;

Managing User Entitlements

To manage user entitlements, such as checking if a user has access to a certain feature, you can add logic to your API routes or page components. Here's an example of checking feature access:

// pages/api/protected-feature.js
import spackle from '../../lib/spackle';

export default async function handler(req, res) {
  const customer = await spackle.customers.retrieve('cus_000000000');

  if (!customer.enabled("feature_key")) {
    return res.status(403).json({ error: 'You do not have access to this feature.' });

  res.status(200).json({ message: 'Welcome to the protected feature!' });

Usage in Development and Testing Environments

For development and testing, you can use a file store or an in-memory store to simulate Spackle's behavior without needing actual Stripe customers. Refer to the Node.js documentation section on using the FileStore for development and the in-memory store for testing.


You now have a Next.js 14 application integrated with Spackle, capable of managing user entitlements and feature gating based on subscriptions. This setup allows for dynamic pricing tables and feature management, enhancing your application's subscription-based functionalities.