Configuration 
Atscript uses a configuration file to control parsing, validation, and code generation. This configuration is automatically picked up by:
- VSCode extension - For enhanced IntelliSense and real-time validation
 - Build tools - When using 
unplugin-atscriptwith Vite, Rollup, Rolldown, etc. - CLI - When running 
asccommands 
Configuration File 
Create atscript.config.js in your project root. Supported formats:
atscript.config.js- CommonJSatscript.config.mjs- ESM moduleatscript.config.ts- TypeScript (requires tsx/ts-node)atscript.config.mts- TypeScript ESM
Basic Example 
// atscript.config.js
import { defineConfig } from '@atscript/core'
import ts from '@atscript/typescript'
export default defineConfig({
  rootDir: 'src',
  format: 'dts',
  unknownAnnotation: 'warn',
  plugins: [ts()]
})defineConfig Helper 
The defineConfig helper provides type checking and IntelliSense:
import { defineConfig } from '@atscript/core'
export default defineConfig({
  // Full type checking and autocomplete
})Configuration Options 
Input Options 
rootDir 
- Type: 
string - Required: Yes
 - Description: Root directory containing 
.asfiles 
rootDir: 'src'  // Look for .as files in src/entries 
- Type: 
string[] - Default: All 
.asfiles in rootDir - Description: Specific entry files to process
 
entries: ['types/user.as', 'types/product.as']include 
- Type: 
string[] - Default: 
['**/*.as'] - Description: Glob patterns for files to include
 
include: ['**/*.as', '!**/*.test.as']exclude 
- Type: 
string[] - Default: 
['**/node_modules/**'] - Description: Glob patterns for files to exclude
 
exclude: ['**/temp/**', '**/*.draft.as']unknownAnnotation 
- Type: 
'allow' | 'warn' | 'error' - Default: 
'error' - Description: How to handle unknown annotations
 
unknownAnnotation: 'allow'  // Accept any annotation
unknownAnnotation: 'warn'   // Warn but continue
unknownAnnotation: 'error'  // Treat as error (strict)primitives 
- Type: 
Record<string, PrimitiveConfig> - Description: Custom primitive types and extensions
 
primitives: {
  string: {
    extensions: {
      url: {
        type: 'string',
        documentation: 'URL format',
        expect: {
          pattern: ['^https?://.+$', '', 'Invalid URL']
        }
      }
    }
  }
}annotations 
- Type: 
AnnotationsTree - Description: Custom annotation definitions
 
import { AnnotationSpec } from '@atscript/core'
annotations: {
  ui: {
    hidden: new AnnotationSpec({
      description: 'Hide field in UI',
      nodeType: ['prop']
    })
  }
}plugins 
- Type: 
Plugin[] - Description: Active plugins for code generation
 
import ts from '@atscript/typescript'
import mongo from '@atscript/mongo'
plugins: [
  ts(),
  mongo({ syncIndexes: true })
]Output Options 
format 
- Type: 
string - Default: 
'dts' - Description: Output format that plugins should generate
 
format: 'dts'   // TypeScript plugin: Generate .d.ts files
format: 'js'    // TypeScript plugin: Generate .js files with metadata
format: 'py'    // Python plugin (hypothetical): Generate .py filesThe format is an open string field - each plugin decides which formats to support:
- @atscript/typescript: Supports 
'dts'and'js' - Other plugins define their own supported formats
 
Format Usage
- VSCode extension: Uses this setting to determine what files to generate on save
 - asc CLI: Uses this setting by default (overridden by 
-fflag if provided) - unplugin-atscript: Ignores this setting (always generates what the bundler needs)
 
outDir 
- Type: 
string - Default: Same as source directory
 - Description: Output directory for generated files
 
outDir: 'dist'  // Output to dist/ instead of source locationComplete Example 
// atscript.config.js
import { defineConfig, AnnotationSpec } from '@atscript/core'
import ts from '@atscript/typescript'
import mongo from '@atscript/mongo'
export default defineConfig({
  // Input configuration
  rootDir: 'src',
  entries: undefined,  // Process all .as files
  include: ['**/*.as'],
  exclude: ['**/*.test.as', '**/drafts/**'],
  // Validation
  unknownAnnotation: 'warn',
  // Custom primitives
  primitives: {
    string: {
      extensions: {
        objectId: {
          type: 'string',
          documentation: 'MongoDB ObjectId',
          expect: {
            pattern: ['^[0-9a-f]{24}$', 'i', 'Invalid ObjectId']
          }
        }
      }
    }
  },
  // Custom annotations
  annotations: {
    api: {
      endpoint: new AnnotationSpec({
        description: 'API endpoint path',
        argument: {
          name: 'path',
          type: 'string'
        }
      }),
      method: new AnnotationSpec({
        description: 'HTTP method',
        argument: {
          name: 'verb',
          type: 'string',
          values: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH']
        }
      })
    }
  },
  // Plugins
  plugins: [
    ts({
      // TypeScript plugin options
    }),
    mongo({
      // MongoDB plugin options
      syncIndexes: true,
      connectionUrl: process.env.MONGO_URL
    })
  ],
  // Output configuration
  format: 'js',  // Generate JavaScript with metadata
  outDir: undefined  // Output alongside source files
})TypeScript Configuration 
For TypeScript config files (atscript.config.ts):
// atscript.config.ts
import { defineConfig } from '@atscript/core'
import ts from '@atscript/typescript'
export default defineConfig({
  rootDir: 'src',
  plugins: [ts()]
  // Full type checking and autocomplete provided by defineConfig
})Or without defineConfig (manually typed):
// atscript.config.ts
import type { TAtscriptConfig } from '@atscript/core'
import ts from '@atscript/typescript'
const config: TAtscriptConfig = {
  rootDir: 'src',
  plugins: [ts()]
}
export default configIntegration Points 
VSCode Extension 
The VSCode extension automatically:
- Detects configuration file changes
 - Updates IntelliSense for annotations
 - Validates annotations in real-time
 - Generates files based on format setting
 - Applies unknownAnnotation rules
 
Build Tools (unplugin-atscript) 
When using unplugin-atscript with Vite, Rollup, or Rolldown:
- Reads the configuration file
 - Applies all plugins defined in the config
 - Processes files according to include/exclude patterns
 - Generates output based on format settings
 - Respects all custom primitives and annotations
 
// vite.config.js
import atscript from 'unplugin-atscript'
export default {
  plugins: [
    atscript.vite()  // Uses atscript.config.js automatically
  ]
}Config File Lookup 
VSCode Extension 
Looks for the nearest config file starting from the .as file location:
- Check the folder containing the 
.asfile - Check parent folder
 - Continue up the directory tree until workspace root is reached
 
Build Tools (unplugin-atscript) 
Similar lookup strategy:
- Start from the 
.asfile location - Search upward through parent directories
 - Stop at current working directory (cwd)
 
This allows for monorepo setups where different packages can have their own Atscript configurations.
Loading Priority 
When multiple config formats exist in the same directory:
atscript.config.ts/atscript.config.mtsatscript.config.js/atscript.config.mjs- Default configuration if no file found
 
Next Steps 
- Build Setup - Integrate with build tools
 - Quick Start - Complete setup guide