Publishing to PyPI
Publish your public-facing Fern Python SDK to the PyPI registry. After following the steps on this page, you’ll have a versioned package published on PyPI.

This page assumes that you have:
- An initialized
fern
folder. See Set up thefern
folder. - A GitHub repository for your Python SDK. See Project structure.
- A Python generator group in
generators.yml
. See Python Quickstart.
Configure SDK package settings
You’ll need to update your generators.yml
file to configure the package name, output location, and client naming for PyPi publishing. Your generators.yml
should live in your source repository (or on your local machine), not the repository that contains your Python SDK code.
Configure output
location
In the group
for your Python SDK, change the output location in from local-file-system
(the default) to pypi
to indicate that Fern should publish your package directly to the PyPi registry:
Generate a PyPi token
Configure PyPi publication
Choose your publishing mode
Optionally set the mode to control how Fern handles SDK publishing:
mode: release
(default): Fern generates code, commits to main, and tags a release automaticallymode: pull-request
: Fern generates code and creates a PR for you to review before releasemode: push
: Fern generates code and pushes to a branch you specify for you to review before release
You can also configure other settings, like the reviewers or license. Refer to the full github
(generators.yml
) reference for more information.
Publish your SDK
Decide how you want to publish your SDK to PyPi. You can use GitHub workflows for automated releases or publish directly via the CLI.
Release via a GitHub workflow (recommended)
Set up a release workflow via GitHub Actions so you can trigger new SDK releases directly from your source repository.
Set up authentication
Open your Fern repository in GitHub. Click on the Settings tab in your repository. Then, under the Security section, open Secrets and variables > Actions.

You can also use the url https://github.com/<your-repo>/settings/secrets/actions
.
Add secret for your PyPi Token
- Select New repository secret.
- Name your secret
PYPI_TOKEN
. - Add the corresponding token you generated above.
- Click Add secret.

Add secret for your Fern Token
- Select New repository secret.
- Name your secret
FERN_TOKEN
. - Add your Fern token. If you don’t already have one, generate one by
running
fern token
. By default, thefern_token
is generated for the organization listed infern.config.json
. - Click Add secret.
Set up a new workflow
Set up a CI workflow that you can manually trigger from the GitHub UI. In your repository, navigate to Actions. Select New workflow, then Set up workflow yourself. Add a workflow that’s similar to this:
Regenerate and release your SDK
Navigate to the Actions tab, select the workflow you just created, specify a version number, and click Run workflow. This regenerates your SDK.

The rest of the release process depends on your chosen mode:
-
Release mode (default): If you didn’t specify a
mode
or setmode: release
, no further action is required. Fern automatically tags the new release with your specified version number and initiates the publishing workflow in your SDK repository. -
Pull request or push mode: If you set
mode: pull-request
ormode: push
, Fern creates a pull request or pushes to a branch respectively. Review and merge the PR (pull-request
) or branch (push
), then tag a new release to initiate the publishing workflow in your SDK repository.
Once the workflow completes, you can view your new release by logging into PyPi and navigating to Your projects.
Release via CLI and environment variables
Regenerate and release your SDK
Regenerate your SDK, specifying the version:
The rest of the release process depends on your chosen mode:
-
Release mode (default): If you didn’t specify a
mode
or setmode: release
, no further action is required. Fern automatically tags the new release with your specified version number and initiates the publishing workflow in your SDK repository. -
Pull request or push mode: If you set
mode: pull-request
ormode: push
, Fern creates a pull request or pushes to a branch respectively. Review and merge the PR (pull-request
) or branch (push
), then tag a new release to initiate the publishing workflow in your SDK repository.
Once the workflow completes, you can view your new release by logging into PyPi and navigating to Your projects.