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- 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
How to use writing-docs
- 1.Create a new .mdx file in packages/docs/docs with appropriate frontmatter including title and image path
- 2.Add the document entry to packages/docs/sidebars.ts following existing ordering logic (alphabetical or grouped)
- 3.Write content following language guidelines: keep it brief, link terminology, address reader as 'you', avoid emotions and assumptions
- 4.Format API documentation with one API per page, use ### for top-level properties and #### for nested properties
- 5.Add version indicators using <AvailableFrom> tags where features were introduced or parameters became optional
- 6.Include a Compatibility section with <CompatibilityTable> for API pages before the See also section
- 7.Use code snippets with twoslash for type-safe examples and add titles to example code blocks
- 8.Run 'bun render-cards.ts' in packages/docs to generate social preview cards after adding or editing pages
Use cases
- 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
- Documentation writers and maintainers
- Developers contributing to Remotion projects
- Technical writers standardizing API documentation
- Contributors adding new features that require documentation
writing-docs FAQ
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).
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'`.
Use `// ---cut---` in a twoslash code block. Content above this line is hidden; only content below is displayed to readers.
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.
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
- Create a new
.mdxfile inpackages/docs/docs - Add the document to
packages/docs/sidebars.ts - Write the content following guidelines below
- Run
bun render-cards.tsinpackages/docsto 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 < and > to escape angle brackets in component names:
# <MyComponent><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:
- 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 - Do NOT add
_optional_text - the?suffix is sufficient - 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
## Compatibilitysection with<CompatibilityTable> - Fragile or broken
<Step>formatting
Related skills
More from remotion-dev/remotion and the wider catalog.

add-expert
Add a new expert to the Remotion experts directory page

add-sfx
Add a new sound effect to the @remotion/sfx library with proper licensing and documentation.

docs-demo
Create interactive Remotion composition demos for documentation pages.

make-pr
Create a formatted pull request following Remotion's conventions

mediabunny
Browser-based multimedia library for querying audio and video properties

remotion-best-practices
Router skill that directs to specialized Remotion video creation and editing guides.