Overrides without forks.
Build tenant/brand/region variants with deterministic fallback, keep one shared codebase, and ship faster with less maintenance overhead.
This monorepo contains LayerMint publishable packages under the @layermint/* scope.
npm i @layermint/sdk-vite @layermint/cli @layermint/shared-typesnpm i @layermint/sdk-vite @layermint/cli @layermint/shared-types --registry=https://npm.pkg.github.comFor GitHub Packages, configure .npmrc with a read token:
@layermint:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES_TOKEN}// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { createVariantOverridePlugin } from '@layermint/sdk-vite'
export default defineConfig({
plugins: [
react(),
createVariantOverridePlugin({
selector: {
region: process.env.LAYERMINT_REGION,
brand: process.env.LAYERMINT_BRAND,
tenant: process.env.LAYERMINT_TENANT,
},
layers: ['region', 'brand', 'tenant', 'default'],
roots: {
srcRoot: 'src',
variantsRoot: 'src/variants',
},
mergeStrategy: 'namedExport',
contractChecks: true,
}),
],
})# validate contracts/resolution
npx variant check --region eu --brand nike --tenant acme
# view resolution graph
npx variant graph --region eu --brand nike --tenant acme --format mermaid
# diff between selectors
npx variant diff --from-region eu --to-region us --tenant acme@layermint/sdk-vite: Vite plugin for layered variant override resolution.@layermint/cli:variantCLI forcheck,graph, anddiffcommands.@layermint/shared-types: shared contracts and reusable types across SDK/CLI.
LayerMint removes the need for tenant/brand/region forks with deterministic symbol-level fallback:
- override only what you need,
- keep a shared base,
- reduce long-term maintenance and regressions.
This repository publishes via release workflow on v* tags.
- CI: lint + typecheck + test + build
- Release: publish to GitHub Packages and npmjs
NPM_TOKEN: npm token with publish permissions for@layermint.
- Update package versions (
package.jsonfor each package). - Commit + push to
main. - Create and push a release tag:
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin vX.Y.Z.
├── packages/
│ ├── sdk-vite/
│ ├── cli/
│ └── shared-types/
├── pnpm-workspace.yaml
├── turbo.json
└── tsconfig.base.json- Node.js 20+
- pnpm 9+
pnpm install
pnpm build
pnpm test
pnpm typecheckMIT — see LICENSE.
- andrico