npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@freddydrodev/prisma-field-encryption

v0.0.1

Published

Transparent field-level encryption at rest for Prisma

Readme

Next.js + Prisma Field Encryption Example

This example demonstrates how to use the Prisma Field Encryption library with Next.js 15 and Prisma 6.12.0.

Features

  • ✅ Next.js 15 with App Router
  • ✅ Prisma 6.12.0 with field encryption
  • ✅ TypeScript support
  • ✅ Tailwind CSS for styling
  • ✅ SQLite database for simplicity
  • ✅ API routes demonstrating encryption/decryption
  • ✅ Interactive frontend to test functionality

Setup

  1. Install dependencies:

    npm install
  2. Set up environment variables:

    # .env
    DATABASE_URL="file:./dev.db"
    PRISMA_FIELD_ENCRYPTION_KEY="k1.aesgcm256.DbQoar8ZLuUsOHZNyrnjlskInHDYlzF3q6y1KGM7DUM="
  3. Generate Prisma client:

    npx prisma generate
  4. Create and migrate database:

    npx prisma db push
  5. Run the development server:

    npm run dev
  6. Open your browser: Navigate to http://localhost:3000

How it Works

Database Schema

The example includes two models with encrypted fields:

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?  /// @encrypted
  nameHash  String?  /// @encryption:hash(name)?normalize=lowercase&normalize=trim
  ssn       String?  /// @encrypted?mode=strict
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  posts     Post[]
}

model Post {
  id        String   @id @default(cuid())
  title     String
  content   String?  /// @encrypted
  published Boolean  @default(false)
  authorId  String
  author    User     @relation(fields: [authorId], references: [id], onDelete: Cascade)
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

Field Encryption Setup

The Prisma client is extended with field encryption in src/lib/prisma.ts:

import { PrismaClient } from '../generated/prisma'
import { fieldEncryptionExtension } from 'prisma-field-encryption'

export const prisma = new PrismaClient()

export const db = prisma.$extends(
  fieldEncryptionExtension({
    // Encryption key is loaded from environment variable
  })
)

API Routes

The example includes API routes that demonstrate:

  • Creating users with encrypted names and SSNs
  • Creating posts with encrypted content
  • Retrieving data with automatic decryption
  • Relationships between encrypted fields

Frontend

The frontend allows you to:

  • Create users with names and SSNs (automatically encrypted)
  • Create posts with content (automatically encrypted)
  • View all data with automatic decryption
  • See how the encryption is transparent to the application

Testing the Encryption

  1. Create a user with a name and SSN
  2. Create a post with content
  3. Check the database directly to see encrypted values:
    npx prisma studio
  4. Notice that the data appears encrypted in the database but decrypted in the application

Key Features Demonstrated

  • Transparent Encryption: Data is automatically encrypted/decrypted
  • Hash Fields: Name hash allows searching by name
  • Strict Mode: SSN field uses strict mode for additional security
  • Relationships: Encrypted fields work seamlessly with Prisma relations
  • API Integration: Works perfectly with Next.js API routes

Environment Variables

  • DATABASE_URL: SQLite database file location
  • PRISMA_FIELD_ENCRYPTION_KEY: Encryption key for field encryption

Available Scripts

  • npm run dev: Start development server
  • npm run build: Build for production
  • npm run start: Start production server
  • npm run lint: Run ESLint

Learn More