> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meow.style/llms.txt
> Use this file to discover all available pages before exploring further.

# Project layout

> The files meow reads and generates — what to commit, what to ignore, and why the shadow config exists.

A meow project has a small, legible footprint. You edit two files; meow generates
the rest as derived artifacts you never hand-edit.

## A scaffolded project

```text theme={null}
hello-meow/
├── meow.config.json      # ← you edit: runtime behavior & toolchain config
├── package.json          # ← you edit: dependencies, scripts, metadata
├── meow.lock.jsonl       # generated: the resolved dependency graph (commit it)
├── main.ts               # your code
├── tsconfig.json         # generated shim: { "extends": "./.meow/tsconfig.json" }
├── .meow/                # generated shadow config (gitignored)
│   ├── tsconfig.json     #   the real tsconfig tsc/editors consume
│   ├── strict-web.d.ts   #   ambient types for the strict-web globals
│   └── types/meow/       #   declarations for meow:http, meow:ui, …
└── node_modules/         # materialized dependencies (gitignored)
    └── .meow/            #   content-addressed package store + edge links
```

## What to commit

<CardGroup cols={2}>
  <Card title="Commit these" icon="circle-check" color="#98FF98">
    * `meow.config.json` — your one config file
    * `package.json` — dependency authority
    * `meow.lock.jsonl` — the exact resolved graph
    * `tsconfig.json` — the one-line shim (so editors resolve types on clone)
    * your source files
  </Card>

  <Card title="Ignore these" icon="circle-xmark" color="#FF5C72">
    * `.meow/` — regenerated by `meow sync`
    * `node_modules/` — regenerated by `meow install`

    A meow-aware `.gitignore` lists `/.meow/` and `node_modules/`.
  </Card>
</CardGroup>

## The files you edit

<AccordionGroup>
  <Accordion title="meow.config.json — runtime & toolchain behavior" icon="gear">
    A single closed-schema config that sets your [mode](/concepts/modes), lint rules,
    formatter style, type strictness, and workspace globs. It replaces the usual
    pile of `.eslintrc` / `.prettierrc` / test configs. Full reference:
    [meow.config.json](/configuration/meow-config).
  </Accordion>

  <Accordion title="package.json — the dependency authority" icon="box">
    Your standard, npm-compatible manifest. meow reads `dependencies`,
    `devDependencies`, `peerDependencies`, `overrides`, `scripts`, and `workspaces`.
    It only ever **writes** the dependency sections, on `add`/`remove`/`install <pkg>` —
    your scripts and metadata are yours. Reference: [package.json](/configuration/package-json).
  </Accordion>
</AccordionGroup>

## The generated shadow config

Editors, language servers, and `tsc` are hardwired to look for a `tsconfig.json`.
Rather than make you maintain one, meow **generates** it:

* `.meow/tsconfig.json` is the real config, derived from your `meow.config.json`.
  It sets the strict-web-correct compiler options (`module: esnext`,
  `moduleResolution: bundler`, `verbatimModuleSyntax`, `erasableSyntaxOnly`,
  `noEmit`, `lib: ["esnext"]`) and wires up the `meow:*` and ambient web types.
* `tsconfig.json` at the root is a one-line shim — `{ "extends": "./.meow/tsconfig.json" }` —
  committed so a fresh clone gets working editor types immediately.

Regenerate the shadow whenever you change `meow.config.json`:

```bash theme={null}
meow sync
```

`meow sync` rewrites `.meow/tsconfig.json`, `.meow/strict-web.d.ts`, the bundled
`meow:*` declarations under `.meow/types/meow/`, and the root `tsconfig.json` shim.
It never touches your `package.json`.

<Note>
  Because `.meow/` is byte-stable for the same input, regenerating it produces no
  spurious diffs. It's safe to delete and rebuild at any time — which is exactly
  why it's gitignored.
</Note>

## The global store

Outside your project, meow keeps one global tree at `~/.meow` (relocatable via
`MEOW_HOME`). Packages download **once** into the content-addressed cache there and
project into each workspace's `node_modules` via copy-on-write or hardlinks — so a
package shared by ten projects occupies disk once. See
[node\_modules & materialization](/package-manager/node-modules).

<Card title="Next: the configuration reference" icon="file-code" href="/configuration/meow-config">
  Every key in meow\.config.json.
</Card>
