OpenAI Plugin Manifest Structure: Complete Guide to plugin.json
The plugin.json manifest serves as the canonical configuration file that defines every OpenAI plugin's identity, capabilities, and entry points through a standardized schema containing required metadata fields, file path references, and an interface object for UI rendering.
The openai/plugins repository hosts the source code for official Codex and ChatGPT plugins, with each integration defined by a mandatory plugin.json file. Understanding the plugin manifest structure is essential for developers building custom integrations, as this single file dictates how the platform discovers, displays, and executes plugin functionality.
Core Schema of the Plugin Manifest
The root of every plugin.json follows a strict schema enforced by the Codex runtime. Twelve primary fields govern plugin identification and behavior, with additional optional extensions for API definitions.
Identity and Metadata Fields
Every manifest must declare fundamental identity properties that the platform uses for registration and discovery.
name: The URL-safe identifier used in routing (e.g.,"google-drive")version: Semantic versioning string (e.g.,"0.1.15")description: One-line summary displayed in plugin listingsauthor: Object containingname,email, andurlpropertieshomepage: Human-readable landing page URLrepository: Source code location, typically"https://github.com/openai/plugins"license: SPDX license identifier (e.g.,"MIT")keywords: Array of discovery tags (e.g.,["google-drive", "productivity"])
File Path References
The manifest points to executable code through relative paths that the runtime resolves against the plugin root.
skills: Relative path to the folder containing skill definitions (e.g.,"./skills/")apps: Relative path to the MCP app definition file (e.g.,"./.app.json")
Interface Configuration
The interface object contains UI-specific metadata and capability declarations consumed by the Codex runtime. Required properties include:
displayName: Human-readable name shown in the UIshortDescription: Brief marketing taglinelongDescription: Full description supporting line breaksdeveloperName: Company or individual author namecategory: Functional grouping (e.g.,Productivity,Creativity)capabilities: Array of allowed interaction modes (Interactive,Write, etc.)composerIconandlogo: Asset paths for visual identificationwebsiteURL,privacyPolicyURL,termsOfServiceURL: Legal and support linksdefaultPrompt: Array of sample prompts surfaced by the UI
Optional interface properties include brandColor (hex color for UI theming) and screenshots (array of image paths).
Optional API Configuration
The api object is optional and describes REST or GraphQL endpoints provided by the plugin. When present, it typically contains a baseUrl field defining the root endpoint for all plugin operations.
Complete plugin.json Example
Here is a minimal yet complete manifest based on the schema implemented in plugins/canva/.codex-plugin/plugin.json and plugins/google-drive/.codex-plugin/plugin.json:
{
"name": "example-plugin",
"version": "1.0.0",
"description": "One-sentence summary of the plugin.",
"author": {
"name": "Acme Corp.",
"email": "dev@acme.com",
"url": "https://acme.com"
},
"homepage": "https://acme.com/example",
"repository": "https://github.com/acme/example-plugin",
"license": "MIT",
"keywords": ["example", "demo"],
"skills": "./skills/",
"apps": "./.app.json",
"interface": {
"displayName": "Example Plugin",
"shortDescription": "Brief tagline",
"longDescription": "Full description with usage details.",
"developerName": "Acme Corp.",
"category": "Productivity",
"capabilities": ["Interactive", "Write"],
"composerIcon": "./assets/composer-icon.png",
"logo": "./assets/logo.png",
"websiteURL": "https://acme.com",
"privacyPolicyURL": "https://acme.com/privacy",
"termsOfServiceURL": "https://acme.com/terms",
"defaultPrompt": ["Show me a summary of today's activity"],
"brandColor": "#123456",
"screenshots": ["./screens/01.png"]
}
}
Plugin Manifest Locations in the Repository
In the openai/plugins codebase, each plugin maintains its manifest within a .codex-plugin directory. These canonical examples demonstrate the complete structure:
- Canva:
plugins/canva/.codex-plugin/plugin.json(referencesplugins/canva/.app.jsonand assets) - Google Drive:
plugins/google-drive/.codex-plugin/plugin.json(referencesplugins/google-drive/.app.jsonandplugins/google-drive/skills/) - Slack:
plugins/slack/.codex-plugin/plugin.jsonwith skills inplugins/slack/skills/ - Stripe:
plugins/stripe/.codex-plugin/plugin.jsonwith skills inplugins/stripe/skills/
Summary
- The
plugin.jsonfile serves as the single source of truth for OpenAI plugin configuration in theopenai/pluginsrepository. - Required fields include
name,version,description,author,skills,apps, and theinterfaceobject. - The
interfaceobject controls UI rendering throughdisplayName,capabilities, and brand asset paths. - Optional sections like
apiandbrandColorextend functionality without breaking core compatibility. - Manifests reside in
.codex-plugindirectories alongside skill definitions and MCP app configurations.
Frequently Asked Questions
What is the required schema for a plugin.json file?
Every manifest must include the name, version, description, author, homepage, repository, license, keywords, skills, apps, and interface fields. The interface object itself requires displayName, shortDescription, longDescription, developerName, category, capabilities, composerIcon, logo, and URL fields for privacy policies and terms of service.
Where does the plugin.json file reside in the openai/plugins repository?
Each plugin stores its manifest in a .codex-plugin subdirectory within its plugin folder. For example, the Google Drive manifest lives at plugins/google-drive/.codex-plugin/plugin.json, while the Canva manifest resides at plugins/canva/.codex-plugin/plugin.json.
What capabilities can be defined in the interface object?
The capabilities array within the interface object accepts strings defining interaction modes. Common values found in the repository include Interactive for real-time user engagement and Write for content generation permissions. These values determine how the Codex runtime executes plugin functions.
Is the API section required in every plugin manifest?
No, the api object is optional. Only plugins exposing REST or GraphQL endpoints include this section, typically specifying a baseUrl. Stateless plugins relying solely on the MCP protocol through the apps and skills references omit this field entirely.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →