Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion fern/products/cli-api-reference/pages/commands.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ hideOnThisPage: true

<CodeBlock title="terminal">
```bash
fern generate [--group <group>] [--api <api>] [--version <version>] [--preview] [--fernignore <path>] [--local] [--force] [--no-replay]
fern generate [--group <group>] [--api <api>] [--version <version>] [--preview] [--fernignore <path>] [--local] [--force] [--no-replay] [--pack] [--pack-mode <mode>]
```
</CodeBlock>

Expand Down Expand Up @@ -294,6 +294,43 @@ hideOnThisPage: true
`--no-replay` works only for local generation (`--local`).
</Note>

### pack

Use `--pack` to build a distributable package artifact for every generator in the run whose [output location](/learn/sdks/reference/generators-yml#output) is `local-file-system`. Artifacts are written to a `fern-dist/` folder inside that generator's output directory, so a generated SDK can be handed to internal consumers without publishing it to a public registry. `--pack` works with both cloud and local (`--local`) generation, and implies full project output so the artifact includes the project metadata files (`pyproject.toml`, `README.md`, and similar) it needs to build.

```bash
# Package every local-file-system output
fern generate --pack

# Package one group generated locally
fern generate --group python-sdk --local --pack
```

| Language | Artifact |
|----------|----------|
| TypeScript | npm tarball (`.tgz`) |
| Python | wheel (`.whl`) |
| Java | JAR |
| C# | NuGet package (`.nupkg`) |
| Ruby | gem (`.gem`) |
| PHP | Composer archive (`.zip`) |
| Rust | crate (`.crate`) |
| Go | module source archive (`.zip`), since `go get` always fetches source |

Swift SDKs are distributed as Swift Package Manager source packages, so packaging logs a warning instead of producing an artifact: share the output directory or reference it as a local package dependency. If packaging fails for one or more generators, the CLI reports them together as `Packaging failed for: <generators>` and removes any empty `fern-dist/` directory it created.

`--pack` can't be combined with `--preview` or with docs generation (`--docs`).

### pack-mode

Use `--pack-mode <mode>` to choose where `--pack` runs the packaging toolchains. `host` (the default) uses the toolchains installed on the machine (`npm`, `pip`, `gradle`, `dotnet`, `gem`, `composer`, `cargo`). `docker` runs each toolchain inside its official image (`node`, `python`, `gradle`, `dotnet/sdk`, `ruby`, `composer`, `rust`) with the output directory mounted, so no language toolchains are required locally. Docker mode uses `docker` as the container runtime unless you pass `--runner podman`.

```bash
fern generate --group python-sdk --pack --pack-mode docker
```

`--pack-mode` requires `--pack`.

</Accordion>

<Accordion title="fern check">
Expand Down
2 changes: 2 additions & 0 deletions fern/products/sdks/deep-dives/self-hosted.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ fern generate --group python-sdk --local

To pull generator images from a private registry your organization controls instead of Docker Hub, see [Private registry setup](#private-registry-setup).

To hand the generated SDK to internal consumers as an installable package instead of a source directory, add [`--pack`](/learn/cli-api-reference/cli-reference/commands#pack), which builds the language's package artifact into a `fern-dist/` folder inside the output directory.

</Step>
</Steps>

Expand Down
2 changes: 2 additions & 0 deletions fern/products/sdks/reference/generators-yml-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -939,6 +939,8 @@ Set to "local-file-system" for local output
<ParamField path="path" type="string" required={true}>
Local directory path where generated files will be saved
</ParamField>

To turn a local output into an installable artifact (npm tarball, wheel, JAR, and so on) without publishing it to a registry, run [`fern generate --pack`](/learn/cli-api-reference/cli-reference/commands#pack).
</Accordion>
</AccordionGroup>

Expand Down
Loading