npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lg2/datocms-llms-nuxt

v1.0.0

Published

A Nuxt 3 module that automatically generates llms.txt files from DatoCMS content during the build process

Readme

@lg2/datocms-llms-nuxt

A Nuxt 3 module that automatically generates llms.txt files from DatoCMS content during the build process. This module fetches content from DatoCMS using the Content Delivery API, extracts a specified field, and writes it to a public file that can be used for LLM training, documentation, or content discovery.

Features

  • 🔄 Automatically fetches content from DatoCMS during build
  • 📝 Extracts and writes content to llms.txt (or custom path)
  • 🔍 Flexible field extraction from various DatoCMS content structures
  • 📊 Supports DatoCMS Structured Text fields
  • 🌍 Supports multiple DatoCMS environments
  • ⚠️ Graceful error handling with development mode support

Installation

Install the package using your preferred package manager:

# npm
npm install @lg2/datocms-llms-nuxt

# yarn
yarn add @lg2/datocms-llms-nuxt

# pnpm
pnpm add @lg2/datocms-llms-nuxt

Then add it to your nuxt.config.js:

export default defineNuxtConfig({
  modules: [
    '@lg2/datocms-llms-nuxt',
  ],
  datocmsLlms: {
    apiToken: process.env.DATOCMS_API_TOKEN,
    // ... other options
  },
})

Configuration

The module accepts the following configuration options:

| Option | Type | Default | Description | |--------|------|---------|-------------| | apiToken | string | Required | Your DatoCMS API token (from environment variable) | | outputPath | string | 'public/llms.txt' | Relative path where the output file will be written | | fieldName | string | cLlms | The field name to extract from DatoCMS content | | modelName | string | cCommon | The DatoCMS model API key | | environment | string | 'main' | The DatoCMS environment name (defaults to main environment) |

Example Configuration

Fetching a specific record by ID

export default defineNuxtConfig({
  datocmsLlms: {
    apiToken: process.env.DATOCMS_API_TOKEN,
    outputPath: 'public/llms.txt',
    fieldName: 'cLlms',
    modelName: 'cCommon',
    environment: 'main',
  },
})

Fetching the first record with the field from a model type

export default defineNuxtConfig({
  datocmsLlms: {
    apiToken: process.env.DATOCMS_API_TOKEN,
    outputPath: 'public/llms.txt',
    fieldName: 'cLlms',
    modelName: 'cCommon', 
  },
})

How It Works

  1. Build Hook: The module hooks into Nuxt's build:before and Nitro's nitro:build:before hooks
  2. GraphQL Query: Fetches content from DatoCMS's Content Delivery API using GraphQL
  3. Field Extraction: Extracts the specified field from the DatoCMS record:
    • Direct field: record.llms
    • Structured text fields (DatoCMS structured text format)
    • Markdown/text fields
  4. Content Handling: Supports various content formats:
    • Plain strings
    • Structured text (extracts text content from DatoCMS structured text)
    • Markdown fields
  5. File Writing: Writes the extracted content to the specified output path

Environment Variables

Set the following environment variable:

DATOCMS_API_TOKEN=your-datocms-api-token

You can get your API token from your DatoCMS project settings under Settings > API tokens.

DatoCMS Model API Keys

DatoCMS uses model API keys to identify content types in GraphQL queries. These are typically:

  • Lowercase
  • CamelCase for the model name
  • Pluralized for "all" queries (e.g., blogPostallBlogPosts)

To find your model API key:

  1. Go to your DatoCMS project
  2. Navigate to Settings > Models
  3. Click on your model
  4. Check the API identifier field

Error Handling

  • Missing API Token: The module will log a warning and skip generation if DATOCMS_API_TOKEN is not set
  • API Errors: In development mode, errors are logged but don't fail the build. In production, errors will fail the build
  • Missing Field: If the specified field is not found, a warning is logged and the build continues
  • GraphQL Errors: GraphQL query errors are logged with detailed error messages

Use Cases

  • LLM Training: Generate training data files for language models
  • Documentation: Create public documentation files from CMS content
  • Content Discovery: Make site content discoverable by crawlers and AI tools
  • SEO: Provide structured content for search engines and AI assistants

Requirements

  • Nuxt 3.x
  • Node.js >= 18.0.0
  • DatoCMS account with API access

Development

The module uses Nuxt's module system and integrates with:

  • @nuxt/kit for module definition
  • ofetch for API requests
  • Node.js fs module for file operations
  • DatoCMS Content Delivery API (GraphQL)

Troubleshooting

File Not Generated

  1. Check that DATOCMS_API_TOKEN is set correctly
  2. Verify the modelName matches your DatoCMS model API identifier
  3. Ensure the fieldName exists in your DatoCMS model
  4. Check the build logs for error messages

Wrong Content Extracted

  1. Verify the field structure in your DatoCMS content
  2. Check that the field contains the expected data format
  3. For structured text fields, the module extracts plain text from the structured content
  4. Review the extraction logic in the extractLLMsField function

Build Fails in Production

  • Ensure your DatoCMS API token has the correct permissions (read access)
  • Verify the API endpoint is accessible (https://graphql.datocms.com)
  • Check network connectivity during build
  • Verify the model API key is correct (case-sensitive)
  • Ensure the record is published (draft records require draft-enabled tokens)

GraphQL Query Errors

  • Verify your model API key matches exactly (DatoCMS is case-sensitive)
  • Check that the field name exists in your model
  • Ensure your API token has read permissions for the model
  • For environment-specific queries, verify the environment name is correct

DatoCMS API Documentation

For more information about DatoCMS APIs, see:

License

MIT