General commands
Commands that apply across SDKs and docs.
These commands apply to every Fern project, whether it publishes docs, SDKs, or both. They create and validate a project, authenticate the CLI, update your API definition, and set the CLI version your organization runs. Each one accepts the global options.
Detailed command documentation
fern init
Use fern init to initialize a new Fern workspace in the current folder. By default, you’ll see the IMDb API example.
When initializing with OpenAPI, your project structure will look like this:
openapi
Use --openapi to initialize a project from an OpenAPI specification:
docs
By adding --docs, you’ll also get a sample documentation website for your API with an API Reference section.
The file added will contain:
To publish the API docs, run fern generate --docs.
mintlify
By adding --mintlify PATH_TO_MINT_CONFIG, the CLI will automatically convert your Mintlify docs folder into a Fern docs site, based on the mint.json file.
The CLI will create a fern/ folder with the following structure:
readme
The fern init command supports importing Readme generated docs sites. This requires having a local chromium browser instance installed.
You can ensure this is installed by installing the fern cli from source, following the instructions here.
By adding --readme URL_TO_README_DOCS_SITE, the CLI will automatically convert the Readme generated docs site into a Fern docs site.
The CLI will create a fern/ folder with the following structure:
For more information on getting started, check out our Quickstart Guide
fern export
Use fern export to generate an OpenAPI spec for your API. This is useful when you’ve defined your API in a format other than OpenAPI (such as the Fern Definition) and need to export it for integration with other tools or services.
The path argument is the output file to write. Use a .yml or .json extension to choose the format of the generated spec.
api
Use --api to specify which API to export when you have multiple APIs defined in your fern/apis/ folder.
indent
Use --indent to set the indentation size, in spaces, of the generated spec.
fern check
The --broken-links and --strict-broken-links flags are deprecated. Use the broken-links validation rule in docs.yml instead.
Use fern check to validate your API definition and Fern configuration, including fern.config.json, generators.yml, and docs.yml. It checks for broken links, invalid API examples, configuration errors, and more. When all checks pass, the command produces no output.
Most fern check rules — including broken-links — validate against the navigation tree built from your local config and do not crawl your live deployed site or follow external URLs. The exception is the missing-redirects rule, which compares your local navigation against the previously published state and therefore requires fern login or FERN_TOKEN.
You can configure the severity of the validation rules run by fern check in your docs.yml file using the check.rules property.
To check links on a published site, use fern docs link check or the link checker in the Fern Dashboard instead.
api
Use --api <api> to specify which API you’d like to check.
warnings
Use --warnings to log warnings in addition to errors.
Usage in a GitHub Action
fern upgrade
Use fern upgrade to upgrade your compiler version in fern.config.json to the
latest version. It will also upgrade generators in generators.yml to their minimum-compatible versions.
When your organization sets a CLI version policy, fern upgrade writes the highest version the policy allows rather than the latest published version. A --version below the organization’s minimum is raised to the minimum.
version
Use --version to upgrade to a specific published version of the fern-api package instead of the latest release. The version must be ahead of the version in fern.config.json; use fern downgrade to move to an older version.
from
Use --from to set the version that migrations run from. Fern infers this from fern.config.json and git history; pass it when that inference is wrong, such as after fern.config.json was edited by hand.
yes
Use --yes (-y) to answer yes to every migration prompt, for non-interactive environments like CI.
fern downgrade
Use fern downgrade to set the CLI version in fern.config.json to an older version. It rewrites the version field only: generator versions in generators.yml are left alone, and no migrations are reversed.
A CLI version policy doesn’t block the downgrade, but it does override it: the new version is written to fern.config.json, and subsequent commands still run the minimum required by your organization.
fern login
Use fern login to login to the Fern CLI via GitHub or Google. Logging in allows you
join GitHub organizations, gain permissions, and contribute to projects.
By default, fern login opens a browser for GitHub, Google, or Postman authentication. Two alternative flows are available:
device-code
Use --device-code to login via device code authorization in environments where a browser cannot open automatically (e.g., SSH sessions or containers).
Use --email to login via enterprise SSO. Pass the email address associated with your organization’s SSO provider.
To enable CI/CD, use fern token.
fern logout
Use fern logout to log out of the Fern CLI. This will clear your authentication
credentials and revoke access to your GitHub organizations and permissions.
After logging out, you’ll need to run fern login again to access protected features.
fern token
Use fern token to generate an API key for authenticating the Fern CLI in CI/CD environments. The API key is specific to your organization defined in fern.config.json and doesn’t expire. You can also create and manage API keys from the API keys page in the Dashboard.
See Publishing your docs for instructions on using this API key in automated publishing workflows.
fern api update
Pulls the latest OpenAPI spec from the specified origin in generators.yml and
updates the local spec. Alternatively, you can automate this process by setting up a GitHub Action.
api
Use --api to specify the API to update if there are multiple specs with a defined origin in generators.yml. If you don’t specify an API, all OpenAPI specs with an origin will be updated.
fern api enrich
Use fern api enrich to convert AI-generated examples or manually authored x-fern-examples into portable OpenAPI examples that any OpenAPI-compatible tool can consume.
The command merges examples from an overrides file into native OpenAPI example fields and strips the x-fern-examples keys from the output. When an endpoint has multiple examples, each is stored as a named entry under the plural examples field.
The command requires two flags:
-f(or--file) — the overrides file containingx-fern-examples(e.g.,ai_examples_override.yml).-o(or--output) — the path for the enriched output file. Supports.ymland.jsonextensions.
Each x-fern-examples field is mapped to its standard OpenAPI location:
path-parameters→parameters[].example(wherein: path)query-parameters→parameters[].example(wherein: query)headers→parameters[].example(wherein: header)request→requestBody.content.*.exampleresponse.body→responses.<status>.content.*.example
fern org get
Use fern org get to view your organization’s CLI version policy.
json
Use --json to output the raw cliVersionMin and cliVersionMax fields instead of a one-line description.
org
Use --org to override the organization ID from fern.config.json.
fern org set cli-version
Use fern org set cli-version to constrain the Fern CLI version used by every project in your organization. Requires an organization admin.
Each bound is an exact published version of the fern-api package.
org
Use --org to override the organization ID from fern.config.json.
fern org unset cli-version
Use fern org unset cli-version to remove your organization’s CLI version policy. Requires an organization admin.
Both bounds are removed by default. Pass --min or --max to clear one end and keep the other.