# Technical Documentation: adonisjs/core

> ℹ️ **Provenance:** In-Tree Documentation (12 Chapters) · [CodeWiki Reference](https://codewiki.google/github.com/adonisjs/core) · Recency: Active (< 180 days)

## File: README.md

# @adonisjs/core

**Featured sponsors**



|  |  |
| --- | --- |
|  |  |
|  |  |





<hr>












[gh-workflow-image]: https://img.shields.io/github/actions/workflow/status/adonisjs/core/checks.yml?label=Tests&style=for-the-badge
[gh-workflow-url]: https://github.com/adonisjs/core/actions/workflows/checks.yml 'Github action'
[npm-image]: https://img.shields.io/npm/v/@adonisjs/core/latest.svg?style=for-the-badge&logo=npm
[npm-url]: https://www.npmjs.com/package/@adonisjs/core/v/latest 'npm'
[typescript-image]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge&logo=typescript
[license-url]: LICENSE.md
[license-image]: https://img.shields.io/github/license/adonisjs/adonis-framework?style=for-the-badge

---

## File: funding.json

{
  "version": "v1.0.0",
  "entity": {
    "type": "individual",
    "role": "owner",
    "name": "Harminder Virk",
    "email": "virk@adonisjs.com",
    "description": "Hi 👋 I'm Harminder Virk, the creator of a family of open-source tools loved by the Node.js community — including AdonisJS, VineJS, Japa, Edge, Lucid ORM, and Youch.\n\nI pour my heart into building tools that make developers' lives easier — from crafting elegant APIs to sweating the little details that improve your everyday workflow. My goal is to provide you with strong, reliable building blocks, so you can focus on shipping great products instead of fighting with your stack.\n\nBy sponsoring my work, you're helping me keep these projects fast, stable, and well-maintained, while also making room for new ideas that could become your next favorite tool. ❤️\n\nCurrent focus\n\n- AdonisJS v7\n- Improving E2E type-safety in AdonisJS applications\n- Isomorphic VineJS (Validation library)\n- Lucid Rewrite (ORM)\nAdonisJS Plus (Sponsors can access Plus at a discounted rate)",
    "webpageUrl": {
      "url": "https://adonisjs.com"
    }
  },
  "projects": [
    {
      "guid": "adonisjs",
      "name": "AdonisJS",
      "description": "AdonisJS is a fully typed TypeScript framework that includes everything you need to build robust applications. ORM, authentication, caching, rate limiter, file uploads, and support for testing - all in a single cohesive package",
      "webpageUrl": {
        "url": "https://adonisjs.com"
      },
      "repositoryUrl": {
        "url": "https://github.com/adonisjs/core"
      },
      "licenses": ["MIT"],
      "tags": [
        "web-framework",
        "batteries-included",
        "fullstack",
        "typescript",
        "nodejs",
        "javascript"
      ]
    },
    {
      "guid": "japa",
      "name": "Japa",
      "description": "Japa is a testing framework for Node.js that focuses primarily on testing backend applications. Japa does not require using any build tools and is significantly smaller and faster than Jest and Vitest",
      "webpageUrl": {
        "url": "https://japa.dev"
      },
      "repositoryUrl": {
        "url": "https://github.com/japa/runner"
      },
      "licenses": ["MIT"],
      "tags": ["testing", "nodejs", "typescript", "javascript"]
    },
    {
      "guid": "vinejs",
      "name": "VineJS",
      "description": "VineJS is a fast and type-safe validation library for Node.js, designed for validating form data and JSON payloads. It offers 50+ built-in rules, 12 schema types, customizable error messages, and first-class support for extending with custom rules or schema types — all while being one of the fastest libraries in the Node.js ecosystem.",
      "webpageUrl": {
        "url": "https://vinejs.dev"
      },
      "repositoryUrl": {
        "url": "https://github.com/vinejs/vine"
      },
      "licenses": ["MIT"],
      "tags": ["validation", "validator", "javascript", "nodejs", "typescript"]
    },
    {
      "guid": "edgejs",
      "name": "EdgeJS",
      "description": "Edge is a simple, Modern, and batteries included template engine for Node.js. In the age of frontend frameworks, Edge allows you to embrace the simplicity of server-side templates.",
      "webpageUrl": {
        "url": "https://edgejs.dev"
      },
      "repositoryUrl": {
        "url": "https://github.com/edge-js/edge"
      },
      "licenses": ["MIT"],
      "tags": ["templating", "template-engine", "nodejs", "javascript"]
    },
    {
      "guid": "youch",
      "name": "Youch",
      "description": "Youch is an error-parsing library that pretty prints JavaScript errors on a web page or the terminal.",
      "webpageUrl": {
        "url": "https://github.com/poppinss/youch"
      },
      "repositoryUrl": {
        "url": "https://github.com/poppinss/youch"
      },
      "licenses": ["MIT"],
      "tags": ["error-parser", "error-printer", "pretty-print", "javascript", "typescript"]
    }
  ],
  "funding": {
    "channels": [
      {
        "guid": "gh-sponsors",
        "type": "payment-provider",
        "address": "https://github.com/sponsors/thetutlage",
        "description": "Support me through GitHub Sponsors"
      },
      {
        "guid": "my-paypal",
        "type": "payment-provider",
        "address": "https://paypal.me/adonisjs",
        "description": "Support me through Paypal. Supports various payment options"
      }
    ],
    "plans": [
      {
        "guid": "fan",
        "status": "active",
        "name": "AdonisJS fan",
        "description": "You have directly benefited from my work and want to support me continue working on AdonisJS and other related packages.",
        "amount": 5,
        "currency": "USD",
        "frequency": "monthly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "insiders-individual",
        "status": "active",
        "name": "Insiders program - Individual",
        "description": "All sponsors under this tier are automatically invited to the Insiders program, which provides them with exclusive benefits.\n\n- Open-source packages: Gain early access to alpha release packages with complete documentation, allowing you to provide feedback and influence features before public release.\n- Example projects: Get early access to the source code of production-ready example apps built using AdonisJS. Ask questions around the design decisions, or contribute features to it.",
        "amount": 19,
        "currency": "USD",
        "frequency": "monthly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "insiders-team",
        "status": "active",
        "name": "Insiders program - Teams",
        "description": "Access to Insiders benefits for your entire team (upto 10 members). Along with that you will have access to the following benefits\n\n- Prominent logo placement on the AdonisJS website homepage\n- Featured announcement across AdonisJS social and newsletter channels\n- Thank-you highlight on AdonisJS social channels",
        "amount": 499,
        "currency": "USD",
        "frequency": "monthly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "community",
        "status": "active",
        "name": "Community Sponsor",
        "description": "Community Sponsors are companies and teams who use AdonisJS and want to give back to the tools they depend on. Every contribution helps sustain development and community support.\n\nBenefits:\n\n- Prominent logo placement on the AdonisJS website homepage\n- Thank-you highlight on AdonisJS social channels",
        "amount": 1000,
        "currency": "USD",
        "frequency": "yearly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "core",
        "status": "active",
        "name": "Core Sponsor",
        "description": "Core Sponsors ensure AdonisJS continues to grow and remain dependable for production use. Their support directly funds ongoing maintenance and new integrations.\n\nBenefits:\n\n- Prominent logo placement on the AdonisJS website homepage\n- Featured announcement across AdonisJS social and newsletter channels\n- Thank-you highlight on AdonisJS social channels",
        "amount": 5000,
        "currency": "USD",
        "frequency": "yearly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "prime",
        "status": "active",
        "name": "Prime Sponsor",
        "description": "Prime Sponsors help maintain the momentum behind AdonisJS, supporting consistent releases, improvements, and ecosystem maintenance.\n\nBenefits:\n\n- Logo featured on the AdonisJS sponsor page\n- Mention in annual sponsor announcement post\n- Invitations to private feedback sessions and early previews\n- Thank-you highlight on AdonisJS social channels",
        "amount": 10000,
        "currency": "USD",
        "frequency": "yearly",
        "channels": ["gh-sponsors", "my-paypal"]
      },
      {
        "guid": "divine",
        "status": "active",
        "name": "Divine Sponsor",
        "description": "Divine Sponsors play a foundational role in keeping the AdonisJS ecosystem strong and evolving. Their support enables full-time open-source work, new feature development, and community initiatives.\n\nBenefits:\n\n- Prominent logo placement on the AdonisJS website homepage\n- Featured announcement across AdonisJS social and newsletter channels\n- Priority access to roadmap insights and private technical sessions\n- Option to collaborate on ecosystem initiatives",
        "amount": 25000,
        "currency": "USD",
        "frequency": "yearly",
        "channels": ["gh-sponsors", "my-paypal"]
      }
    ],
    "history": []
  }
}

---

## File: LICENSE.md

# The MIT License

Copyright 2022 Harminder Virk, contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

---

## File: package.json

{
  "name": "@adonisjs/core",
  "description": "Core of AdonisJS",
  "version": "7.6.0",
  "engines": {
    "node": ">=24.0.0"
  },
  "main": "build/index.js",
  "type": "module",
  "files": [
    "build",
    "!build/bin",
    "!build/tests"
  ],
  "bin": {
    "adonis-kit": "./build/toolkit/main.js"
  },
  "exports": {
    ".": "./build/index.js",
    "./commands": "./build/commands/main.js",
    "./commands/*": "./build/commands/*.js",
    "./factories": "./build/factories/core/main.js",
    "./factories/*": "./build/factories/*.js",
    "./types": "./build/src/types.js",
    "./types/*": "./build/types/*.js",
    "./services/*": "./build/services/*.js",
    "./providers/*": "./build/providers/*.js",
    "./helpers": "./build/src/helpers/main.js",
    "./helpers/*": "./build/src/helpers/*.js",
    "./ignitor": "./build/src/ignitor/main.js",
    "./generators": "./build/src/assembler_hooks/index_entities.js",
    "./ace": "./build/modules/ace/main.js",
    "./ace/codemods": "./build/modules/ace/codemods.js",
    "./bodyparser": "./build/modules/bodyparser/main.js",
    "./bodyparser_middleware": "./build/modules/bodyparser/bodyparser_middleware.js",
    "./hash": "./build/modules/hash/main.js",
    "./hash/phc_formatter": "./build/modules/hash/phc_formatter.js",
    "./hash/drivers/argon": "./build/modules/hash/drivers/argon.js",
    "./hash/drivers/bcrypt": "./build/modules/hash/drivers/bcrypt.js",
    "./hash/drivers/scrypt": "./build/modules/hash/drivers/scrypt.js",
    "./app": "./build/modules/app.js",
    "./config": "./build/modules/config.js",
    "./container": "./build/modules/container.js",
    "./encryption": "./build/modules/encryption/main.js",
    "./encryption/drivers/aes_256_cbc": "./build/modules/encryption/drivers/aes_256_cbc.js",
    "./encryption/drivers/aes_256_gcm": "./build/modules/encryption/drivers/aes_256_gcm.js",
    "./encryption/drivers/aes_siv": "./build/modules/encryption/drivers/aes_siv.js",
    "./encryption/drivers/chacha20_poly1305": "./build/modules/encryption/drivers/chacha20_poly1305.js",
    "./env": "./build/modules/env/main.js",
    "./dumper": "./build/modules/dumper/main.js",
    "./dumper/plugin_edge": "./build/modules/dumper/plugins/edge.js",
    "./env/editor": "./build/modules/env/editor.js",
    "./events": "./build/modules/events.js",
    "./http": "./build/modules/http/main.js",
    "./http/helpers": "./build/modules/http/helpers.js",
    "./http/url_builder_client": "./build/modules/http/url_builder_client.js",
    "./logger": "./build/modules/logger.js",
    "./repl": "./build/modules/repl.js",
    "./transformers": "./build/modules/transformers/main.js",
    "./package.json": "./package.json",
    "./exceptions": "./build/src/exceptions.js",
    "./test_utils": "./build/src/test_utils/main.js",
    "./health": "./build/modules/health.js",
    "./vine": "./build/src/vine.js"
  },
  "scripts": {
    "pretest": "npm run lint",
    "test": "cross-env NODE_DEBUG=adonisjs:core npm run quick:test",
    "clean": "del-cli build",
    "copy:templates": "copyfiles \"stubs/**/**/*.stub\" --up=1 build",
    "precompile": "npm run lint",
    "compile": "npm run clean && tsdown && tsc --emitDeclarationOnly --declaration",
    "postcompile": "npm run copy:templates && npm run index:commands",
    "build": "npm run compile",
    "docs": "typedoc",
    "release": "npx release-it",
    "version": "npm run build",
    "prepublishOnly": "npm run build",
    "lint": "eslint .",
    "typecheck": "tsc --noEmit",
    "format": "prettier --write .",
    "quick:test": "node --import=@poppinss/ts-exec --enable-source-maps bin/test.ts --force-exit",
    "citgm": "cross-env FORCE_COLOR=0 node --import=@poppinss/ts-exec bin/test.ts --force-exit",
    "index:commands": "node --import=@poppinss/ts-exec toolkit/main.js index build/commands"
  },
  "devDependencies": {
    "@adonisjs/assembler": "^8.6.0",
    "@adonisjs/encryption": "^6.0.2",
    "@adonisjs/eslint-config": "^3.1.0",
    "@adonisjs/prettier-config": "^1.5.0",
    "@adonisjs/tsconfig": "^2.0.0",
    "@japa/assert": "^4.2.0",
    "@japa/expect-type": "^2.0.4",
    "@japa/file-system": "^3.0.0",
    "@japa/runner": "^5.3.0",
    "@japa/snapshot": "^2.0.10",
    "@poppinss/ts-exec": "^1.4.4",
    "@release-it/conventional-changelog": "^12.0.2",
    "@types/node": "~26.6.2",
    "@types/pretty-hrtime": "^1.0.3",
    "@types/sinon": "^22.0.0",
    "@types/supertest": "^7.2.1",
    "@types/test-console": "^2.0.3",
    "@vinejs/vine": "^4.4.0",
    "argon2": "^0.45.1",
    "bcrypt": "^6.0.0",
    "c8": "^12.0.0",
    "copyfiles": "^2.4.1",
    "cross-env": "^10.1.0",
    "del-cli": "^7.0.0",
    "edge.js": "^6.5.1",
    "eslint": "^10.11.0",
    "execa": "^10.0.1",
    "get-port": "^7.2.0",
    "pino-pretty": "^13.1.3",
    "prettier": "^3.9.9",
    "release-it": "^21.1.0",
    "sinon": "^22.1.0",
    "supertest": "^7.3.0",
    "test-console": "^2.0.0",
    "timekeeper": "^2.3.1",
    "tsdown": "^0.23.0",
    "typedoc": "^0.28.20",
    "typescript": "^6.0.3",
    "youch": "^4.1.1"
  },
  "dependencies": {
    "@adonisjs/ace": "^14.1.1",
    "@adonisjs/application": "^9.1.0",
    "@adonisjs/bodyparser": "^11.0.4",
    "@adonisjs/config": "^6.1.0",
    "@adonisjs/env": "^7.1.0",
    "@adonisjs/events": "^10.2.0",
    "@adonisjs/fold": "^11.1.0",
    "@adonisjs/hash": "^10.1.1",
    "@adonisjs/health": "^3.1.0",
    "@adonisjs/http-server": "^9.3.1",
    "@adonisjs/http-transformers": "^2.3.1",
    "@adonisjs/logger": "^7.1.1",
    "@adonisjs/repl": "^5.0.0",
    "@boringnode/encryption": "^1.0.1",
    "@poppinss/colors": "^4.1.6",
    "@poppinss/dumper": "^0.7.0",
    "@poppinss/macroable": "^1.1.2",
    "@poppinss/utils": "^7.1.1",
    "@sindresorhus/is": "^8.1.0",
    "@types/he": "^1.2.3",
    "error-stack-parser-es": "^2.0.1",
    "he": "^1.2.0",
    "pretty-hrtime": "^1.0.3",
    "string-width": "^8.2.2"
  },
  "peerDependencies": {
    "@adonisjs/assembler": "^8.6.0",
    "@vinejs/vine": "^4.0.0",
    "argon2": "^0.44.0 || ^0.45.1",
    "bcrypt": "^6.0.0",
    "edge.js": "^6.2.0",
    "pino-pretty": "^13.1.3",
    "youch": "^4.1.0-beta.13 || ^4.1.0"
  },
  "peerDependenciesMeta": {
    "argon2": {
      "optional": true
    },
    "bcrypt": {
      "optional": true
    },
    "@adonisjs/assembler": {
      "optional": true
    },
    "@vinejs/vine": {
      "optional": true
    },
    "edge.js": {
      "optional": true
    },
    "youch": {
      "optional": true
    },
    "pino-pretty": {
      "optional": true
    }
  },
  "homepage": "https://github.com/adonisjs/core#readme",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/adonisjs/core.git"
  },
  "bugs": {
    "url": "https://github.com/adonisjs/core/issues"
  },
  "keywords": [
    "adonisjs",
    "framework",
    "mvc"
  ],
  "author": "Harminder Virk <virk@adonisjs.com>",
  "contributors": [
    "Romain Lanz <romain.lanz@pm.me>",
    "Julien Ripouteau <julien@ripouteau.com>",
    "Michaël Zasso"
  ],
  "license": "MIT",
  "publishConfig": {
    "provenance": true,
    "access": "public"
  },
  "c8": {
    "reporter": [
      "text",
      "html"
    ],
    "exclude": [
      "tests/**",
      "build/**",
      "factories/**",
      ".yalc/**"
    ]
  },
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ]
  },
  "tsdown": {
    "entry": [
      "index.ts",
      "commands/main.ts",
      "commands/**/*.ts",
      "factories/core/main.ts",
      "factories/**/*.ts",
      "src/types.ts",
      "toolkit/main.ts",
      "types/**/*.ts",
      "services/**/*.ts",
      "providers/**/*.ts",
      "src/helpers/main.ts",
      "src/helpers/**/*.ts",
      "src/ignitor/main.ts",
      "src/assembler_hooks/index_entities.ts",
      "modules/ace/main.ts",
      "modules/ace/codemods.ts",
      "modules/bodyparser/main.ts",
      "modules/bodyparser/bodyparser_middleware.ts",
      "modules/hash/main.ts",
      "modules/hash/phc_formatter.ts",
      "modules/hash/drivers/*.ts",
      "modules/app.ts",
      "modules/config.ts",
      "modules/container.ts",
      "modules/encryption/main.ts",
      "modules/encryption/drivers/*.ts",
      "modules/env/main.ts",
      "modules/dumper/main.ts",
      "modules/dumper/plugins/edge.ts",
      "modules/env/editor.ts",
      "modules/events.ts",
      "modules/http/main.ts",
      "modules/http/helpers.ts",
      "modules/http/url_builder_client.ts",
      "modules/logger.ts",
      "modules/repl.ts",
      "modules/transformers/main.ts",
      "src/exceptions.ts",
      "src/test_utils/main.ts",
      "modules/health.ts",
      "src/vine.ts"
    ],
    "outDir": "./build",
    "clean": true,
    "format": "esm",
    "minify": "dce-only",
    "fixedExtension": false,
    "dts": false,
    "treeshake": false,
    "sourcemaps": false,
    "target": "esnext"
  },
  "release-it": {
    "git": {
      "requireCleanWorkingDir": true,
      "requireUpstream": true,
      "commitMessage": "chore(release): ${version}",
      "tagAnnotation": "v${version}",
      "push": true,
      "tagName": "v${version}"
    },
    "github": {
      "release": true
    },
    "npm": {
      "publish": true,
      "skipChecks": true
    },
    "plugins": {
      "@release-it/conventional-changelog": {
        "preset": {
          "name": "angular"
        }
      }
    }
  },
  "prettier": "@adonisjs/prettier-config"
}

---

## File: tsconfig.json

{
  "extends": "@adonisjs/tsconfig/tsconfig.package.json",
  "compilerOptions": {
    "rootDir": "./",
    "allowImportingTsExtensions": true,
    "rewriteRelativeImportExtensions": true,
    "outDir": "./build"
  }
}

---

## File: typedoc.json

{
  "$schema": "https://typedoc.org/schema.json",
  "name": "@adonisjs/core",
  "includeVersion": true,
  "excludeExternals": true,
  "entryPoints": [
    "./index.ts",
    "./commands/**/*.ts",
    "./factories/**/*.ts",
    "./modules/**/*.ts",
    "./providers/**/*.ts",
    "./services/**/*.ts",
    "./src/types.ts",
    "./src/helpers/main.ts",
    "./src/exceptions.ts",
    "./src/test_utils/main.ts",
    "./src/vine.ts",
    "./stubs/main.ts"
  ],
  "excludePrivate": true,
  "excludeProtected": true,
  "excludeInternal": true,
  "readme": "none",
  "gitRevision": "main",
  "sort": ["source-order"]
}

---

## File: .github/dependabot.yml

version: 2
updates:
  - package-ecosystem: github-actions
    directory: /
    schedule:
      interval: weekly

---

## File: .github/workflows/checks.yml

name: checks
on:
  - push
  - pull_request
  - workflow_call
permissions:
  contents: read

jobs:
  test:
    uses: adonisjs/core/.github/workflows/test.yml@e3534b9d1b8a10cd7dea1b9847d781bf952143b8 # 7.x
    with:
      install-pnpm: true

  lint:
    uses: adonisjs/.github/.github/workflows/lint.yml@7eeb68b240344601ced8ef4fbe0b4dd31df0760b # main

  typecheck:
    uses: adonisjs/.github/.github/workflows/typecheck.yml@7eeb68b240344601ced8ef4fbe0b4dd31df0760b # main

---

## File: .github/workflows/labels.yml

name: Sync labels
on:
  workflow_dispatch:
permissions:
  issues: write
jobs:
  labels:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7.0.1
      - uses: EndBug/label-sync@v2
        with:
          config-file: 'https://raw.githubusercontent.com/thetutlage/static/main/labels.yml'
          delete-other-labels: true
          token: ${{ secrets.GITHUB_TOKEN }}

---

## File: .github/workflows/release.yml

name: release
on: workflow_dispatch

permissions:
  contents: read

concurrency:
  group: release
  cancel-in-progress: false

jobs:
  checks:
    permissions:
      contents: read
    uses: ./.github/workflows/checks.yml
    secrets: inherit

  release:
    needs: checks
    runs-on: ubuntu-latest
    environment: npm-publish
    permissions:
      contents: write
      id-token: write
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          fetch-depth: 0

      - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
        with:
          node-version: 24
          registry-url: 'https://registry.npmjs.org'

      - name: git config
        run: |
          git config user.name "${GITHUB_ACTOR}"
          git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"

      - run: npm ci --ignore-scripts

      - run: npm audit signatures

      - name: Verify build output
        run: |
          npm run build
          test -f build/commands/main.js
          test -f build/commands/commands.json

      - run: npm run release -- --ci
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

---

## File: .github/workflows/stale.yml

name: 'Close stale issues and PRs'
on:
  schedule:
    - cron: '30 0 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v11
        with:
          stale-issue-message: 'This issue has been marked as stale because it has been inactive for more than 21 days. Please reopen if you still need help on this issue'
          stale-pr-message: 'This pull request has been marked as stale because it has been inactive for more than 21 days. Please reopen if you still intend to submit this pull request'
          close-issue-message: 'This issue has been automatically closed because it has been inactive for more than 4 weeks. Please reopen if you still need help on this issue'
          close-pr-message: 'This pull request has been automatically closed because it has been inactive for more than 4 weeks. Please reopen if you still intend to submit this pull request'
          exempt-issue-labels: 'Status: On Hold,Pinned'
          days-before-stale: 21
          days-before-close: 5

---

## File: .github/workflows/test.yml

on:
  workflow_call:
    inputs:
      disable-windows:
        type: boolean
        default: false
        required: false
      install-pnpm:
        type: boolean
        default: false
        required: false

permissions:
  contents: read

jobs:
  test_linux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: ['lts/krypton', 'latest']

    steps:
      - name: Checkout code
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Setup Node.js
        uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install pnpm
        if: ${{ inputs.install-pnpm }}
        uses: pnpm/action-setup@v6
        with:
          version: 10

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

  test_windows:
    if: ${{ !inputs.disable-windows }}
    runs-on: windows-latest
    strategy:
      matrix:
        node-version: ['lts/krypton', 'latest']

    steps:
      - name: Checkout code
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

      - name: Setup Node.js
        uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install pnpm
        if: ${{ inputs.install-pnpm }}
        uses: pnpm/action-setup@v6
        with:
          version: 10

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

--- METRICS ---
- Files Extracted: 12
- Estimated Token Budget: ~7108 tokens
- Recency Window: Active (< 180 days)
- Canonical Reference: https://codewiki.google/github.com/adonisjs/core
