Skip to content

Configuration

Srcpack looks for configuration in the following order:

  1. srcpack.config.ts (recommended)
  2. srcpack.config.js
  3. srcpack field in package.json

Basic Structure

ts
import { defineConfig } from "srcpack";

export default defineConfig({
  outDir: ".srcpack",
  bundles: {
    // bundle definitions
  },
  upload: {
    // optional upload config
  },
});

Options

OptionTypeDefaultDescription
rootstringprocess.cwd()Project root directory
outDirstring.srcpackOutput directory (relative to root)
emptyOutDirbooleantrue*Empty output directory before bundling
bundlesobjectNamed bundles (required)
uploadobjectUpload destination

*emptyOutDir defaults to true when outDir is inside project root.

root

Project root directory where files are bundled from. Can be absolute or relative to CWD.

ts
export default defineConfig({
  root: "./packages/app", // bundle from subdirectory
  bundles: {
    app: "src/**/*", // matches packages/app/src/**/*
  },
});

outDir

Output directory for bundle files. Can be absolute or relative to project root.

ts
export default defineConfig({
  root: "./packages/app",
  outDir: "dist", // writes to packages/app/dist/
  bundles: {
    app: "src/**/*",
  },
});

Bundle Definitions

Each bundle can be defined in three ways:

String (Simple Glob)

ts
bundles: {
  app: "src/**/*",
}

Array (Multiple Patterns)

Use ! prefix to exclude:

ts
bundles: {
  api: ["src/**/*", "!src/**/*.test.ts"],
}

Object (Full Options)

ts
bundles: {
  docs: {
    include: "docs/**/*.md",
    outfile: "~/Downloads/docs.txt",
    index: false,
  },
}

Bundle options:

OptionTypeDefaultDescription
includestring | string[]Glob pattern(s)
outfilestring{outDir}/{name}.txtCustom output path
indexbooleantrueInclude index header
promptstringText or file path (./, ~/) to prepend

Pattern Syntax

Patterns follow standard glob syntax with special prefixes:

PatternMatches
src/**/*All files under src/
*.tsTypeScript files in root
**/*.tsTypeScript files anywhere
!**/*.test.tsExclude test files
+**/*.local.mdForce-include, bypass .gitignore
{src,lib}/**/*Files in src/ or lib/

Force-Include (+ prefix)

Use + to include files that would normally be excluded by .gitignore:

ts
bundles: {
  docs: [
    "docs/**/*",           // all docs (respects .gitignore)
    "+docs/**/*.local.md", // force-include local notes
  ],
}

Automatic Exclusions

Srcpack automatically excludes:

  • Files matching .gitignore patterns
  • Binary files (images, fonts, compiled assets)
  • node_modules/
  • .git/
  • Lock files (package-lock.json, yarn.lock, etc.)

Examples

Monorepo

ts
export default defineConfig({
  bundles: {
    web: "apps/web/**/*",
    api: "apps/api/**/*",
    shared: "packages/shared/**/*",
  },
});

Frontend + Backend

ts
export default defineConfig({
  bundles: {
    client: ["src/client/**/*", "src/shared/**/*"],
    server: ["src/server/**/*", "src/shared/**/*"],
  },
});

Exclude Tests and Mocks

ts
export default defineConfig({
  bundles: {
    app: [
      "src/**/*",
      "!src/**/*.test.ts",
      "!src/**/*.spec.ts",
      "!src/**/__mocks__/**",
    ],
  },
});

Code Review Bundle

ts
export default defineConfig({
  bundles: {
    review: {
      include: "src/**/*",
      prompt: "./prompts/review.md", // or inline: "Review this code..."
    },
  },
});

Package.json Config

json
{
  "srcpack": {
    "bundles": {
      "app": "src/**/*"
    }
  }
}

Upload Configuration

Configure cloud upload destinations. See Google Drive Upload for setup details.

ts
export default defineConfig({
  bundles: {
    /* ... */
  },
  upload: {
    provider: "gdrive",
    folderId: "1ABC...",
    clientId: process.env.GDRIVE_CLIENT_ID,
    clientSecret: process.env.GDRIVE_CLIENT_SECRET,
    exclude: ["local"], // skip these bundles
  },
});

Upload options:

OptionTypeDefaultDescription
provider"gdrive"Upload provider (required)
folderIdstringTarget folder ID (optional)
clientIdstringOAuth client ID (required)
clientSecretstringOAuth client secret (required)
excludestring[]Bundle names to skip during upload

TypeScript Support

The defineConfig helper provides type checking and autocomplete:

ts
import { defineConfig } from "srcpack";

export default defineConfig({
  // Full autocomplete here
});