---
title: "Tooling packages"
description: "@vinicunca/vite-config, tsconfig, node-utils, and commitlint-config — published 1.0.1 from the Taman repo."
canonical_url: "https://vinicunca.dev/taman/packages/tooling"
---
# Tooling packages

> @vinicunca/vite-config, tsconfig, node-utils, and commitlint-config — published 1.0.1 from the Taman repo.

These live under `internal/` in the source repo and are installed from npm in generated projects. All **1.0.1**.

## `@vinicunca/vite-config`

Opinionated Vite config for Vue apps and libraries. Peers: `vite` ^8, `unocss` ^66 (you own `uno.config.ts`).

```ts
import { defineConfig } from '@vinicunca/vite-config';

export default defineConfig(async () => ({
  application: {
    licenseOptions: { copyright: 'Copyright (C) 2026 Acme' },
    printInfoMap: { Docs: 'https://vinicunca.dev/taman' },
  },
  vite: {
    server: { warmup: { clientFiles: ['./src/main.ts'] } },
  },
}));
```

`defineConfig` uses **application** mode when `index.html` exists, otherwise **library**. Pass `'application' | 'library'` as the second argument to force it. The `vite` object is `mergeConfig`'d last (arrays such as `server.warmup.clientFiles` are **appended**).

### Application options

Precedence: package defaults → env vars → `application`. Boolean env flags are **false when unset**.

| Option | Default | Notes |
| --- | --- | --- |
| `archiver` / `archiverPluginOptions` | env `VITE_ARCHIVER` | Zip `dist` |
| `compress` / `compressTypes` | env `VITE_COMPRESS` | `gzip`, `brotli` |
| `devtools` | env `VITE_DEVTOOLS` | Vue DevTools, dev only |
| `extraAppConfig` | `true` | Build only; runtime `_TAMAN_ADMIN_DEV_CONFIG_` |
| `html` | `true` | html-minifier-terser |
| `i18n` | `true` | `@intlify/unplugin-vue-i18n`, composition-only |
| `importmap` / `importmapOptions` | off | CDN for vue/pinia/vue-router/vue-demi |
| `injectAppLoading` | env `VITE_INJECT_APP_LOADING` | `./loading.html` or bundled default |
| `injectMetadata` | `true` | `__TAMAN_METADATA__`, `import.meta.env.VITE_APP_VERSION` |
| `license` / `licenseOptions` | `true` | Banner; fields fall back to package.json |
| `print` / `printInfoMap` | dev only | Extra lines under URLs |
| `pwa` / `pwaOptions` | env `VITE_PWA` | Manifest name from `VITE_APP_TITLE` |
| `visualizer` | env `VITE_VISUALIZER` | rollup-plugin-visualizer |

Other env: `VITE_BASE` (default `/`), `VITE_PORT` (default `5173`), `VITE_APP_TITLE`, `VITE_APP_NAMESPACE`. Loaded from `.env`, `.env.local`, `.env.[mode]`, `.env.[mode].local`.

Runtime contracts: `window._TAMAN_ADMIN_DEV_CONFIG_`, `__TAMAN_METADATA__`, loading-screen `data-app-loading` + preferences theme key. Full detail is in `internal/vite-config/README.md`.

### Library options

Builds `src/index.ts` → `dist/index.mjs`, externalizes `dependencies` and `peerDependencies`. Options: `dts` (default `false`), `injectMetadata`, `devtools`, `visualizer`.

## `@vinicunca/tsconfig`

JSON presets (no JS runtime):

| File | Use |
| --- | --- |
| `base.json` | Strict ESNext, `verbatimModuleSyntax`, `skipLibCheck: true`, `${configDir}` excludes |
| `web.json` | Vue JSX, DOM libs, `vite/client`, `declaration: false` |
| `library.json` | Like web but `declaration: true`, `noEmit: false` |
| `node.json` | `NodeNext` / `NodeNext` |
| `node-bundler.json` | `ESNext` + bundler resolution, `@types/node` |

```json
{ "extends": "@vinicunca/tsconfig/web.json" }
```

## `@vinicunca/node-utils`

Node helpers for tooling (not the Vue app):

```ts
formatNow();
ensureFile / outputJSON / readJSON;
getStagedFiles();
generatorContentHash(content);
findMonorepoRoot();
getPackages() / getPackagesSync();
toPosixPath(path);
UNICODE;
colors; // chalk
consola;
execa;
fs; // node:fs/promises
readPackageJSON();
```

## `@vinicunca/commitlint-config`

```ts
import { defineConfig } from '@vinicunca/commitlint-config';

export default defineConfig(); // or defineConfig({ cwd, scopes })
```

Peers: `@commitlint/cli` ^21; optional `czg`. Taman's `.commitlintrc.js` re-exports the default.

- Extends `@commitlint/config-conventional`
- `function-rules/scope-enum`: workspace package names (full and unscoped short form) plus `project`, `style`, `lint`, `ci`, `dev`, `deploy`, `other`
- Types: `feat`, `fix`, `perf`, `style`, `docs`, `test`, `refactor`, `build`, `ci`, `chore`, `revert`, `types`, `release`
- Header max 108; body leading blank required
- cz-git aliases: `:b` bump deps, `:c` chore config, `:f` docs typos, `:r` README, `:s` format

---

- [GitHub](https://github.com/vinicunca/taman/tree/main/internal)


## Sitemap

See the full [sitemap](https://vinicunca.dev/sitemap.md) for all pages.
