Skip to main content

Getting Started with CSP Kit

Welcome to CSP Kit! This guide will help you get up and running quickly with Content Security Policy generation for your web applications.

🎯 What is CSP Kit?​

CSP Kit is a modern TypeScript-first toolkit that simplifies Content Security Policy (CSP) management by using a service-first approach. Instead of manually writing CSP directives, you import and use service objects that automatically provide the correct security policies.

🚀 Quick Start Options​

The fastest way to get started is using our interactive web interface:

👉 Try CSP Kit Web Generator

Benefits:

  • ✅ No installation required
  • ✅ Visual service selection
  • ✅ Real-time CSP generation
  • ✅ Copy ready-to-use headers
  • ✅ Learn how different services affect CSP

Option 2: TypeScript/JavaScript API​

For developers who want to integrate CSP generation into their applications:

Installation​

You need both packages for CSP Kit to work:

# npm
npm install @csp-kit/generator @csp-kit/data

# yarn
yarn add @csp-kit/generator @csp-kit/data

# pnpm
pnpm add @csp-kit/generator @csp-kit/data

💡 Why two packages? CSP Kit uses a data-package separation architecture. The @csp-kit/generator contains the core logic, while @csp-kit/data contains service definitions that update frequently. This allows you to get service updates without library updates.

Basic Usage​

import { generateCSP } from '@csp-kit/generator';
import { GoogleAnalytics, Stripe, GoogleFonts } from '@csp-kit/data';

// Generate CSP using imported services (simple array syntax)
const result = generateCSP([GoogleAnalytics, Stripe, GoogleFonts]);

console.log(result.header);
// Output: "script-src https://www.googletagmanager.com https://js.stripe.com; style-src https://fonts.googleapis.com; ..."

// Use the CSP header
response.setHeader('Content-Security-Policy', result.header);

Option 3: CLI Tools​

For developers who want to contribute or test CSP configurations:

# Test CSP generation (global installation not required)
npx tsx test-csp.ts

# For contributors: Install CLI globally
npm install -g @csp-kit/cli

🎯 Common Use Cases​

1. Next.js Application (App Router)​

// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { generateCSPHeader } from '@csp-kit/generator';
import { GoogleAnalytics, VercelAnalytics, GoogleFonts } from '@csp-kit/data';

export function middleware(request: NextRequest) {
const csp = generateCSPHeader([GoogleAnalytics, VercelAnalytics, GoogleFonts]);

const response = NextResponse.next();
response.headers.set('Content-Security-Policy', csp);

return response;
}

export const config = {
matcher: '/((?!api|_next/static|_next/image|favicon.ico).*)',
};

2. Express.js Middleware​

import express from 'express';
import { generateCSP } from '@csp-kit/generator';
import { GoogleAnalytics, Stripe, Intercom } from '@csp-kit/data';

const app = express();

// Generate CSP once at startup (for better performance)
const cspResult = generateCSP({
services: [GoogleAnalytics, Stripe, Intercom],
});

// Apply CSP to all routes
app.use((req, res, next) => {
res.setHeader('Content-Security-Policy', cspResult.header);
next();
});

3. React Application (Vite)​

// vite.config.ts
import { defineConfig } from 'vite';
import { generateCSPHeader } from '@csp-kit/generator';
import { GoogleAnalytics, GoogleFonts } from '@csp-kit/data';

const csp = generateCSPHeader([GoogleAnalytics, GoogleFonts]);

export default defineConfig({
server: {
headers: {
'Content-Security-Policy': csp,
},
},
});

4. Static Sites (Netlify, Vercel)​

Generate CSP headers and add them to your hosting configuration:

// generate-headers.ts
import { generateCSPHeader } from '@csp-kit/generator';
import { GoogleAnalytics, GoogleFonts } from '@csp-kit/data';

const csp = generateCSPHeader([GoogleAnalytics, GoogleFonts]);

console.log(csp);
// Copy this output to your configuration files

Netlify (_headers file):

/*
Content-Security-Policy: script-src 'self' https://www.googletagmanager.com; style-src 'self' https://fonts.googleapis.com

Vercel (vercel.json):

{
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Content-Security-Policy",
"value": "script-src 'self' https://www.googletagmanager.com; style-src 'self' https://fonts.googleapis.com"
}
]
}
]
}

🔧 Advanced Configuration​

Custom Services​

Define your own services alongside built-in ones:

import { generateCSP, defineService } from '@csp-kit/generator';
import { GoogleAnalytics, Stripe } from '@csp-kit/data';

// Define a custom service
const MyAPI = defineService({
directives: {
'connect-src': ['https://api.myapp.com'],
'img-src': ['https://images.myapp.com'],
},
});

// Use it like any built-in service
const result = generateCSP({
services: [GoogleAnalytics, Stripe, MyAPI],
nonce: true, // Generate nonce for inline scripts
reportUri: 'https://my-site.com/csp-report',
includeSelf: true, // Include 'self' in common directives
});

Nonce Support​

For secure inline scripts:

import { generateCSP } from '@csp-kit/generator';
import { GoogleAnalytics } from '@csp-kit/data';

const result = generateCSP({
services: [GoogleAnalytics],
nonce: true,
});

// Use the nonce in your HTML
const html = `
<script nonce="${result.nonce}">
// Your inline script
</script>
`;

Report-Only Mode​

Test CSP without breaking your site:

import { generateReportOnlyCSP } from '@csp-kit/generator';
import { GoogleAnalytics, Stripe } from '@csp-kit/data';

const result = generateReportOnlyCSP({
services: [GoogleAnalytics, Stripe],
reportUri: '/api/csp-violations',
});

const reportOnlyHeader = result.header;

// Use report-only header for testing
response.setHeader('Content-Security-Policy-Report-Only', reportOnlyHeader);

Environment-Specific Configuration​

import { generateCSP, defineService } from '@csp-kit/generator';
import { GoogleAnalytics, Stripe } from '@csp-kit/data';

// Development-only service
const DevTools = defineService({
directives: {
'script-src': ['http://localhost:3000', "'unsafe-eval'"],
'connect-src': ['ws://localhost:3000', 'http://localhost:3001'],
},
});

const isDevelopment = process.env.NODE_ENV === 'development';

const result = generateCSP({
services: [GoogleAnalytics, Stripe, ...(isDevelopment ? [DevTools] : [])],
development: {
includeUnsafeEval: true, // Allow eval in development
additionalRules: {
'connect-src': ['ws://localhost:*'],
},
},
production: {
reportUri: 'https://api.myapp.com/csp-violations',
},
});

🔍 Available Services​

CSP Kit includes 106+ pre-configured services. Here's how to discover them:

TypeScript Auto-Complete​

The best way to discover services is through your IDE:

import {
// Start typing and your IDE will show all available services
GoogleAnalytics,
Stripe,
Intercom,
Sentry,
// ... 100+ more services
} from '@csp-kit/data';

Common Services by Category​

// Analytics
import { GoogleAnalytics, Mixpanel, Amplitude, Hotjar } from '@csp-kit/data';

// Payment
import { Stripe, Paypal, Square, Braintree } from '@csp-kit/data';

// Social Media
import { Facebook, Twitter, LinkedIn, Youtube } from '@csp-kit/data';

// Error Monitoring
import { Sentry, Bugsnag, Rollbar } from '@csp-kit/data';

// Customer Support
import { Intercom, Zendesk, Crisp, Drift } from '@csp-kit/data';

// CDN & Fonts
import { GoogleFonts, Cloudflare, Fastly } from '@csp-kit/data';

🐛 Troubleshooting​

Common Issues​

1. Cannot find service import

// ❌ Wrong - using string ID
const result = generateCSP(['google-analytics']);

// ✅ Correct - import service object
import { GoogleAnalytics } from '@csp-kit/data';
const result = generateCSP({ services: [GoogleAnalytics] });

2. Type errors with services

// Make sure you have TypeScript configured properly
// tsconfig.json
{
"compilerOptions": {
"moduleResolution": "bundler", // or "node16"
"esModuleInterop": true
}
}

3. Missing @csp-kit/data package

# Make sure both packages are installed
npm list @csp-kit/generator @csp-kit/data

# If missing, install both
npm install @csp-kit/generator @csp-kit/data

Getting Help​

📚 Next Steps​

Now that you're up and running:

  1. API Reference - Complete API documentation
  2. Custom Services - Create your own services
  3. Contributing - Help add new services
  4. Next.js Examples - Framework-specific examples

🎉 Welcome to the Community!​

Happy coding with type-safe CSP! 🚀