MCPcopy Index your code
hub / github.com/AhmedElywa/prisma-tools

github.com/AhmedElywa/prisma-tools @v9.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v9.0.0 ↗ · + Follow
307 symbols 866 edges 132 files 74 documented · 24% updated 27d agov9.0.0 · 2026-02-04★ 70019 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PalJS Header

PalJS - Your Prisma GraphQL Toolkit

A comprehensive toolkit for building modern GraphQL APIs with Prisma

<a href="https://www.npmjs.com/org/paljs"><img src="https://img.shields.io/npm/v/@paljs/generator?label=stable&style=flat-square" alt="Stable Version" /></a>
<a href="https://www.npmjs.com/package/@paljs/generator/v/beta"><img src="https://img.shields.io/npm/v/@paljs/generator/beta?label=beta&style=flat-square&color=orange" alt="Beta Version" /></a>
<a href="https://github.com/paljs/prisma-tools/blob/main/LICENSE"><img src="https://img.shields.io/github/license/paljs/prisma-tools?style=flat-square" alt="License" /></a>
<a href="https://github.com/paljs/prisma-tools/stargazers"><img src="https://img.shields.io/github/stars/paljs/prisma-tools?style=flat-square" alt="Stars" /></a>
<a href="https://discord.gg/X7yWXrM"><img src="https://img.shields.io/discord/768907308789235752?style=flat-square&logo=discord" alt="Discord" /></a>

v9 Released! PalJS v9 is a major rewrite featuring a native Prisma 7 generator, React 19 admin UI with Tailwind CSS 4, and typed PrismaSelect. What's New | Migration Guide

Table of Contents


Introduction

PalJS is a powerful toolkit that accelerates GraphQL API development with Prisma. Starting with v9, PalJS integrates directly with Prisma 7+ as a native generator, providing code generation, admin interfaces, and query optimization that runs automatically during prisma generate.

Why Choose PalJS?

  • Native Prisma Integration: Runs as part of prisma generate - no separate CLI needed
  • Type-Safe Code Generation: Generate GraphQL schemas, resolvers, and TypeScript types
  • Admin UI Ready: Automatic admin schema generation for the PalJS Admin UI
  • Query Optimization: PrismaSelect plugin for efficient field selection
  • Enterprise Ready: Built with type safety, security, and scalability in mind

Installation

# Install the generator (dev dependency)
npm install -D @paljs/generator prisma

# Install runtime dependencies
npm install @paljs/plugins @paljs/nexus

Quick Start

1. Add PalJS Generator to Your Prisma Schema

// prisma/schema.prisma

generator client {
  provider = "prisma-client-js"
}

generator paljs {
  provider = "paljs-generator"
  output   = "../generated/paljs"
  config   = "../paljs.config.ts"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  password  String
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

2. Create Configuration File

// paljs.config.ts
import { defineConfig } from '@paljs/generator';

export default defineConfig({
  // Generate TypeScript types for PrismaSelect
  generateTypes: true,

  // Generate Nexus GraphQL types
  generateGraphQL: true,

  // Generate Admin UI schema and pages
  generateAdmin: {
    enabled: true,
    output: './admin',
    routerType: 'app', // 'app' for Next.js App Router, 'pages' for Pages Router
  },

  // Global field exclusions (e.g., sensitive fields)
  excludeFields: ['password'],

  // Per-model configuration
  models: {
    User: {
      // Exclude specific mutations
      excludeQueriesAndMutations: ['deleteMany'],
    },
  },
});

3. Generate Code

npx prisma generate

This generates: - generated/paljs/dmmf/ - DMMF data for runtime use - generated/paljs/types/ - TypeScript types for PrismaSelect - generated/paljs/nexus/ - Nexus GraphQL types, queries, and mutations - generated/paljs/admin/ - Admin UI schema and pages

4. Use in Your GraphQL Server

// src/graphql/schema.ts
import { makeSchema } from 'nexus';
import * as types from '../generated/paljs/nexus';

export const schema = makeSchema({
  types,
  outputs: {
    typegen: './generated/nexus-typegen.ts',
    schema: './generated/schema.graphql',
  },
});

5. Use PrismaSelect for Query Optimization

import { PrismaSelect } from '@paljs/plugins';
import { dmmf, type ModelsObject } from '../generated/paljs';

// In your resolver
const select = new PrismaSelect<'User', ModelsObject>(info, {
  dmmf: [dmmf],
  defaultFields: {
    User: { id: true, email: true },
  },
  excludeFields: {
    User: ['password'],
  },
});

const users = await prisma.user.findMany(select.value);

Packages

Core Packages

@paljs/generator Prisma 7+ native generator for GraphQL schemas, types, and admin UI
@paljs/plugins PrismaSelect and other GraphQL plugins for query optimization
@paljs/nexus Nexus plugin for Prisma integration with automatic field selection
@paljs/admin React admin UI components with Tailwind CSS

Configuration

Full Configuration Reference

// paljs.config.ts
import { defineConfig } from '@paljs/generator';

export default defineConfig({
  // === Type Generation ===
  generateTypes: true,  // Generate TypeScript types for PrismaSelect

  // === GraphQL Generation ===
  generateGraphQL: true,  // Generate Nexus GraphQL types
  nexusOutput: './nexus', // Output directory for Nexus files (relative to generator output)

  // === Admin Generation ===
  generateAdmin: {
    enabled: true,
    output: './admin',      // Output directory
    routerType: 'app',      // 'app' | 'pages'
    models: ['User', 'Post'], // Optional: limit to specific models
  },

  // === Global Options ===
  prismaName: 'prisma',     // Name of Prisma client in context

  // Fields to exclude from all models
  excludeFields: ['password', 'hash'],

  // Fields to exclude from GraphQL inputs
  excludeInputFields: ['createdAt', 'updatedAt'],

  // Queries/mutations to exclude globally
  excludeQueriesAndMutations: ['deleteMany', 'updateMany'],

  // Disable all queries or mutations globally
  disableQueries: false,
  disableMutations: false,

  // === Per-Model Configuration ===
  models: {
    User: {
      // Exclude this model entirely from generation
      exclude: false,

      // Model-specific field exclusions
      excludeFields: ['internalNotes'],

      // Model-specific query/mutation exclusions
      excludeQueriesAndMutations: ['deleteMany'],

      // Disable queries or mutations for this model
      disableQueries: false,
      disableMutations: false,

      // Admin-specific settings
      admin: {
        hide: false,           // Hide from admin UI
        displayField: 'email', // Field to display in relationships
        listFields: ['id', 'email', 'name'], // Fields to show in list view
      },
    },

    AuditLog: {
      // Exclude model from GraphQL generation but keep in admin
      exclude: true,
    },

    Tag: {
      // Read-only model (no mutations)
      disableMutations: true,
    },
  },
});

Migration from v8

From CLI Workflow to Prisma Generator

Before (v8):

npm install -g @paljs/cli
pal generate

After (v9):

npm install -D @paljs/generator
npx prisma generate

The new approach: - Runs automatically with prisma generate - No separate CLI installation needed - Configuration via paljs.config.ts instead of pal.config.js - Same output, better integration


What's New in v9

PalJS v9 is a ground-up rewrite with major improvements.

  • Native Prisma 7 Generator — Runs as part of prisma generate, no separate CLI
  • Typed PrismaSelect — Generated ModelsObject type eliminates any casts
  • React 19 Admin UI — Rebuilt with Tailwind CSS 4 and modern React patterns
  • defineConfig() API — Type-safe configuration with paljs.config.ts
  • Unified Output — All generated code in one directory (dmmf/, types/, nexus/, admin/)

What's Removed

  • @paljs/cli — Replaced by the native Prisma generator
  • @paljs/create — Use create-next-app and add PalJS packages manually
  • @paljs/display — No longer needed
  • SDL and GraphQL Modules generators — Nexus code-first only

Installation

# Install the generator
npm install -D @paljs/generator prisma

# Install runtime packages
npm install @paljs/plugins @paljs/nexus @paljs/admin

Quick Setup

  1. Add the generator to your Prisma schema:
generator paljs {
  provider = "paljs-generator"
  output   = "../generated/paljs"
}
  1. Create paljs.config.ts next to your schema:
import { defineConfig } from '@paljs/generator/config';

export default defineConfig({
  generateGraphQL: true,
  generateTypes: true,
  generateAdmin: { enabled: true, output: './admin', routerType: 'app' },
  excludeFields: ['password'],
});
  1. Run generation:
npx prisma generate

See the full Migration Guide for upgrading from v8.


Community & Support


License

This project is licensed under the MIT License - see the LICENSE file for details.


Built with love by the PalJS team

<a href="https://github.com/paljs/prisma-tools">Star on GitHub</a> •
<a href="https://discord.gg/X7yWXrM">Join Discord</a>

Extension points exported contracts — how you extend this code

TypeGeneratorOptions (Interface)
(no doc)
packages/generator/src/writers/types.ts
Settings (Interface)
(no doc)
packages/nexus/src/settings.ts
PrismaSelectOptions (Interface)
(no doc)
packages/plugins/src/select.ts
AdminSchemaField (Interface)
(no doc)
packages/admin/src/types.ts
TableProps (Interface)
(no doc)
examples/admin-test/src/components/PrismaTable.tsx
NexusGeneratorOptions (Interface)
(no doc)
packages/generator/src/writers/nexus/index.ts
Field (Interface)
(no doc)
packages/nexus/src/types/admin-schema.ts
AdminSchemaModel (Interface)
(no doc)
packages/admin/src/types.ts

Core symbols most depended-on inside this repo

resolveConfig
called by 211
packages/generator/src/config/loader.ts
createTempDir
called by 56
tests/helpers/temp-dir.ts
classNames
called by 39
packages/admin/src/components/css.ts
ensureDir
called by 38
packages/generator/src/utils/paths.ts
writeGraphQL
called by 33
packages/generator/src/writers/graphql/index.ts
writeNexus
called by 21
packages/generator/src/writers/nexus/index.ts
executeOperation
called by 21
packages/plugins/tests/server/index.ts
writeAdmin
called by 20
packages/generator/src/writers/admin/index.ts

Shape

Function 220
Interface 63
Method 20
Class 4

Languages

TypeScript100%

Modules by API surface

packages/generator/src/writers/nexus/index.ts21 symbols
packages/generator/src/writers/graphql/index.ts21 symbols
packages/plugins/src/select.ts19 symbols
packages/generator/src/writers/types.ts14 symbols
packages/generator/src/writers/admin/schema.ts13 symbols
packages/admin/src/types.ts13 symbols
packages/admin/src/PrismaTable/Table/Filters.tsx13 symbols
packages/admin/src/Settings/index.tsx10 symbols
examples/admin-test/e2e/prisma-table.spec.ts10 symbols
packages/generator/src/writers/admin/pages.ts9 symbols
packages/admin/src/PrismaTable/Form/Inputs.tsx8 symbols
packages/admin/src/PrismaTable/Form/useActions.ts7 symbols

For agents

$ claude mcp add prisma-tools \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page