JSDoc
SkillDocs & knowledgeGives your agent a guide for writing JSDoc comments in TypeScript with correct tags and examples.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the JSDoc skill
About this capability
Full JSDoc format guide for TypeScript, covering @example formats (short, multi-line, multi-variant), tag usage (@default, @deprecated, what to avoid), documentation patterns for properties/enums/functions, and tag order.
What this skill tells your AI
The instructions your AI receives, as published by kubb-labs/kubb in .agents/skills/jsdoc/SKILL.md and read by ahel’s review.
The detailed JSDoc format guide with examples for every case. The always-on essentials live in
the jsdoc rule. Reach here when you need the full reference.
@example format
Short one-liner: label on the @example line, code as inline backtick on the next line
/**
* @example Required parameter
* `name: Type`
*
* @example Optional parameter
* `name?: Type`
*/
Multi-line: fenced code block immediately after @example
/**
* @example
* ```ts
* const result = buildParams(node, {
* paramsType: 'inline',
* })
* ```
*/
Multiple variants: use multiple @example blocks
/**
* @example Object mode
* `{ id, data, params }: { id: string; data: Data; params?: QueryParams }`
*
* @example Inline mode
* `id: string, data: Data, params?: QueryParams`
*/
Rules
| Rule | Correct | Incorrect |
|---|---|---|
| Label + inline code | @example Required\n\name: Type`` | @example \name: Type`` (code on tag line) |
| Multi-line code | Fenced ```ts ``` block | Bare code lines without a fence |
| Short examples | Inline backtick | Triple-backtick fence (too heavy) |
| One concern per example | Separate @example blocks | One example covering all cases |
Tags
Use frequently
| Tag | Purpose | Notes |
|---|---|---|
@default | Default value | Only when the default is non-obvious (omit for undefined) |
@example | Usage example | Prefer for complex or multi-variant APIs |
@note | Important caveat | Version info, breaking changes |
@deprecated | Mark as deprecated | Include a migration path |
Use sparingly
| Tag | Purpose |
|---|---|
@see | Reference external docs |
@internal | Internal API |
@beta | Experimental |
Avoid (TypeScript already provides these)
@param: use TypeScript parameter types@returns: use the TypeScript return type@type: use a TypeScript type annotation@typedef: usetypeorinterface@default undefined: optional (?) already implies this
Documentation patterns
Simple property: always multi-line
/**
* Output directory for generated files.
*/
outDir?: string
Never use single-line /** description */. Always expand to multi-line.
Property with a non-obvious default
/**
* Maximum number of concurrent callbacks during traversal.
* Higher values overlap I/O-bound work; lower values reduce memory pressure.
*
* @default 30
*/
concurrency?: number
Do not add @default false or @default undefined when the TypeScript type already makes the
default obvious.
Enum or union with options
/**
* How path parameters are emitted in the function signature.
* - `'object'` groups them as a single destructured parameter
* - `'inline'` spreads them as individual parameters
* - `'inlineSpread'` emits a single rest parameter
*/
pathParamsType: 'object' | 'inline' | 'inlineSpread'
Nested properties: every field gets its own multi-line JSDoc
names?: {
/**
* Name for the request body parameter.
* @default 'data'
*/
data?: string
/**
* Name for the query parameters group parameter.
* @default 'params'
*/
params?: string
}
Function documentation
Only add JSDoc when it adds value beyond the signature:
// No JSDoc needed: the signature is self-explanatory
function camelCase(str: string): string { ... }
// JSDoc adds value: it explains behavior and non-obvious edge cases
/**
* Returns `true` when the schema resolves to a plain string output.
*
* - `string`, `uuid`, `email`, `url`, `datetime` are always plain strings.
* - `date` and `time` are plain strings when their `representation` is `'string'`.
*/
function isStringType(node: SchemaNode): boolean { ... }
Guidelines
Do:
- Document what the property does, not its TypeScript type
- Give every exported type, property, and function a JSDoc comment
- Always use multi-line JSDoc blocks
- Use concrete, full-sentence descriptions
- Include
@defaultonly when the default is non-obvious - Use multiple
@exampleblocks for different variants - Keep
@examplelabels short and descriptive
Do not:
- Write single-line
/** description */ - Write
@default undefined - Put code directly on the
@exampleline - Use
@paramor@returnstags - Over-document trivial, self-explanatory properties
Tag order
- Description (required)
- Bullet list of variants or behaviors (if applicable)
@default(if non-obvious)@example(one or more)@note(if needed)@deprecated(if applicable)@see(if providing references)
Signals
- GitHub stars
- 2k
- Forks
- 146
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
jsdoc- Source
- github.com/kubb-labs/kubb