PluginBench
Skill
Official
Review
Audit score 70

writing-docs

remotion-dev/remotion

Guidelines for writing and editing Remotion documentation in MDX format.

What is writing-docs?

Provides standards for creating and maintaining Remotion documentation pages in packages/docs/docs. Use when adding new doc pages, editing existing MDX files, or ensuring documentation follows project conventions for structure, formatting, and content quality.

  • Create new documentation pages with proper frontmatter, breadcrumbs, and sidebar registration
  • Format API documentation with one API per page, proper heading hierarchy, and version indicators
  • Write code snippets with TypeScript type-checking via twoslash and proper syntax highlighting
  • Use special components like AvailableFrom, CompatibilityTable, Steps, and interactive demos
  • Apply language guidelines emphasizing brevity, clarity, and developer-focused content
  • Generate social media preview cards for documentation pages

How to install writing-docs

npx skills add https://github.com/remotion-dev/remotion --skill writing-docs
Prerequisites
  • Access to packages/docs/docs directory in the Remotion repository
  • Familiarity with MDX syntax and frontmatter
  • Node.js/Bun environment for running render-cards.ts
Claude Code
Cursor
Windsurf
Cline

How to use writing-docs

  1. 1.Create a new .mdx file in packages/docs/docs with appropriate frontmatter including title and image path
  2. 2.Add the document entry to packages/docs/sidebars.ts following existing ordering logic (alphabetical or grouped)
  3. 3.Write content following language guidelines: keep it brief, link terminology, address reader as 'you', avoid emotions and assumptions
  4. 4.Format API documentation with one API per page, use ### for top-level properties and #### for nested properties
  5. 5.Add version indicators using <AvailableFrom> tags where features were introduced or parameters became optional
  6. 6.Include a Compatibility section with <CompatibilityTable> for API pages before the See also section
  7. 7.Use code snippets with twoslash for type-safe examples and add titles to example code blocks
  8. 8.Run 'bun render-cards.ts' in packages/docs to generate social preview cards after adding or editing pages

Use cases

Good for
  • Adding a new API reference page for a Remotion function or component
  • Documenting package-specific features with breadcrumb navigation and compatibility tables
  • Creating step-by-step guides using the Step component with proper formatting
  • Updating existing docs to add version indicators or fix formatting inconsistencies
  • Ensuring consistent terminology, code style, and heading structure across documentation
Who it's for
  • Documentation writers and maintainers
  • Developers contributing to Remotion projects
  • Technical writers standardizing API documentation
  • Contributors adding new features that require documentation

writing-docs FAQ

How should API names be formatted in documentation?

Put API names in backticks and link them if a docs page exists. Function and hook names should include (), e.g., [`useVideoConfig()`](/docs/use-video-config). Components should include angle brackets, e.g., [`<Player>`](/docs/player/player).

What is the 'crumb' field in frontmatter used for?

The crumb field displays a package name as a breadcrumb above the page title. Use it when a documentation page belongs to a package, e.g., `crumb: '@remotion/my-package'`.

How do I hide imports in code snippets?

Use `// ---cut---` in a twoslash code block. Content above this line is hidden; only content below is displayed to readers.

When should I use <AvailableFrom> tags?

Use <AvailableFrom> to indicate when an API, feature, parameter, or behavior was added in a specific version. Place it at the page, section, or field level where readers first need to know about it.

What is the difference between optional parameters and CLI flags?

For optional parameters, add a ? to the heading. Do NOT add ? for CLI flags (beginning with --) since CLI flags are always optional by nature.

Full instructions (SKILL.md)

Source of truth, from remotion-dev/remotion.


name: writing-docs description: Guides for writing and editing Remotion documentation. Use when adding docs pages, editing MDX files in packages/docs, or writing documentation content.

Writing Remotion Documentation

Documentation lives in packages/docs/docs as .mdx files.

Adding a new page

  1. Create a new .mdx file in packages/docs/docs
  2. Add the document to packages/docs/sidebars.ts
  3. Write the content following guidelines below
  4. Run bun render-cards.ts in packages/docs to generate social preview cards

Breadcrumb (crumb): If a documentation page belongs to a package, add crumb: '@remotion/package-name' to the frontmatter. This displays the package name as a breadcrumb above the title.

---
image: /generated/articles-docs-my-package-my-api.png
title: '<MyComponent>'
crumb: '@remotion/my-package'
---

One API per page: Each function or API should have its own dedicated documentation page. Do not combine multiple APIs (e.g., getEncodableVideoCodecs() and getEncodableAudioCodecs()) on a single page.

Public API only: Documentation is for public APIs only. Do not mention, reference, or compare against internal/private APIs or implementation details.

API names in prose: Put API names in backticks, and link them if a docs page exists. Function and hook names should include (), for example useVideoConfig(), not useVideoConfig or useVideoConfig. Components should include angle brackets, for example <Player> or <Audio>.

Use headings for all fields: When documenting API options or return values, each property should be its own heading. Use ### for top-level properties and #### for nested properties within an options object. Do not use bullet points for individual fields.

Version indicators: If an API, feature, parameter, or behavior was added in a specific version, add <AvailableFrom> at the page, section, or field where the reader first needs to know it. For example: # prefetch()<AvailableFrom v="4.0.0" />.

Compatibility tables: API pages should ideally include a ## Compatibility section with <CompatibilityTable> before ## See also.

Sidebar order: When adding or moving docs in packages/docs/sidebars.ts, inspect the surrounding entries and match the ordering logic already used there. If a section is alphabetical, place the new entry alphabetically; if it is grouped by workflow or importance, place it consistently with that grouping. Do not leave new additions as one-off outliers.

Language guidelines

  • Keep it brief: Developers don't like to read. Extra words cause information loss.
  • Link to terminology: Use terminology page for Remotion-specific terms.
  • Do not bold terms: Write terms as plain text, code spans, or links as appropriate. Do not use bold formatting to introduce a term.
  • Avoid emotions: Remove filler like "Great! Let's move on..." - it adds no information.
  • Separate into paragraphs: Break up long sections.
  • Address as "you": Not "we".
  • Don't blame the user: Say "The input is invalid" not "You provided wrong input".
  • Don't assume it's easy: Avoid "simply" and "just" - beginners may struggle.

Code snippets

Basic syntax highlighting:

```ts
const x = 1;
```

Type-safe snippets (preferred)

Use twoslash to check snippets against TypeScript:

```ts twoslash
import {useCurrentFrame} from 'remotion';
const frame = useCurrentFrame();
```

Hiding imports

Use // ---cut--- to hide setup code - only content below is displayed:

```ts twoslash
import {useCurrentFrame} from 'remotion';
// ---cut---
const frame = useCurrentFrame();
```

Adding titles

Always add a title to code fences that show example usage:

```ts twoslash title="MyComponent.tsx"
console.log('Hello');
```

Special components

Steps

Keep one <Step> per line and add a space after </Step>. Use an explicit line break (<br/> or <br />) when consecutive steps should appear on separate lines. Do not add Markdown bullet markers solely to wrap steps in a <ul>.

<Step>1</Step> First step<br />
<Step>2</Step> Second step

Experimental badge

<ExperimentalBadge>
<p>This feature is experimental.</p>
</ExperimentalBadge>

Interactive demos

<Demo type="rect"/>

Demos must be implemented in packages/docs/components/demos/index.tsx. See the docs-demo skill for details on adding new demos.

AvailableFrom

Use to indicate when a feature or parameter was added. No import needed - it's globally available.

For page-level version indicators, use an # h1 heading with <AvailableFrom> inline so it appears next to the title (not below it). Use &lt; and &gt; to escape angle brackets in component names:

# &lt;MyComponent&gt;<AvailableFrom v="4.0.123" />
# @remotion/my-package<AvailableFrom v="4.0.123" />

For section headings:

## Saving to another cloud<AvailableFrom v="3.2.23" />

CompatibilityTable

Use to indicate which runtimes and environments a component or API supports. No import needed. Place it in a ## Compatibility section before ## See also.

Available boolean props: chrome, firefox, safari, player, studio, clientSideRendering, serverSideRendering. Set to true (supported) or {false} (not supported).

Set to empty string "" for not applicable if this is a frontend API: nodejs="", bun="", serverlessFunctions="". Use hideServers to hide the Node.js/Bun/serverless row if this is a frontend API.

## Compatibility

<CompatibilityTable chrome firefox safari nodejs="" bun="" serverlessFunctions="" clientSideRendering={false} serverSideRendering player studio hideServers />

Optional parameters

For optional parameters in API documentation:

  1. Add ? to the heading - this indicates the parameter is optional --> Don't do it if it is a CLI flag (beginning with --) - CLI flags are always optional
  2. Do NOT add _optional_ text - the ? suffix is sufficient
  3. Include default value in description - mention it naturally in the text
### onError?

Called when an error occurs. Default: errors are thrown.

Do NOT do this:

### onError?

_optional_

Called when an error occurs.

Combining optional and AvailableFrom

When a parameter is both optional and was added in a specific version:

### onError?<AvailableFrom v="4.0.50" />

Called when an error occurs.

"Optional since" pattern

If a parameter became optional in a specific version (was previously required):

### codec?

Optional since <AvailableFrom v="5.0.0" inline />. Previously required.

Generating preview cards

After adding or editing a page, generate social media preview cards:

cd packages/docs && bun render-cards.ts

Streamlining existing docs

When asked to audit or streamline docs, scan for:

  • Missing <AvailableFrom> indicators for APIs, features, options, parameters, or behaviors introduced in a specific version
  • API names that are not formatted as code spans or linked to their docs page
  • Function and hook references missing ()
  • API pages that should have a ## Compatibility section with <CompatibilityTable>
  • Fragile or broken <Step> formatting