Package Exports
- @agentmarkup/vite
Readme
@agentmarkup/vite
Build-time llms.txt, JSON-LD, markdown mirrors, AI crawler controls, and validation for Vite websites.
@agentmarkup/vite is the Vite adapter in the agentmarkup package family. Framework-agnostic helpers live in @agentmarkup/core, and Astro sites use @agentmarkup/astro.
Install
pnpm add -D @agentmarkup/viteUsage
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { agentmarkup } from '@agentmarkup/vite';
export default defineConfig({
plugins: [
react(),
agentmarkup({
site: 'https://example.com',
name: 'Example',
description: 'Machine-readable metadata for an example site.',
llmsTxt: {
sections: [
{
title: 'Documentation',
entries: [
{
title: 'Getting Started',
url: '/docs/getting-started',
description: 'Setup guide and first steps',
},
],
},
],
},
markdownPages: {
enabled: true,
},
contentSignalHeaders: {
enabled: true,
},
globalSchemas: [
{
preset: 'webSite',
name: 'Example',
url: 'https://example.com',
},
{
preset: 'organization',
name: 'Example Inc.',
url: 'https://example.com',
logo: 'https://example.com/logo.png',
},
],
pages: [
{
path: '/faq',
schemas: [
{
preset: 'faqPage',
url: 'https://example.com/faq',
questions: [
{
question: 'Do you ship internationally?',
answer: 'Yes.',
},
],
},
],
},
],
aiCrawlers: {
GPTBot: 'allow',
ClaudeBot: 'allow',
PerplexityBot: 'allow',
'Google-Extended': 'allow',
CCBot: 'disallow',
},
validation: {
warnOnMissingSchema: true,
},
}),
],
});What It Does
- Generates
/llms.txtfrom config - Injects JSON-LD into built HTML pages
- Validates JSON-LD already present in page HTML
- Generates
.mdmirrors from the final HTML output - Patches or creates
robots.txtwith AI crawler directives - Patches or creates
_headerswithContent-Signal - Validates common schema and crawler mistakes at build time
- Warns when a page looks like a thin client-rendered HTML shell
- Exposes the same generators and validators for custom prerender or post-build scripts
If the page already contains JSON-LD for a schema type, or the site already ships a curated llms.txt or matching crawler rules, the adapter preserves those by default. Set llmsTxt.replaceExisting or jsonLd.replaceExistingTypes only when you want Vite output to replace existing assets.
Markdown mirrors and _headers follow the same coexistence rule: existing files are preserved unless you opt into replacement with markdownPages.replaceExisting or contentSignalHeaders.replaceExisting.
The adapter assumes Vite controls the final HTML output. If a framework does an additional server-render or prerender pass after Vite finishes, use @agentmarkup/core in that final step or reach for a dedicated adapter instead of assuming JSON-LD injection will carry through automatically.
Presets
webSiteorganizationarticlefaqPageproductoffer
You can also pass custom schema objects with your own @type.
Custom Pipelines
If your site already has a final prerender or post-build step, you can reuse the public helpers instead of maintaining a separate llms.txt or robots.txt implementation.
import {
generateLlmsTxt,
patchRobotsTxt,
generateJsonLdTags,
presetToJsonLd,
validateLlmsTxt,
validateRobotsTxt,
} from '@agentmarkup/vite';
const llms = generateLlmsTxt({
site: 'https://example.com',
name: 'Example',
description: 'Machine-readable metadata for an example site.',
llmsTxt: {
sections: [
{
title: 'Public pages',
entries: [{ title: 'Pricing', url: '/pricing', description: 'Plans and billing' }],
},
],
},
});
const robots = patchRobotsTxt(existingRobotsTxt, {
GPTBot: 'allow',
ClaudeBot: 'allow',
});
const jsonLd = generateJsonLdTags([
presetToJsonLd({ preset: 'webSite', name: 'Example', url: 'https://example.com' }),
]);
const llmsIssues = validateLlmsTxt(llms ?? '');
const robotsIssues = validateRobotsTxt(robots, {
GPTBot: 'allow',
ClaudeBot: 'allow',
});Example Output
@agentmarkup/vite
✓ llms.txt generated (6 entries, 2 sections)
✓ JSON-LD injected into 1 pages
✓ Markdown pages generated (6 files)
✓ robots.txt patched (5 AI crawlers configured)
✓ _headers generated with Content-Signal
No issues foundSee the example app in the GitHub repo at examples/vite-react.
Maintainer
Copyright (c) 2026 Sebastian Cochinescu. MIT License.
Used in production on Anima Felix.
License
MIT.