- Review this guide completely
- Setup you development environment
- Familiarize yourself with our documentation style guide
- Git
- Node.js
- GitHub access
-
Clone the repository
-
Configure GitHub access:
npm login --scope@apify-packages -registry=https://npm.pkg.github.com --auth-type=legacy
-
Run
npm install
-
Start development server:
npm start
This will be enough to work on Platform, Academy and, OpenAPI. If you want to work on entire documentation set you need to join them using nginx.
-
Clone all the repositories
-
Run
npm start:dev
instead ofnpm start
from the main repository -
Run
npm start -- --port <number>
to start Docusaurus instance on specific port, refer to the table for each repository portRepository Port apify-docs 3000 apify-client-js 3001 apify-client-python 3002 apify-sdk-js 3003 apify-sdk-python 3004 apify-cli 3005 -
To serve them together, setup the nginx server with the following configuration:
server { listen 80; server_name docs.apify.loc; location / { proxy_pass http://localhost:3000; } location /api/client/js { proxy_pass http://localhost:3001; } location /api/client/python { proxy_pass http://localhost:3002; } location /sdk/js { proxy_pass http://localhost:3003; } location /sdk/python { proxy_pass http://localhost:3004; } location /cli { proxy_pass http://localhost:3005; } }
-
Add a record to
/etc/hosts
, which maps thedocs.apify.loc
to a localhost:127.0.01 docs.apify.loc
You should be able to open https://docs.apify.loc in your browser and run all the repositories jointly as one project.
- Use US English
- Write in inclusive language
- Avoid directional language (like "left" or "right" or instead of "see" use "check out")
- Use active voice whenever possible
-
Text emphasis:
- use Bold for UI elements
- use Italics for emphasis
- use
code
for inline code, by using back-ticks (``) - use code blocks with language specification
- use code tabs whenever you want to include examples of implementation in more than one language
-
Documentation elements:
- Use admonitions to emphasize crucial information, available admonitions are:
- note
- tip
- info
- caution
- danger
- Use code tabs for multiple languages
- Include proper metadata in front matter
Example of proper usage and formatting:
:::note Your Title Here Your important message here. :::
- Use admonitions to emphasize crucial information, available admonitions are:
-
Screenshots:
- Use light theme when taking screenshots
- Include meaningful alt texts
- Use red indicators
- Keep descriptions between 140 and 160 characters
- Use action-oriented phrasing
- Avoid repetitive keywords
- Avoid the word "documentation" in descriptions
- uses
@apify/docs-theme
package - automatic synchronization via CI
- Theme updates trigger rebuilds across all projects
Content lives in the following locations:
- Main content like Platform documentation & Academy:
/sources
directory - API reference: Generated from OpenAPI specs within
/apify-api
directory - SDK docs: separate repositories
- Client docs: separate repositories
- CLI docs: separate repositories
The API reference documentation at docs.apify.com is built directly from our OpenAPI specification. The source of truth for the API specification lives in the /apify-api/openapi
directory within apify-docs repository.
- Install Node.js
- Clone the repository
- Run
npm install
npm start
- Starts docs preview server including API referencenpm test
- Validates the definition
- Navigate to
apify-api/openapi/components/schemas
- Create a new file named after your schema
- Define the schema structure
- Reference schema using
$ref
in other files
Example schema
type: object
properties:
id:
description: The resource ID
readOnly: true
allOf:
-$ref: ./ResourceId.yaml
- Navigate to
apify-api/openapi/paths
- Create YAML file following the URL structure replacing
/
with@
- Place path parameters in curly braces (e.g., {queueId})
- Add path reference to openapi.yaml
Example addition to openapi.yaml
file:
'/requests-queues':
$ref: './paths/request-queues/request-queues.yaml'
'/requests-queues/{queueId}':
$ref: './paths/request-queues/request-queues@{queueId}.yaml'
Example YAML file request-queues@{queueId}.yaml
in the paths/request-queues
folder :
get:
tags:
- Request Queues
summary: Get a Request Queue
operationId: requestQueues_get
description: |
You can have a markdown description here.
parameters:
responses:
'200':
'401':
x-code-samples:
- lang: PHP
source:
$ref: ../code_samples/PHP/customers/get.php
Operation IDs must follow this format:
- Generated from path structure and HTTP method
- Use camelCase for object names
- Single object for paths with {id}, plural otherwise
- Underscore separator between object name and action
- Method name in lowercase at the end
Examples:
/requests-queues
GET ->requestQueues_get
/requests-queues/{queueId}
PUT ->requestQueue_put
/acts/{actorId}/runs
POST ->act_runs_post
- Navigate to the
openapi/code_samples
folder - Navigate to the
<language>
sub-folder - Navigate to the
path
folder, and add ref to the code sample
Add languages by adding new folders at the appropriate path level.
- Make your changes following the guidelines above
- Test locally using provided npm commands
- Submit a pull request to the
main
branch - Ensure all CI checks pass
-
Basic setup
npm install npm start
-
Full setup with nginx:
- Clone all documentation repositories
- Configure nginx server
- Update hosts file
- Use
npm start:dev
-
Markdown:
npm run lint:md # Checks for any issues using markdownlint npm run lint:md:fix # Applies fixes
-
Code:
npm run lint:code # Checks .js & .ts files npm run lint:code:fix # Applies fixes
-
Prose:
- Use Vale for content linting
- Configure exceptions in
accepts.txt
- Follow Conventional Commits
- Pass all CI checks
- Include comprehensive documentation updates
- Automatic deployment on merge to
master
- Builds deploy to appropriate subdomains
- Updates trigger theme synchronization