Configuration

FileConcat keeps its output and filtering choices in a few places: the result screen (the output format), the Adjust what's included drawer (filtering and cost knobs), and localStorage (the defaults that survive a page reload). This page documents each one in the order you encounter it.

Output controls on the result screen

Once your file is ready, the result screen carries the output format choice.

Format is a segmented control offering XML, Markdown, or Plain. XML wraps each file in named tags (recommended for Claude); Markdown uses fenced code blocks (recommended for assistants that emit Markdown themselves); Plain concatenates the files with lightweight separators and no markup.

The Adjust what's included drawer

The Adjust what's included button in the result screen's top bar opens a drawer titled "Fine-tune the output." Everything in it updates the bundle live; you never have to touch any of it.

  • Quick presets rewrite both pattern fields in one click for a common stack: React / Next, Vue, Python, Go, Rust, Source only, and Docs only.
  • Ignore and Only include are the two glob textareas. Ignore carries the default list (the same one the CLI uses); Only include is empty by default and acts as an exclusive whitelist when filled. See File filtering for the pattern syntax.
  • The file tree gives every file a checkbox. Auto-skipped noise (binaries, oversize files, and pattern-excluded files) shows dimmed.
  • Cost estimate pairs a model selector with the dollar estimate for the current token count. See Token estimation for how the model list is built.

Line numbers are off, and the drawer does not expose a toggle for them. The engine can prefix every line with its 1-based number (addLineNumbers in packages/core/src/file-processing/transform.ts), and the preference persists in your config, but it is not currently a UI control. See Token costs for why it is an expensive option.

A per-file size limit still applies at ingestion: files larger than the configured maximum (maxFileSizeMB, default 32) are excluded from the output. It is a persisted value rather than a drawer control.

Persistent configuration

The full UserConfig shape lives in apps/web/src/hooks/use-config.ts and is persisted under the fileconcat-config localStorage key. The fields that survive across sessions:

  • includePatterns and ignorePatterns (your textareas)
  • maxFileSizeMB
  • showLineNumbers
  • outputStyle (xml, markdown, or plain)
  • defaultSourceType and autoSwitchSource

The store carries a version field. When the app loads, anything older than the current version is run through migrateConfig and the upgraded shape is written back. You do not take action; the migration is silent.

CLI configuration

The CLI keeps its own configuration layer documented in CLI usage, including the --config flag and the FileConcatConfig shape that file accepts.