{"id":28391089,"url":"https://github.com/ahmedelywa/prisma-tools","last_synced_at":"2026-02-04T13:44:30.670Z","repository":{"id":37642888,"uuid":"255075959","full_name":"AhmedElywa/prisma-tools","owner":"AhmedElywa","description":"Prisma tools to help you generate CRUD system for GraphQL servers","archived":false,"fork":false,"pushed_at":"2025-06-02T16:09:07.000Z","size":21468,"stargazers_count":694,"open_issues_count":46,"forks_count":56,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-06-10T22:05:14.050Z","etag":null,"topics":["apollo","crud","graphql-modules","graphql-schema","graphql-server","nexus-framework","prisma","prisma-admin","prisma-client","prisma-framework","sdl","typescript"],"latest_commit_sha":null,"homepage":"https://paljs.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AhmedElywa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-12T12:18:36.000Z","updated_at":"2025-06-02T16:09:11.000Z","dependencies_parsed_at":"2024-06-11T19:40:18.990Z","dependency_job_id":"d1272c6f-22b1-42b3-803e-83a8c66c0279","html_url":"https://github.com/AhmedElywa/prisma-tools","commit_stats":{"total_commits":883,"total_committers":21,"mean_commits":42.04761904761905,"dds":0.1551528878822197,"last_synced_commit":"525f4d7e64164ebe8cefa60fc77cca6feddfd1c5"},"previous_names":["ahmedelywa/prisma-tools","paljs/prisma-tools"],"tags_count":172,"template":false,"template_full_name":null,"purl":"pkg:github/AhmedElywa/prisma-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedElywa%2Fprisma-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedElywa%2Fprisma-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedElywa%2Fprisma-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedElywa%2Fprisma-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AhmedElywa","download_url":"https://codeload.github.com/AhmedElywa/prisma-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedElywa%2Fprisma-tools/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261908865,"owners_count":23228724,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apollo","crud","graphql-modules","graphql-schema","graphql-server","nexus-framework","prisma","prisma-admin","prisma-client","prisma-framework","sdl","typescript"],"created_at":"2025-05-31T08:08:16.059Z","updated_at":"2026-02-04T13:44:30.664Z","avatar_url":"https://github.com/AhmedElywa.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./header.png\" alt=\"PalJS Header\" width=\"100%\" /\u003e\n\n  \u003ch1\u003ePalJS - Your Prisma GraphQL Toolkit\u003c/h1\u003e\n\n  \u003cp\u003e\u003cstrong\u003eA comprehensive toolkit for building modern GraphQL APIs with Prisma\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://www.npmjs.com/org/paljs\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@paljs/generator?label=stable\u0026style=flat-square\" alt=\"Stable Version\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@paljs/generator/v/beta\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@paljs/generator/beta?label=beta\u0026style=flat-square\u0026color=orange\" alt=\"Beta Version\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/paljs/prisma-tools/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/paljs/prisma-tools?style=flat-square\" alt=\"License\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/paljs/prisma-tools/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/paljs/prisma-tools?style=flat-square\" alt=\"Stars\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/X7yWXrM\"\u003e\u003cimg src=\"https://img.shields.io/discord/768907308789235752?style=flat-square\u0026logo=discord\" alt=\"Discord\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003e **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](#whats-new-in-v9) | [Migration Guide](./docs/MIGRATION-v9.md)\n\n## Table of Contents\n\n- [Introduction](#introduction)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Packages](#packages)\n- [Configuration](#configuration)\n- [License](#license)\n\n---\n\n# Introduction\n\nPalJS 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`.\n\n## Why Choose PalJS?\n\n- **Native Prisma Integration**: Runs as part of `prisma generate` - no separate CLI needed\n- **Type-Safe Code Generation**: Generate GraphQL schemas, resolvers, and TypeScript types\n- **Admin UI Ready**: Automatic admin schema generation for the PalJS Admin UI\n- **Query Optimization**: PrismaSelect plugin for efficient field selection\n- **Enterprise Ready**: Built with type safety, security, and scalability in mind\n\n---\n\n# Installation\n\n```bash\n# Install the generator (dev dependency)\nnpm install -D @paljs/generator prisma\n\n# Install runtime dependencies\nnpm install @paljs/plugins @paljs/nexus\n```\n\n---\n\n# Quick Start\n\n## 1. Add PalJS Generator to Your Prisma Schema\n\n```prisma\n// prisma/schema.prisma\n\ngenerator client {\n  provider = \"prisma-client-js\"\n}\n\ngenerator paljs {\n  provider = \"paljs-generator\"\n  output   = \"../generated/paljs\"\n  config   = \"../paljs.config.ts\"\n}\n\ndatasource db {\n  provider = \"postgresql\"\n  url      = env(\"DATABASE_URL\")\n}\n\nmodel User {\n  id        Int      @id @default(autoincrement())\n  email     String   @unique\n  name      String?\n  password  String\n  posts     Post[]\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\nmodel Post {\n  id        Int      @id @default(autoincrement())\n  title     String\n  content   String?\n  published Boolean  @default(false)\n  author    User     @relation(fields: [authorId], references: [id])\n  authorId  Int\n}\n```\n\n## 2. Create Configuration File\n\n```typescript\n// paljs.config.ts\nimport { defineConfig } from '@paljs/generator';\n\nexport default defineConfig({\n  // Generate TypeScript types for PrismaSelect\n  generateTypes: true,\n\n  // Generate Nexus GraphQL types\n  generateGraphQL: true,\n\n  // Generate Admin UI schema and pages\n  generateAdmin: {\n    enabled: true,\n    output: './admin',\n    routerType: 'app', // 'app' for Next.js App Router, 'pages' for Pages Router\n  },\n\n  // Global field exclusions (e.g., sensitive fields)\n  excludeFields: ['password'],\n\n  // Per-model configuration\n  models: {\n    User: {\n      // Exclude specific mutations\n      excludeQueriesAndMutations: ['deleteMany'],\n    },\n  },\n});\n```\n\n## 3. Generate Code\n\n```bash\nnpx prisma generate\n```\n\nThis generates:\n- `generated/paljs/dmmf/` - DMMF data for runtime use\n- `generated/paljs/types/` - TypeScript types for PrismaSelect\n- `generated/paljs/nexus/` - Nexus GraphQL types, queries, and mutations\n- `generated/paljs/admin/` - Admin UI schema and pages\n\n## 4. Use in Your GraphQL Server\n\n```typescript\n// src/graphql/schema.ts\nimport { makeSchema } from 'nexus';\nimport * as types from '../generated/paljs/nexus';\n\nexport const schema = makeSchema({\n  types,\n  outputs: {\n    typegen: './generated/nexus-typegen.ts',\n    schema: './generated/schema.graphql',\n  },\n});\n```\n\n## 5. Use PrismaSelect for Query Optimization\n\n```typescript\nimport { PrismaSelect } from '@paljs/plugins';\nimport { dmmf, type ModelsObject } from '../generated/paljs';\n\n// In your resolver\nconst select = new PrismaSelect\u003c'User', ModelsObject\u003e(info, {\n  dmmf: [dmmf],\n  defaultFields: {\n    User: { id: true, email: true },\n  },\n  excludeFields: {\n    User: ['password'],\n  },\n});\n\nconst users = await prisma.user.findMany(select.value);\n```\n\n---\n\n# Packages\n\n## Core Packages\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003e\u003ca href=\"./packages/generator\"\u003e@paljs/generator\u003c/a\u003e\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ePrisma 7+ native generator for GraphQL schemas, types, and admin UI\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003e\u003ca href=\"./packages/plugins\"\u003e@paljs/plugins\u003c/a\u003e\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003ePrismaSelect and other GraphQL plugins for query optimization\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003e\u003ca href=\"./packages/nexus\"\u003e@paljs/nexus\u003c/a\u003e\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003eNexus plugin for Prisma integration with automatic field selection\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003e\u003ca href=\"./packages/admin\"\u003e@paljs/admin\u003c/a\u003e\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003eReact admin UI components with Tailwind CSS\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n---\n\n# Configuration\n\n## Full Configuration Reference\n\n```typescript\n// paljs.config.ts\nimport { defineConfig } from '@paljs/generator';\n\nexport default defineConfig({\n  // === Type Generation ===\n  generateTypes: true,  // Generate TypeScript types for PrismaSelect\n\n  // === GraphQL Generation ===\n  generateGraphQL: true,  // Generate Nexus GraphQL types\n  nexusOutput: './nexus', // Output directory for Nexus files (relative to generator output)\n\n  // === Admin Generation ===\n  generateAdmin: {\n    enabled: true,\n    output: './admin',      // Output directory\n    routerType: 'app',      // 'app' | 'pages'\n    models: ['User', 'Post'], // Optional: limit to specific models\n  },\n\n  // === Global Options ===\n  prismaName: 'prisma',     // Name of Prisma client in context\n\n  // Fields to exclude from all models\n  excludeFields: ['password', 'hash'],\n\n  // Fields to exclude from GraphQL inputs\n  excludeInputFields: ['createdAt', 'updatedAt'],\n\n  // Queries/mutations to exclude globally\n  excludeQueriesAndMutations: ['deleteMany', 'updateMany'],\n\n  // Disable all queries or mutations globally\n  disableQueries: false,\n  disableMutations: false,\n\n  // === Per-Model Configuration ===\n  models: {\n    User: {\n      // Exclude this model entirely from generation\n      exclude: false,\n\n      // Model-specific field exclusions\n      excludeFields: ['internalNotes'],\n\n      // Model-specific query/mutation exclusions\n      excludeQueriesAndMutations: ['deleteMany'],\n\n      // Disable queries or mutations for this model\n      disableQueries: false,\n      disableMutations: false,\n\n      // Admin-specific settings\n      admin: {\n        hide: false,           // Hide from admin UI\n        displayField: 'email', // Field to display in relationships\n        listFields: ['id', 'email', 'name'], // Fields to show in list view\n      },\n    },\n\n    AuditLog: {\n      // Exclude model from GraphQL generation but keep in admin\n      exclude: true,\n    },\n\n    Tag: {\n      // Read-only model (no mutations)\n      disableMutations: true,\n    },\n  },\n});\n```\n\n---\n\n# Migration from v8\n\n## From CLI Workflow to Prisma Generator\n\n**Before (v8):**\n```bash\nnpm install -g @paljs/cli\npal generate\n```\n\n**After (v9):**\n```bash\nnpm install -D @paljs/generator\nnpx prisma generate\n```\n\nThe new approach:\n- Runs automatically with `prisma generate`\n- No separate CLI installation needed\n- Configuration via `paljs.config.ts` instead of `pal.config.js`\n- Same output, better integration\n\n---\n\n# What's New in v9\n\nPalJS v9 is a ground-up rewrite with major improvements.\n\n- **Native Prisma 7 Generator** — Runs as part of `prisma generate`, no separate CLI\n- **Typed PrismaSelect** — Generated `ModelsObject` type eliminates `any` casts\n- **React 19 Admin UI** — Rebuilt with Tailwind CSS 4 and modern React patterns\n- **`defineConfig()` API** — Type-safe configuration with `paljs.config.ts`\n- **Unified Output** — All generated code in one directory (`dmmf/`, `types/`, `nexus/`, `admin/`)\n\n## What's Removed\n\n- `@paljs/cli` — Replaced by the native Prisma generator\n- `@paljs/create` — Use `create-next-app` and add PalJS packages manually\n- `@paljs/display` — No longer needed\n- SDL and GraphQL Modules generators — Nexus code-first only\n\n## Installation\n\n```bash\n# Install the generator\nnpm install -D @paljs/generator prisma\n\n# Install runtime packages\nnpm install @paljs/plugins @paljs/nexus @paljs/admin\n```\n\n## Quick Setup\n\n1. Add the generator to your Prisma schema:\n\n```prisma\ngenerator paljs {\n  provider = \"paljs-generator\"\n  output   = \"../generated/paljs\"\n}\n```\n\n2. Create `paljs.config.ts` next to your schema:\n\n```typescript\nimport { defineConfig } from '@paljs/generator/config';\n\nexport default defineConfig({\n  generateGraphQL: true,\n  generateTypes: true,\n  generateAdmin: { enabled: true, output: './admin', routerType: 'app' },\n  excludeFields: ['password'],\n});\n```\n\n3. Run generation:\n\n```bash\nnpx prisma generate\n```\n\nSee the full [Migration Guide](./docs/MIGRATION-v9.md) for upgrading from v8.\n\n---\n\n# Community \u0026 Support\n\n- **[Discord](https://discord.gg/X7yWXrM)** - Join our community for help and discussions\n- **[GitHub Issues](https://github.com/paljs/prisma-tools/issues)** - Report bugs and request features\n- **[Discussions](https://github.com/paljs/prisma-tools/discussions)** - Ask questions and share ideas\n\n---\n\n# License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\u003cstrong\u003eBuilt with love by the PalJS team\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/paljs/prisma-tools\"\u003eStar on GitHub\u003c/a\u003e •\n    \u003ca href=\"https://discord.gg/X7yWXrM\"\u003eJoin Discord\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmedelywa%2Fprisma-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmedelywa%2Fprisma-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmedelywa%2Fprisma-tools/lists"}