Source for docs.smallest.ai — the unified documentation site for Smallest AI's Voice Agents (Atoms) and Models (Waves) products.
This repository contains the source files for the Smallest AI documentation site at docs.smallest.ai. The docs are built with Fern and cover two products:
| Product | Internal Name | Description | Docs URL |
|---|---|---|---|
| Voice Agents | Atoms | End-to-end voice AI agents for telephony, web, and mobile | docs.smallest.ai/voice-agents |
| Models | Waves | Text-to-Speech (Lightning) and Speech-to-Text (Pulse) APIs | docs.smallest.ai/models |
Note on naming: the rendered URL space and product display names are
voice-agentsandmodels. The internal folder + spec names in this repo are stillatoms/andwaves/— that's intentional so SDK generation and internal tooling don't break. When editing content, work inatoms/andwaves/folders; when writing an internal link or redirect, target/voice-agents/*and/models/*.
.
├── fern/
│ ├── docs.yml # Main docs config (products, theme, layout)
│ ├── fern.config.json # Fern org + version
│ ├── docs/
│ │ ├── assets/ # Logos, favicon, CSS, images, videos
│ │ └── changelog/ # Changelog entries
│ ├── apis/
│ │ ├── atoms/openapi/ # Atoms (Voice Agents) OpenAPI spec
│ │ ├── waves/ # Waves OpenAPI + AsyncAPI specs (SDK generation)
│ │ ├── waves-v4/overrides/ # Waves v4 API reference overrides (docs rendering)
│ │ └── unified/ # Unified SDK generator config
│ ├── products/
│ │ ├── atoms.yml # Voice Agents navigation config
│ │ ├── atoms/pages/ # Voice Agents documentation pages (MDX)
│ │ ├── waves.yml # Models navigation config
│ │ └── waves/pages/ # Models documentation pages (MDX)
│ └── snippets/ # Shared MDX snippets
├── .github/workflows/
│ ├── publish-docs.yml # Auto-publish on push to main
│ ├── preview-docs.yml # PR preview URLs
│ ├── python-sdk.yml # Python SDK generation
│ ├── ts-sdk.yml # TypeScript SDK generation
│ ├── go-sdk.yml # Go SDK generation
│ └── test-quickstarts.yml # Quickstart code sample tests
└── README.md
| What you're changing | Where to edit |
|---|---|
| Waves docs content (pages, guides) | fern/products/waves/pages/*.mdx |
| Waves sidebar navigation | fern/products/waves.yml |
| Waves API spec (REST/HTTP endpoints) | fern/apis/waves/openapi/*.yaml |
| Waves API spec (WebSocket endpoints) | fern/apis/waves/asyncapi/*.yaml |
| Waves API ref page rendering (what shows on docs site) | fern/apis/waves-v4/overrides/*.yml |
| Waves images | fern/products/waves/pages/images/ |
| What you're changing | Where to edit |
|---|---|
| Atoms docs content | fern/products/atoms/pages/**/*.mdx |
| Atoms sidebar navigation | fern/products/atoms.yml |
| Atoms API spec | fern/apis/atoms/openapi/openapi.yaml |
| Atoms images | fern/products/atoms/pages/images/ |
| What you're changing | Where to edit |
|---|---|
| Product toggle, global config | fern/docs.yml |
| CSS / styling | fern/docs/assets/styles/global-styling.css |
| Logos, favicon | fern/docs/assets/ |
| Shared MDX snippets | fern/snippets/ |
Important — three spec layers for waves:
- Base spec at
fern/apis/waves/{openapi,asyncapi}/*.yaml— source of truth for structure.- SDK overrides at
fern/apis/waves/{openapi,asyncapi}/*-overrides.yaml(siblings of base) — drive SDK method names, examples, and deprecations viafern/apis/unified/generators.yml.- v4 docs overrides at
fern/apis/waves-v4/overrides/*.yaml— drive what renders on thedocs.smallest.ai/models/api-reference/*pages viafern/apis/waves-v4/generators.yml. The-v4directory name is a historical carry-over from an earlier version-selector setup; the folder name stays because SDK-gen configs reference it by path.A
description,default,enum, orexampleset in the v4 docs override wins on docs render. Editing the same field in the base spec alone is invisible. Always update both layers in lockstep, and runpython3 scripts/spec-live-tests/spec_drift_check.pybefore pushing — CI runs it on every PR that touchesfern/apis/waves/**orfern/apis/waves-v4/overrides/**.Atoms has its own base + override pairs (REST under
fern/apis/atoms/openapi/and WS underfern/apis/atoms/asyncapi/). The atoms WebSocket endpoint atWSS /atoms/v1/agent/connectlives inagent-ws.yamland renders at/voice-agents/api-reference/api-reference/realtime-agent/realtime-agent— easy to miss if you only auditopenapi/. The drift check script auto-discovers all atoms and waves layers.
- Node.js 18+
- npm or yarn
- A Fern account and
FERN_TOKEN(for publishing)
npm install -g fern-apiPreview the docs locally with hot-reload:
fern docs devThis starts a local server at http://localhost:3000 with live reloading as you edit MDX and config files.
Generate a preview URL (useful for PR reviews):
fern generate --docs --previewPublishing happens automatically when changes are merged to main via the publish-docs.yml GitHub Action. To publish manually:
FERN_TOKEN=<your-token> fern generate --docsfern upgradeThen update the version in fern/fern.config.json if needed.
We welcome contributions from the community! Here's how to get started:
git clone https://github.com/smallest-inc/smallest-ai-documentation.git
cd smallest-ai-documentation
npm install -g fern-apigit checkout -b docs/your-change-description- Content changes: Edit MDX files in the relevant
pages/directory (see Which Files to Edit) - Navigation changes: Edit the YAML config (
atoms.ymlorwaves.yml) - API spec changes: Edit OpenAPI/AsyncAPI files in
fern/apis/ - Style changes: Edit
fern/docs.ymlorfern/docs/assets/styles/global-styling.css
fern docs devVerify your changes look correct at http://localhost:3000.
Push your branch and open a PR against main. A preview URL will be automatically generated and posted as a PR comment.
- All content pages use MDX format (Markdown + JSX components)
- Follow existing naming conventions for file and folder names
- Keep images in the
images/directory next to the pages that use them - Use Fern's component library for callouts, cards, tabs, etc.
- Test that internal links work by previewing locally before submitting
| Repository | Description |
|---|---|
| smallest-python | Official Python SDK |
| smallest-js | Official JavaScript/TypeScript SDK |
| cookbook | Examples and guides for using Smallest AI |
- Documentation: docs.smallest.ai
- Discord: Join our community
- Email: support@smallest.ai
- Issues: Open an issue