---
title: "Automatic extraction"
description: "Learn which JSX text and attributes become stable manifest messages during a build."
canonical_url: "https://docs.linguana.dev/docs/advanced/testing/automatic-text-discovery"
markdown_url: "https://docs.linguana.dev/docs/advanced/testing/automatic-text-discovery.md"
x_farming_labs_generated_preamble: true
---

# Automatic extraction
URL: /docs/advanced/testing/automatic-text-discovery
LLM index: /llms.txt
Description: Learn which JSX text and attributes become stable manifest messages during a build.

# Automatic text discovery

> Advanced reference for Linguana contributors and beta evaluators.

The Vite plugin parses JSX and TSX, transforms eligible content into runtime lookups, and writes source metadata to `.linguana/manifest.json`. It never writes back to input files.

## Eligible copy

```tsx
export function Checkout() {
  return <button title="Complete purchase">Pay securely</button>;
}
```

Literal JSX children are extracted. Literal `title`, `placeholder`, `aria-label`, `alt`, `label`, and button `value` attributes are allowed. Every record includes repository-relative location, source, normalized text, placeholders, context, content hash, confidence, and stable ID.

Whitespace-only formatting changes preserve identity. Changing semantic context or an explicit ID can produce a new identity.

## Build and inspect

```bash
bun run build
  bunx biome format .linguana/manifest.json
```

<ExpectedResult>
Messages are sorted by ID, locations point to their JSX source, and source files remain byte-for-byte unchanged.
</ExpectedResult>

## Verify source integrity

Use the repository’s guarded check around a build:

```bash
bun run source:before
bun run build
bun run source:after
```

## Common failures

If expected copy is absent, confirm it is literal, visible, inside included files, and not in an excluded subtree. Dynamic or rich content should use [dynamic text and links](/docs/build-with-code/dynamic-text-and-links); do not weaken exclusions globally.

## Next

Read [Keep product text and code separate](/docs/build-with-code/text-and-code), then use the [compiler reference](/docs/reference/compiler).

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
Docs-scoped sitemap: [/docs/sitemap.md](/docs/sitemap.md).
Well-known sitemap: [/.well-known/sitemap.md](/.well-known/sitemap.md).
