# OpenWork Linting and Formatting Tools: ESLint and Prettier Configuration Guide

> Configure ESLint and Prettier for static code analysis and formatting in the OpenWork project. Streamline your TypeScript development with these essential linting tools.

- Repository: [Different AI/openwork](https://github.com/different-ai/openwork)
- Tags: how-to-guide
- Published: 2026-08-20

---

**OpenWork uses ESLint for static code analysis and Prettier for automatic code formatting, with ESLint 3.8.3 locked in pnpm-lock.yaml and extensive ESLint directives throughout the TypeScript codebase.**

The openwork repository from different-ai enforces code quality through a two-tool approach common in modern TypeScript monorepos. This guide examines how these tools are configured, where evidence appears in source files, and how to run them in your local environment.

## ESLint: Static Analysis Across the Monorepo

OpenWork relies on **ESLint** as its primary linting tool. Evidence appears throughout the codebase in the form of directive comments that suppress or configure rules for specific lines.

### ESLint Directives in Source Files

Thousands of `// eslint-disable-*` comments appear across the TypeScript source tree. These directives surface in:

- Core library code including Zod type validation ([`dev/.opencode/node_modules/zod/src/v3/ZodError.ts`](https://github.com/different-ai/openwork/blob/main/dev/.opencode/node_modules/zod/src/v3/ZodError.ts))
- OpenWork UI components and application packages
- Generated and third-party code merged into the workspace

The prevalence of these directives indicates a project-wide ESLint configuration extending standard TypeScript and Next.js rule sets.

### Running ESLint

Execute ESLint across the entire workspace with this command:

```bash
pnpm exec eslint . --ext .ts,.tsx,.js,.jsx

```

For package-scoped linting, navigate to individual package directories where discrete ESLint configurations may exist.

## Prettier: Consistent Code Formatting

OpenWork locks **Prettier 3.8.3** as its formatting engine. This version appears explicitly in [`pnpm-lock.yaml`](https://github.com/different-ai/openwork/blob/main/pnpm-lock.yaml)【pnpm-lock.yaml】, ensuring reproducible formatting across all development environments.

### Prettier Version Verification

The lockfile entry confirms the exact package version installed for the monorepo. This deterministic approach prevents formatting drift between contributor machines and CI pipelines.

### Running Prettier

Format all source files in the workspace:

```bash
pnpm exec prettier --write .

```

Format a specific new file before committing:

```bash
echo "export const foo = 42;" > src/foo.ts
pnpm exec prettier --write src/foo.ts

```

## Key Configuration Files

| File | Purpose |
|------|---------|
| [`pnpm-lock.yaml`](https://github.com/different-ai/openwork/blob/main/pnpm-lock.yaml) | Locks `prettier@3.8.3` in the dependency tree |
| `packages/@openwork/app/.eslintrc.json` | Package-level ESLint configuration (typical location) |
| `packages/@openwork/app/.prettierrc.json` | Package-level Prettier formatting rules (typical location) |
| Source file ESLint directives | Inline rule suppression and configuration |

## Integration in the Development Workflow

ESLint and Prettier serve complementary roles in openwork's quality pipeline:

- **ESLint** catches **bugs, anti-patterns, and style violations** through static analysis
- **Prettier** **automatically reformats code** to eliminate debates about indentation, quote style, and line length

Together they enforce consistency without manual intervention. The pnpm workspace structure allows per-package customization while inheriting shared base rules.

## Summary

- **ESLint** provides static analysis with extensive directive comments visible across the TypeScript codebase
- **Prettier 3.8.3** is locked in [`pnpm-lock.yaml`](https://github.com/different-ai/openwork/blob/main/pnpm-lock.yaml) for deterministic formatting
- **pnpm commands** execute both tools: `pnpm exec eslint` and `pnpm exec prettier`
- **Package-level configs** in `packages/@openwork/app/` extend shared monorepo rules
- **No root config file visible** in analysis—configuration likely distributed across workspace packages

## Frequently Asked Questions

### What version of Prettier does openwork use?

OpenWork locks **Prettier 3.8.3** as recorded in [`pnpm-lock.yaml`](https://github.com/different-ai/openwork/blob/main/pnpm-lock.yaml). This version is installed consistently across all workspace packages through the pnpm monorepo structure.

### Where is the ESLint configuration file in openwork?

The analysis did not reveal a root ESLint configuration file. ESLint configuration likely exists at the **package level**—for example, in `packages/@openwork/app/.eslintrc.json`—with each package extending shared base rules for the monorepo's TypeScript and Next.js standards.

### How do I run linting and formatting in openwork?

Use pnpm to execute both tools:

```bash
pnpm exec eslint . --ext .ts,.tsx,.js,.jsx
pnpm exec prettier --write .

```

Run these from the workspace root to process all packages, or navigate to individual package directories for scoped execution.

### Does openwork use ESLint and Prettier together?

Yes. **ESLint handles static analysis** for code quality and potential bugs, while **Prettier handles purely stylistic formatting**. This separation prevents conflicting rules and allows each tool to specialize—ESLint for correctness, Prettier for presentation.