Skip to main content

Using Wrapper Packages

Wrapper packages are pre-configured bundles of tools and configurations distributed via package managers (npm, gem, pypi). They allow teams to standardize development tooling across all projects with a single dependency.

What are Wrapper Packages?​

Instead of configuring linters, formatters, and other tools separately in each project, you install a wrapper package that brings everything pre-configured:

# Traditional approach (manual per project)
npm install eslint prettier @typescript-eslint/parser @typescript-eslint/eslint-plugin
# Then create .eslintrc.js, .prettierrc, etc.

# With datamitsu wrapper
npm install @company/datamitsu-config
datamitsu config reconcile
# Everything configured automatically

Wrapper packages contain:

  • Tool definitions (versions, download URLs, hashes)
  • Pre-configured settings (ESLint rules, Prettier options, etc.)
  • Managed project files (configs, ignore files, git hooks)
  • Project-specific customization logic

Installing a Wrapper Package​

Step 1: Install datamitsu​

First, ensure you have the datamitsu binary installed. See Installation.

Step 2: Install the Wrapper Package​

Install your team's wrapper package as a dev dependency:

pnpm add -D @company/datamitsu-config

The wrapper package typically includes a datamitsu binary in its bin/ folder that wraps the core binary with --before-config.

Step 3: Initialize Tools​

Download all configured tools:

# Using the wrapper's binary
npx datamitsu init

# Or if datamitsu is globally installed
datamitsu --before-config node_modules/@company/datamitsu-config/config/datamitsu.config.js init

This downloads and stores all binaries defined in the wrapper package.

Step 4: Reconcile Managed Configs​

Reconciliation writes managed files and then runs datamitsu fix. Preview the changes without either action first:

npx datamitsu config reconcile --dry-run

Then reconcile the managed files:

npx datamitsu config reconcile

This creates config files (.eslintrc.js, .prettierrc, .golangci.yml, etc.) in your project based on the wrapper's managedConfigs entries. It is separate from init, which provisions the toolchain and .datamitsu links.

Step 5: Run Checks​

Run linters and fixers:

# Fix automatically fixable issues
npx datamitsu fix

# Run lint checks
npx datamitsu lint

# Run both (fix first, then lint)
npx datamitsu check

Using the Wrapper Package​

Once installed, the wrapper package becomes your team's standard toolchain.

Running Commands​

Use the wrapper's datamitsu binary:

# All commands automatically use the wrapper config
npx datamitsu init
npx datamitsu config reconcile
npx datamitsu check
npx datamitsu exec golangci-lint run

Integrating with npm Scripts​

Add datamitsu commands to your package.json:

{
"scripts": {
"lint": "datamitsu lint",
"fix": "datamitsu fix",
"check": "datamitsu check",
"reconcile-config": "datamitsu config reconcile"
}
}

Then run via your package manager:

npm run lint
npm run fix
npm run check

Integrating with CI/CD​

Pre-cache tools in Docker for fast CI builds:

FROM node:20-alpine

# Install wrapper package globally
RUN npm install -g @company/datamitsu-config

# Download ALL tools to global cache
RUN datamitsu init --all

# This layer is cached - only re-runs when tools change

# Copy project files
COPY . /app
WORKDIR /app

# Run checks (tools already cached)
RUN datamitsu check

Only changed tools re-download on updates, dramatically speeding up CI builds.

tip

If you maintain the wrapper package itself (rather than just consuming it), you can publish a pre-built image instead of running datamitsu init --all at build time. datamitsu devtools dockerfile generates an optimized multi-stage Dockerfile with a digest-pinned base and one cacheable layer per tool. See Generating a Docker image.

Customizing Wrapper Configs​

Wrapper packages provide opinionated defaults, but you can override them in your project.

Project-Level Config​

Create datamitsu.config.ts at your git root:

/// <reference path=".datamitsu/datamitsu.config.d.ts" />

function getConfig(prev) {
return {
...prev,
apps: {
...prev.apps,
// Disable a tool from the wrapper
unwantedTool: undefined,

// Override tool settings
"golangci-lint": {
...prev.apps["golangci-lint"],
operations: {
lint: {
args: ["run", "--timeout=10m"], // Longer timeout for this project
},
},
},
},
};
}

globalThis.getConfig = getConfig;
globalThis.getMinVersion = () => "0.0.1";

Replace Managed Config Files​

Override the wrapper's managed config files by providing your own:

/// <reference path=".datamitsu/datamitsu.config.d.ts" />

function getConfig(prev) {
return {
...prev,
managedConfigs: {
...prev.managedConfigs,
".eslintrc.js": {
content: () => `
export default {
// Your custom ESLint config
rules: {
"no-console": "error",
},
};
`,
},
},
};
}
globalThis.getConfig = getConfig;

Add Project-Specific Tools​

Extend the wrapper with tools unique to your project:

/// <reference path=".datamitsu/datamitsu.config.d.ts" />

function getConfig(prev) {
return {
...prev,
apps: {
...prev.apps,
"custom-linter": {
binary: {
binaries: {
linux: {
amd64: {
glibc: {
url: "https://example.com/custom-linter-linux-amd64.tar.gz",
hash: "sha256:<digest>",
contentType: "tar.gz",
binaryPath: "custom-linter",
},
},
},
},
},
},
},
tools: {
...prev.tools,
"custom-linter": {
name: "custom-linter",
operations: {
lint: {
app: "custom-linter",
args: ["check"],
scope: "repository",
},
},
},
},
};
}
globalThis.getConfig = getConfig;
globalThis.getMinVersion = () => "0.0.1";

Migration-Free Updates​

One of datamitsu's key features is migration-free updates. Update your wrapper package without breaking your project customizations.

How It Works​

The patching mechanism merges new defaults with your project-specific changes:

  1. Wrapper provides base config — Tool versions, default settings
  2. Your project customizes — Overrides specific settings
  3. Wrapper updates — New tool versions, new defaults
  4. Re-run reconciliation — Customizations preserved, new defaults applied

Example Workflow​

# Initial install
npm install @company/datamitsu-config@1.0.0
datamitsu config reconcile

# Customize .eslintrc.js manually
# ... make changes ...

# Months later: wrapper updates
npm update @company/datamitsu-config # Now 2.0.0

# Reconcile managed config changes, then run fix
datamitsu config reconcile

# Your customizations preserved
# New defaults from wrapper applied

What Gets Updated​

  • Tool versions — Automatically updated to wrapper's versions
  • New tools — Added to your project if configured in wrapper
  • Default configs — Merged with your customizations
  • Ignore patterns — Merged with existing patterns

What Gets Preserved​

  • Manual customizations — Changes you made to generated files
  • Project-specific overrides — Settings in datamitsu.config.ts
  • Custom tools — Tools you added locally

Finding Wrapper Packages​

Official Wrappers​

Company Wrappers​

Your company may provide internal wrapper packages:

  • @company/dev-standards — Company-wide tool standards
  • @team/frontend-config — Team-specific configurations
  • @project/shared-config — Project template configurations

Community Wrappers​

Search on npm, rubygems, or pypi for third-party wrappers:

npm search datamitsu

Example: Using shibanet0/datamitsu-config​

Install the reference wrapper:

npm install --save-dev shibanet0/datamitsu-config

Initialize tools, optionally preview managed config changes, then reconcile them:

npx datamitsu init
npx datamitsu config reconcile --dry-run
npx datamitsu config reconcile

This installs and configures:

  • Go tools — golangci-lint
  • TypeScript tools — eslint, prettier, tsc
  • Docker tools — hadolint
  • Shell tools — shellcheck
  • Git hooks — lefthook

All pre-configured with opinionated defaults.

Customize for your project:

/// <reference path=".datamitsu/datamitsu.config.d.ts" />

// datamitsu.config.ts
function getConfig(prev) {
return {
...prev,
apps: {
...prev.apps,
// Use stricter golangci-lint timeout
"golangci-lint": {
...prev.apps["golangci-lint"],
operations: {
lint: {
args: ["run", "--timeout=5m"],
},
},
},
},
};
}

globalThis.getConfig = getConfig;
globalThis.getMinVersion = () => "0.0.1";

Docker Optimization​

Wrapper packages enable powerful Docker caching strategies.

Pre-Cache All Tools​

In your Dockerfile:

FROM node:20-alpine

# Install wrapper globally
RUN npm install -g @company/datamitsu-config

# Download all tools (--all flag)
RUN datamitsu init --all

# This layer is cached until wrapper version changes
# Tools are stored in global cache, available to all projects

# Later: copy your project
COPY . /app
WORKDIR /app

# Install project dependencies
RUN npm install

# Run checks (tools already cached)
RUN datamitsu check

Incremental Updates​

When the wrapper updates:

  • Only changed tools re-download
  • Unchanged tools remain cached in the layer
  • No full re-download on every build

This can reduce CI build times from minutes to seconds.

Troubleshooting​

Wrapper Binary Not Found​

If npx datamitsu doesn't work after installing the wrapper:

# Check if wrapper installed correctly
ls node_modules/@company/datamitsu-config/bin/datamitsu

# Use explicit path
./node_modules/.bin/datamitsu init

# Or install datamitsu globally
npm install -g @datamitsu/datamitsu
datamitsu --before-config node_modules/@company/datamitsu-config/config/datamitsu.config.js init

Tool Versions Conflict​

If the wrapper provides tool versions that conflict with your needs:

/// <reference path=".datamitsu/datamitsu.config.d.ts" />

// Override specific tool version in datamitsu.config.ts
function getConfig(prev) {
return {
...prev,
apps: {
...prev.apps,
"golangci-lint": {
...prev.apps["golangci-lint"],
binary: {
binaries: {
linux: {
amd64: {
glibc: {
url: "https://github.com/golangci/golangci-lint/releases/download/v1.60.0/...",
hash: "sha256:<new-digest>",
contentType: "tar.gz",
binaryPath: "...",
},
},
},
},
},
},
},
};
}

globalThis.getConfig = getConfig;
globalThis.getMinVersion = () => "0.0.1";

Managed Config Files Not Generated​

If datamitsu config reconcile doesn't create expected files:

  1. Check that the wrapper defines files under managedConfigs
  2. Verify you're in a git repository (reconciliation only runs in git repos)
  3. Check project type detection (managed config entries may be conditional)

Cache Issues​

Clear cache if tools behave unexpectedly:

# Clear project cache
datamitsu cache clear

# Clear all project caches
datamitsu cache clear --all

# Clear global store (binaries, runtimes)
datamitsu store clear

Next Steps​

Wrapper packages are the key to datamitsu's value: install once, get everything configured. Build your team's wrapper to set the toolchain up once, for every repository that inherits it.

Explore the reference wrapper​

The reference wrapper @shibanet0/datamitsu-config, 0.0.0-unstable.20260912.f201136, captured on 2026-09-22: 111 apps across six runtime families - native binary 75, Node.js 20, Python 11, JVM 3, Go 1 and Shell 1. These are one maintainer's choices. The orbit is illustrative; colors represent runtime membership.

Read the snapshot as text

Native binary: 75 · Python: 11 · Node.js: 20 · Go: 1 · JVM: 3 · Shell: 1

actionlint (binary) · age (binary) · air (binary) · alint (binary) · allurectl (binary) · ast-grep (binary) · bandit (python) · bearer (binary) · blint (python) · buf (binary) · cargo-deny (binary) · checkmake (binary) · checkov (python) · commitlint (node) · conftest (binary) · conventional-changelog (node) · cosign (binary) · crane (binary) · cspell (node) · d2 (binary) · dasel (binary) · dclint (node) · deptry (python) · detect-secrets (python) · dotenv-linter (binary) · droast (binary) · editorconfig-checker (binary) · eslint (node) · fx (binary) · gcrane (binary) · git-cliff (binary) · gitleaks (binary) · golang-migrate (binary) · golangci-lint (binary) · goose (binary) · govulncheck (go) · grype (binary) · hadolint (binary) · harper-cli (binary) · helm (binary) · jq (binary) · just (binary) · knip (node) · ktfmt (jvm) · ktlint (jvm) · kube-linter (binary) · kubeconform (binary) · kubectl (binary) · lefthook (binary) · lefthook-sort (node) · ls-lint (binary) · lychee (binary) · markdown-link-check (node) · markdownlint-cli2 (node) · mdsf (binary) · mmdc (node) · mypy (python) · openapi-generator (jvm) · osv-scanner (binary) · oxfmt (node) · oxipng (binary) · oxlint (node) · pinact (binary) · pnpm (node) · pre-commit (python) · prettier (node) · protoc (binary) · protolint (binary) · quicktype (node) · ruff (binary) · rustfmt (shell) · scorecard (binary) · semgrep (python) · shellcheck (binary) · shfmt (binary) · slidev (node) · snyk (binary) · sops (binary) · sort-package-json (node) · spectral (node) · sqlc (binary) · sqlfluff (python) · sqruff (binary) · swag (binary) · syft (binary) · syncpack (node) · task (binary) · terraform-docs (binary) · terragrunt (binary) · tflint (binary) · tfupdate (binary) · tofu (binary) · tombi (binary) · trivy (binary) · trufflehog (binary) · tsc (node) · ty (binary) · typos (binary) · typst (binary) · typstyle (binary) · unfuck-ai-comments (binary) · utpm (binary) · vacuum (binary) · vale (binary) · wt (binary) · xh (binary) · yamlfmt (binary) · yamllint (python) · yq (binary) · zensical (python) · zizmor (binary)

datamitsu.config
@shibanet0/datamitsu-config 0.0.0-unstable.20260912.f201136 · Captured 2026-09-22
Open the full atlas ↗

Open the full atlas. See the Config Inspector guide to inspect or embed your own configuration.