Skip to main content

create-module

Use when: scaffolding a new backend entity type, domain module, GraphQL schema, resolvers, or STIX converter in opencti-graphql

Source facts

Repository
OpenCTI-Platform/opencti
Last source activity
October 8, 2026 at 16:11
Detected SKILL.md language
English
Stars
10,123
Forks
1,478

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
create-module
description
Use when: scaffolding a new backend entity type, domain module, GraphQL schema, resolvers, or STIX converter in opencti-graphql
# Create Backend Module ## Prerequisites - **Entity Name**: CamelCase (e.g., `MalwareAnalysis`). - **Entity Type**: Constant (e.g., `ENTITY_TYPE_MALWARE_ANALYSIS`). - **Parent/Category**: e.g., `ABSTRACT_STIX_DOMAIN_OBJECT`. ## Procedure ### Step 1 — Create Directory Structure Create `opencti-platform/opencti-graphql/src/modules/<entityName>`. ### Step 2 — Create Schema File (`<name>.graphql`) Define the Input, Type, Queries, and Mutations. ### Step 3 — Create Type Definition (`<name>-types.ts`) Define TypeScript interfaces for StixObject, StoreEntity, and internal representations. Export the `ENTITY_TYPE_X` constant here. ### Step 4 — Create Converter (`<name>-converter.ts`) Implement `convert<Name>ToStix` function to map StoreEntity to StixObject. ### Step 5 — Create Domain Logic (`<name>-domain.ts`) Implement CRUD functions: `findAll`, `findById`, `add<Name>`, `delete<Name>`. Use `listEntities` and `createEntity` from `database/middleware`. ### Step 6 — Create Resolvers (`<name>-resolvers.ts`) Map the GraphQL Query/Mutation fields to the functions in `<name>-domain.ts`. ### Step 7 — Create Module Definition (`<name>.ts`) Implement `ModuleDefinition` interface. Define attributes, relations, and register the definition using `registerDefinition`. If the module is behind a feature flag, set `featureFlag: <FLAG_CONSTANT>` on **each** attribute and nested mapping — see the `add-feature-flag` skill. ### Step 8a — Create GraphQL Registration File (`<name>-graphql.ts`) Create a `<name>-graphql.ts` file in the module folder that imports the module schema/resolvers and calls `registerGraphqlSchema(...)`. ### Step 8b — Register Module in `src/modules/index.ts` Add two distinct imports in `src/modules/index.ts`: 1. In the **`region registration modules`** section, import `./<entityName>/<entityName>` (module definition registration). 2. In the **`region graphql registration`** section, import `./<entityName>/<entityName>-graphql` (GraphQL endpoint registration). ### Step 8c — Update GraphQL Unions (if applicable) If the entity belongs to a STIX union type (e.g., `StixObject`, `StixDomainObject`), add it to the relevant unions in `src/schema/opencti.graphql`. ### Step 8d — Regenerate Schema Types Run `yarn build:schema` to regenerate TypeScript types from the updated schema.
View on GitHub