From b4e01a0badff099401f8aca4adbe0e22e9dc5dfd Mon Sep 17 00:00:00 2001 From: Nermina Date: Fri, 13 Nov 2026 21:23:00 +0000 Subject: [PATCH 1/4] docs: add Try Fern without an account page for guest sessions and Fern Drop Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../cli-api-reference/pages/docs-commands.mdx | 2 +- .../cli-api-reference/pages/sdk-commands.mdx | 2 +- .../docs/pages/getting-started/quickstart.mdx | 2 +- fern/products/home/home.yml | 2 + .../home/pages/try-without-account.mdx | 156 ++++++++++++++++++ 5 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 fern/products/home/pages/try-without-account.mdx diff --git a/fern/products/cli-api-reference/pages/docs-commands.mdx b/fern/products/cli-api-reference/pages/docs-commands.mdx index c3e53c5e5..0a26aeb22 100644 --- a/fern/products/cli-api-reference/pages/docs-commands.mdx +++ b/fern/products/cli-api-reference/pages/docs-commands.mdx @@ -83,7 +83,7 @@ These commands build, preview, and publish a Fern documentation site, and valida fern generate --docs --guest ``` - `--guest` can't be combined with `FERN_TOKEN` or a saved login. Add `--new-session` to discard the saved guest session and start a fresh one. + `--guest` can't be combined with `FERN_TOKEN` or a saved login. Add `--new-session` to discard the saved guest session and start a fresh one. For the full flow, limits, and expiration, see [Try Fern without an account](/learn/home/try-without-account). diff --git a/fern/products/cli-api-reference/pages/sdk-commands.mdx b/fern/products/cli-api-reference/pages/sdk-commands.mdx index 92bd58856..e7bfae2f7 100644 --- a/fern/products/cli-api-reference/pages/sdk-commands.mdx +++ b/fern/products/cli-api-reference/pages/sdk-commands.mdx @@ -180,7 +180,7 @@ These commands generate SDKs from your API definition, keep generators up to dat fern generate --guest ``` - `--guest` can't be combined with `FERN_TOKEN`, a saved login, `--local` or `--runner`. Add `--new-session` to discard the saved guest session and start a fresh one. For docs, see [`fern generate --docs --guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest). + `--guest` can't be combined with `FERN_TOKEN`, a saved login, `--local` or `--runner`. Add `--new-session` to discard the saved guest session and start a fresh one. For docs, see [`fern generate --docs --guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest). For the full flow, limits, and expiration, see [Try Fern without an account](/learn/home/try-without-account). ### no-replay diff --git a/fern/products/docs/pages/getting-started/quickstart.mdx b/fern/products/docs/pages/getting-started/quickstart.mdx index c013f91a3..e9949dc2d 100644 --- a/fern/products/docs/pages/getting-started/quickstart.mdx +++ b/fern/products/docs/pages/getting-started/quickstart.mdx @@ -311,7 +311,7 @@ Build and publish a docs site with Fern. Follow the [Docs quickstart](https://bu fern generate --docs --guest ``` - [`--guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest) starts a temporary guest session and publishes your site to a `drop-.docs.buildwithfern.com` URL, ignoring the `organization` in `fern.config.json` and the URL in `docs.yml`. The output includes a claim link; open it (or run [`fern claim`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) after `fern login`) to move the site into your organization before the session expires. Guest publishing needs CLI 5.182.0 or later: the `version` in `fern.config.json` is what runs, so run [`fern upgrade`](/learn/cli-api-reference/cli-reference/general-commands#fern-upgrade) if yours is older. Guest sessions aren't available on every Fern environment yet; if the CLI reports `Could not start a guest session`, log in and publish normally. + [`--guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest) starts a temporary guest session and publishes your site to a `drop-.docs.buildwithfern.com` URL, ignoring the `organization` in `fern.config.json` and the URL in `docs.yml`. The output includes a claim link; open it (or run [`fern claim`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) after `fern login`) to move the site into your organization before the session expires. See [Try Fern without an account](/learn/home/try-without-account) for the full flow, limits, and expiration. Guest publishing needs CLI 5.182.0 or later: the `version` in `fern.config.json` is what runs, so run [`fern upgrade`](/learn/cli-api-reference/cli-reference/general-commands#fern-upgrade) if yours is older. Guest sessions aren't available on every Fern environment yet; if the CLI reports `Could not start a guest session`, log in and publish normally. **No account**: If the user isn't logged in and has no `FERN_TOKEN`, don't ask them to log in. Run `fern generate --docs --guest` (no `--no-prompt` or `--preview` needed) and return the published `drop-` URL and the claim link from the output. Tell the user the site is temporary and is deleted unless they claim it before the guest session expires. `--guest` can't be combined with `FERN_TOKEN` or a saved login. diff --git a/fern/products/home/home.yml b/fern/products/home/home.yml index ce073720a..0c9a08ad6 100644 --- a/fern/products/home/home.yml +++ b/fern/products/home/home.yml @@ -1,6 +1,8 @@ navigation: - page: Home path: ./pages/welcome.mdx + - page: Try Fern without an account + path: ./pages/try-without-account.mdx - page: Get started with a coding agent path: ./pages/agent-onboarding.mdx hidden: true diff --git a/fern/products/home/pages/try-without-account.mdx b/fern/products/home/pages/try-without-account.mdx new file mode 100644 index 000000000..5f537cd7c --- /dev/null +++ b/fern/products/home/pages/try-without-account.mdx @@ -0,0 +1,156 @@ +--- +title: Try Fern without an account +slug: try-without-account +description: Publish a docs site or generate an SDK from an OpenAPI spec with no Fern account using a temporary guest session, then claim the work into your organization. +--- + +The Fern CLI can publish docs and generate SDKs without a Fern account. Add `--guest` to `fern generate` and the CLI starts a temporary guest session with its own guest organization. Docs publish to a temporary Fern Drop site, and SDKs download to your project. To keep the work, claim the session into an organization before it expires. + +Guest mode is built for coding agents. The agent runs the CLI and stops at the claim link; you finish in the browser. + +## Use a coding agent + +Give Claude Code, Cursor, Codex, Devin, or a similar agent your OpenAPI spec and ask for a docs site or an SDK. For best results, first install the [Fern agent skills](/learn/docs/ai-features/agent-skills) with `npx skills add fern-api/skills --all`. + + +I have this OpenAPI spec `./openapi.yml` and I need to create a docs website for this spec using Fern. Can you do this for me? + + + +I have this OpenAPI spec `./openapi.yml` and I need to generate an SDK for this using Fern. Can you do this for me? + + +The agent creates a `fern` folder, runs `fern check`, then runs `fern generate --docs --guest` or `fern generate --guest`. It reports the drop site URL or the SDK's output path and build link, plus the claim link and the session's expiry. To claim the work, continue from [Claim the work](#claim-the-work). + +## Run it yourself + + + + + Install the CLI and create a `fern` folder. For docs, follow the [Docs quickstart](/learn/docs/getting-started/quickstart); for SDKs, follow the [SDKs quickstart](/learn/sdks/overview/quickstart). The `organization` in `fern.config.json` only names the project at this point. + + + + + + + + ```bash + fern generate --docs --guest + ``` + + The CLI publishes the site to a `https://drop-.docs.buildwithfern.com` URL, ignoring the `organization` in `fern.config.json` and the `instances` URL in `docs.yml`. A banner on the site says it's unclaimed and when it expires. + + The CLI also uploads your `fern` folder with the site, so connecting a GitHub repository after you claim the site commits the folder to that repository. Add `--no-source` to publish without it. + + + + + ```bash + fern generate --guest + ``` + + The CLI writes each SDK to its output path. Guests can only download SDKs: a target that publishes to GitHub or a package registry fails the run. Add `--preview` to write every target to `fern/.preview//`, or set the target's output to local files. Generated code keeps the names from the `organization` in `fern.config.json`. + + The output includes a build link to a public build page, where you can download the SDK for 7 days. Rerunning with the same inputs returns the finished build without spending usage. + + + + + The first `--guest` run prints the session ID, the guest organization, the expiry time, and the claim link: + + ```txt + Started guest session gs_7416b9841b13 as organization guest-6dd35d51ee9e (expires 11/14/2026, 12:23:08 AM). + Claim it to keep this work: https://dashboard.buildwithfern.com/claim/gs_7416b9841b13?from=sdk#... + ``` + + Treat the claim link like a password. The part after `#` is a secret, and anyone with the link can claim the session. + + + + + Open the claim link and sign in to the Fern Dashboard. Choose a new organization or one you administer, then enter the docs URL (`.docs.buildwithfern.com`) or a name for the SDK that's unique in the organization. Select **Claim**. + + To claim from the terminal instead, sign in and run [`fern claim`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) in the same repository: + + ```bash + fern login + fern claim + ``` + + By default, `fern claim` turns the guest organization into your own. Pass `--org ` to move the work into an existing organization you administer. Either way, claiming requires a signed-in user, so an agent can't do it for you. + + After the claim, the CLI points `fern.config.json` at the organization and removes the guest session. Later runs use `fern login` or `FERN_TOKEN` without `--guest`. + + + + + + + + The site appears in your organization's docs list as **Publishing**, then **Live**, at `.docs.buildwithfern.com`. The old `drop-` URL redirects there for 24 hours. + + To manage the site from a repository, open the site's overview and select **Connect GitHub**. Create a repository or choose an existing one, then share it with the [Fern GitHub App](/learn/dashboard/configuration/github-repo). Fern commits your `fern` folder, a publish workflow, and a README to `main`. After that, edits are pull requests, and merging publishes the site. + + + + + The SDK appears on your organization's SDKs page with **Download** and **Publish to GitHub**. Select **Publish to GitHub**, create a repository or choose an existing one, then share it with the [Fern GitHub App](/learn/dashboard/configuration/github-repo). Fern pushes the SDK to `main`. + + To regenerate the SDK from CI when the spec changes, select **Set up Fern repository** on the SDK's card. Fern commits your `fern` folder, a regenerate workflow, and a README to a repository you choose. + + + + + If the dialog reports that Fern can't see the repository after you share it, select **Reconnect GitHub** in the dialog or re-authorize GitHub. + + + + +## Expiration + +| What | How long it lasts | +| --- | --- | +| Guest session and its claim link | 3 hours from creation | +| Drop site | Until the session expires. The banner on the site shows the exact time. | +| SDK build and its public build page | 7 days from the build | +| Grant from opening the claim link | 10 minutes, single use. Reopen the link if the claim page sat longer. | +| Drop URL redirect after a docs claim | 24 hours | + +The CLI warns when less than an hour is left in the session, and a run that crosses the deadline fails. Work that you claim follows your organization's normal retention. + +## Usage limits + +| Limit | Default | +| --- | --- | +| SDK build units per session | 5. Each target in a build spends one unit, so a TypeScript and Python build spends 2. | +| Docs publishes per session | 10 | +| New sessions | 3 per machine per day, 60 per IP address per hour | +| Drop site size | 200 pages and 50 MB | +| Publishes per drop site | 20 | +| New drop sites | 10 per IP address per hour | + +A build that never runs doesn't spend a unit. When a session runs out, the CLI fails with `GUEST_LIMIT_REACHED` and the session keeps its work. Claim the session or log in to continue. + +## Commands and options + +| Command or option | What it does | +| --- | --- | +| [`fern generate --guest`](/learn/cli-api-reference/cli-reference/sdk-commands#guest) | Generates SDKs on a guest session and writes them to their output paths. | +| [`fern generate --docs --guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest) | Publishes docs to a drop site on a guest session. | +| `--no-source` | With `--docs --guest`, publishes without uploading the `fern` folder. | +| `--new-session` | With `--guest`, starts a new guest session and guest organization. Earlier guest work isn't carried over. | +| [`fern claim [--org ]`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) | Claims this repository's guest session. Requires `fern login`. | +| [`fern whoami`](/learn/cli-api-reference/cli-reference/general-commands#fern-whoami) | Shows the login, `FERN_TOKEN`, or guest session in use, with the session's ID, organization, and expiry. | + +The CLI records the session in `fern/.guest-session`, which it gitignores, and keeps the credential in `~/.fern/guest-sessions/`. Later `--guest` runs in the same repository reuse the session. + +`--guest` can't be combined with `--local` or `--runner`, and it refuses to run when `FERN_TOKEN` is set or a login is saved. Unset `FERN_TOKEN` or run `fern logout` to continue as a guest, or drop `--guest` to use your account. + +Use `--new-session` only when the session expired, was revoked, or was already claimed. After a limit error, claim the session instead; a new session counts against the daily limit. From ee210235b83805b080b6d692c1a37ca224db9e17 Mon Sep 17 00:00:00 2001 From: Nermina Date: Fri, 13 Nov 2026 21:34:24 +0000 Subject: [PATCH 2/4] chore: bump Fern CLI to 5.215.2 to unblock preview Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/fern.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/fern.config.json b/fern/fern.config.json index f2cd624e8..d332c0b84 100644 --- a/fern/fern.config.json +++ b/fern/fern.config.json @@ -1,4 +1,4 @@ { "organization": "fern", - "version": "5.204.1" + "version": "5.215.2" } From c47c9bb54d58065bcb473fbd134a5f01ad14fc50 Mon Sep 17 00:00:00 2001 From: Nermina Date: Fri, 13 Nov 2026 21:47:45 +0000 Subject: [PATCH 3/4] docs: move guest page to Docs > Getting started Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/products/cli-api-reference/pages/docs-commands.mdx | 2 +- fern/products/cli-api-reference/pages/sdk-commands.mdx | 2 +- fern/products/docs/docs.yml | 2 ++ fern/products/docs/pages/getting-started/quickstart.mdx | 2 +- .../pages/getting-started}/try-without-account.mdx | 0 fern/products/home/home.yml | 2 -- 6 files changed, 5 insertions(+), 5 deletions(-) rename fern/products/{home/pages => docs/pages/getting-started}/try-without-account.mdx (100%) diff --git a/fern/products/cli-api-reference/pages/docs-commands.mdx b/fern/products/cli-api-reference/pages/docs-commands.mdx index 0a26aeb22..87fd32021 100644 --- a/fern/products/cli-api-reference/pages/docs-commands.mdx +++ b/fern/products/cli-api-reference/pages/docs-commands.mdx @@ -83,7 +83,7 @@ These commands build, preview, and publish a Fern documentation site, and valida fern generate --docs --guest ``` - `--guest` can't be combined with `FERN_TOKEN` or a saved login. Add `--new-session` to discard the saved guest session and start a fresh one. For the full flow, limits, and expiration, see [Try Fern without an account](/learn/home/try-without-account). + `--guest` can't be combined with `FERN_TOKEN` or a saved login. Add `--new-session` to discard the saved guest session and start a fresh one. For the full flow, limits, and expiration, see [Try Fern without an account](/learn/docs/getting-started/try-without-account). diff --git a/fern/products/cli-api-reference/pages/sdk-commands.mdx b/fern/products/cli-api-reference/pages/sdk-commands.mdx index e7bfae2f7..cf4043a48 100644 --- a/fern/products/cli-api-reference/pages/sdk-commands.mdx +++ b/fern/products/cli-api-reference/pages/sdk-commands.mdx @@ -180,7 +180,7 @@ These commands generate SDKs from your API definition, keep generators up to dat fern generate --guest ``` - `--guest` can't be combined with `FERN_TOKEN`, a saved login, `--local` or `--runner`. Add `--new-session` to discard the saved guest session and start a fresh one. For docs, see [`fern generate --docs --guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest). For the full flow, limits, and expiration, see [Try Fern without an account](/learn/home/try-without-account). + `--guest` can't be combined with `FERN_TOKEN`, a saved login, `--local` or `--runner`. Add `--new-session` to discard the saved guest session and start a fresh one. For docs, see [`fern generate --docs --guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest). For the full flow, limits, and expiration, see [Try Fern without an account](/learn/docs/getting-started/try-without-account). ### no-replay diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index 33c817dd7..ec8d00b65 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -7,6 +7,8 @@ navigation: path: ./pages/getting-started/how-it-works.mdx - page: Quickstart path: ./pages/getting-started/quickstart.mdx + - page: Try Fern without an account + path: ./pages/getting-started/try-without-account.mdx - page: Self-service setup path: ./pages/getting-started/self-service-setup.mdx hidden: true diff --git a/fern/products/docs/pages/getting-started/quickstart.mdx b/fern/products/docs/pages/getting-started/quickstart.mdx index e9949dc2d..dbbabad4b 100644 --- a/fern/products/docs/pages/getting-started/quickstart.mdx +++ b/fern/products/docs/pages/getting-started/quickstart.mdx @@ -311,7 +311,7 @@ Build and publish a docs site with Fern. Follow the [Docs quickstart](https://bu fern generate --docs --guest ``` - [`--guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest) starts a temporary guest session and publishes your site to a `drop-.docs.buildwithfern.com` URL, ignoring the `organization` in `fern.config.json` and the URL in `docs.yml`. The output includes a claim link; open it (or run [`fern claim`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) after `fern login`) to move the site into your organization before the session expires. See [Try Fern without an account](/learn/home/try-without-account) for the full flow, limits, and expiration. Guest publishing needs CLI 5.182.0 or later: the `version` in `fern.config.json` is what runs, so run [`fern upgrade`](/learn/cli-api-reference/cli-reference/general-commands#fern-upgrade) if yours is older. Guest sessions aren't available on every Fern environment yet; if the CLI reports `Could not start a guest session`, log in and publish normally. + [`--guest`](/learn/cli-api-reference/cli-reference/docs-commands#guest) starts a temporary guest session and publishes your site to a `drop-.docs.buildwithfern.com` URL, ignoring the `organization` in `fern.config.json` and the URL in `docs.yml`. The output includes a claim link; open it (or run [`fern claim`](/learn/cli-api-reference/cli-reference/general-commands#fern-claim) after `fern login`) to move the site into your organization before the session expires. See [Try Fern without an account](/learn/docs/getting-started/try-without-account) for the full flow, limits, and expiration. Guest publishing needs CLI 5.182.0 or later: the `version` in `fern.config.json` is what runs, so run [`fern upgrade`](/learn/cli-api-reference/cli-reference/general-commands#fern-upgrade) if yours is older. Guest sessions aren't available on every Fern environment yet; if the CLI reports `Could not start a guest session`, log in and publish normally. **No account**: If the user isn't logged in and has no `FERN_TOKEN`, don't ask them to log in. Run `fern generate --docs --guest` (no `--no-prompt` or `--preview` needed) and return the published `drop-` URL and the claim link from the output. Tell the user the site is temporary and is deleted unless they claim it before the guest session expires. `--guest` can't be combined with `FERN_TOKEN` or a saved login. diff --git a/fern/products/home/pages/try-without-account.mdx b/fern/products/docs/pages/getting-started/try-without-account.mdx similarity index 100% rename from fern/products/home/pages/try-without-account.mdx rename to fern/products/docs/pages/getting-started/try-without-account.mdx diff --git a/fern/products/home/home.yml b/fern/products/home/home.yml index 0c9a08ad6..ce073720a 100644 --- a/fern/products/home/home.yml +++ b/fern/products/home/home.yml @@ -1,8 +1,6 @@ navigation: - page: Home path: ./pages/welcome.mdx - - page: Try Fern without an account - path: ./pages/try-without-account.mdx - page: Get started with a coding agent path: ./pages/agent-onboarding.mdx hidden: true From 4ecd5ef439c3a4fad227a246995a5b4c4dda2e6d Mon Sep 17 00:00:00 2001 From: Nermina Date: Fri, 13 Nov 2026 21:53:16 +0000 Subject: [PATCH 4/4] docs: fix guest page slug under Getting started Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/products/docs/docs.yml | 1 + fern/products/docs/pages/getting-started/try-without-account.mdx | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index ec8d00b65..c3c1a3157 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -9,6 +9,7 @@ navigation: path: ./pages/getting-started/quickstart.mdx - page: Try Fern without an account path: ./pages/getting-started/try-without-account.mdx + slug: try-without-account - page: Self-service setup path: ./pages/getting-started/self-service-setup.mdx hidden: true diff --git a/fern/products/docs/pages/getting-started/try-without-account.mdx b/fern/products/docs/pages/getting-started/try-without-account.mdx index 5f537cd7c..1baae8608 100644 --- a/fern/products/docs/pages/getting-started/try-without-account.mdx +++ b/fern/products/docs/pages/getting-started/try-without-account.mdx @@ -1,6 +1,5 @@ --- title: Try Fern without an account -slug: try-without-account description: Publish a docs site or generate an SDK from an OpenAPI spec with no Fern account using a temporary guest session, then claim the work into your organization. ---