Skip to content

Base tsconfig for Foxglove projects.

License

Notifications You must be signed in to change notification settings

foxglove/tsconfig

Repository files navigation

@foxglove/tsconfig

npm version

Base tsconfig for Foxglove projects.

Requirements

  • TypeScript v5.8+

Installation

yarn add -D @foxglove/tsconfig

Usage

Choose the config that matches your environment:

Node.js applications and published libraries

Uses module: "NodeNext", which enforces Node.js ESM rules.

Use node.json for published libraries, even if your library will be used in bundled apps. Bundlers consume Node-style packages natively, just remember to avoid Node-specific APIs like fs or process.

Relative imports must include explicit file extensions (e.g., import { foo } from "./bar.ts").

{
  "extends": "@foxglove/tsconfig/node.json",
  "include": ["./src/**/*"],
  "compilerOptions": {
    "rootDir": "./src",
    "outDir": "./dist"
  }
}

Tip

base.json uses target: "ESNext". For published libraries, you may wish to set a lower target (e.g., "ES2022" for Node 18).

Bundled applications (Webpack, Vite, esbuild, etc)

Uses module: "Preserve", which enables optimizations for code consumed directly by a bundler.

Supports extensionless relative imports (e.g., import { foo } from "./bar").

{
  "extends": "@foxglove/tsconfig/bundler.json",
  "include": ["./src/**/*"],
  "compilerOptions": {
    "noEmit": true,
    "lib": ["ESNext", "DOM"]
  }
}

Base config

Provides strict type-checking and modern defaults, but no module or moduleResolution settings. Use this when node.json and bundler.json don't fit your environment:

{
  "extends": "@foxglove/tsconfig/base.json",
  "compilerOptions": {
    "module": "...",
    "moduleResolution": "..."
  }
}

License

MIT License

Releasing

tag=$(npm version minor) && echo "$tag"
git push && git push origin "$tag"

About

Base tsconfig for Foxglove projects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •