JSDoc

SkillDocs & knowledge

Gives 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.

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

RuleCorrectIncorrect
Label + inline code@example Required\n\name: Type``@example \name: Type`` (code on tag line)
Multi-line codeFenced ```ts ``` blockBare code lines without a fence
Short examplesInline backtickTriple-backtick fence (too heavy)
One concern per exampleSeparate @example blocksOne example covering all cases

Tags

Use frequently

TagPurposeNotes
@defaultDefault valueOnly when the default is non-obvious (omit for undefined)
@exampleUsage examplePrefer for complex or multi-variant APIs
@noteImportant caveatVersion info, breaking changes
@deprecatedMark as deprecatedInclude a migration path

Use sparingly

TagPurpose
@seeReference external docs
@internalInternal API
@betaExperimental

Avoid (TypeScript already provides these)

  • @param: use TypeScript parameter types
  • @returns: use the TypeScript return type
  • @type: use a TypeScript type annotation
  • @typedef: use type or interface
  • @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 @default only when the default is non-obvious
  • Use multiple @example blocks for different variants
  • Keep @example labels short and descriptive

Do not:

  • Write single-line /** description */
  • Write @default undefined
  • Put code directly on the @example line
  • Use @param or @returns tags
  • Over-document trivial, self-explanatory properties

Tag order

  1. Description (required)
  2. Bullet list of variants or behaviors (if applicable)
  3. @default (if non-obvious)
  4. @example (one or more)
  5. @note (if needed)
  6. @deprecated (if applicable)
  7. @see (if providing references)

Signals

GitHub stars
2k
Forks
147
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
jsdoc
Source
github.com/kubb-labs/kubb