Skip to main content

monostack.config.json

Every derived app has a monostack.config.json at its root that tracks its relationship to a parent app. Both migrate and update rely on this file to determine what's changed and what to sync.

Schema

{
"parentCommit": "abc123...",
"parentApp": "boiler",
"excludedFiles": [
"src/routes/(website)/**"
]
}

Fields

FieldRequiredDefaultDescription
parentCommitYesSHA of the last synced commit from the parent app. Used by update and migrate to determine which changes are new.
parentAppNo"boiler"Name of the parent app directory. Determines which apps/ folder to diff against.
excludedFilesNo[]Glob patterns for files to skip during sync. Paths are relative to the app root.

excludedFiles

Use excludedFiles to permanently skip files that only belong to the parent app or that your app has completely replaced.

{
"parentCommit": "0a2c73f...",
"excludedFiles": [
"src/routes/(website)/**",
"src/lib/domains/billing/"
]
}

These patterns are checked in addition to the built-in exclusions:

  • src/routes/(admin)/example-models/
  • src/lib/domains/exampleModels/
  • monostack.config.json
  • drizzle/
  • src/locales/
  • .env
  • All patterns from the root .gitignore

Files matching any of these patterns are silently skipped — they won't appear in merge reports or conflict prompts.

How it's used

  • mono update and mono migrate read parentCommit to find new commits, then update it after applying changes (unless --no-update is passed).
  • mono scaffold app creates this file automatically with the current HEAD commit and parent name.
  • The config file itself is always excluded from syncs so it's never overwritten by the parent.

Examples

Minimal config (inherits from boiler):

{
"parentCommit": "ff8f46d11e89912f8eca9fff9a3f3e4a07b08d57"
}

Custom parent app:

{
"parentCommit": "6168e674329d2b2e8e5c791a69dbec8a1d2296ff",
"parentApp": "boiler-st"
}

With excluded files:

{
"parentCommit": "0a2c73ffe2991b40ad3b17b1d7e3b30b91ce68dd",
"excludedFiles": [
"src/routes/(website)/**"
]
}