> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useshipd.com/llms.txt
> Use this file to discover all available pages before exploring further.

# shipd

> Feature flags, toggles, and experiments with config-as-code and type-safe SDKs.

## Overview

shipd is a feature-flag service. You define flags (toggles, switches, gates) in TypeScript, review them in PRs, and evaluate them in-process in microseconds. Your app never waits on us for a flag check.

We use the same SDK on [app.useshipd.com](https://app.useshipd.com) — `rules-editor` and `audit-log` are shipd flags.

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Define `new-checkout`, push it, evaluate it.
  </Card>

  <Card title="Define flags in code" icon="file-code" href="/guides/define-flags">
    `shipd.config.ts` + `shipd push`.
  </Card>

  <Card title="Evaluate in your app" icon="bolt" href="/guides/evaluate-flags">
    `createClient`, `isEnabled`, `getVariant`.
  </Card>

  <Card title="CLI reference" icon="terminal" href="/reference/cli">
    `login`, `pull`, `diff`, `push`, `types gen`.
  </Card>
</CardGroup>

## What you get

```ts shipd.config.ts theme={null}
import { defineFlags } from "shipdit/config";

export default defineFlags({
  "new-checkout": {
    type: "boolean",
    default: false,
    description: "Redesigned checkout flow",
    tags: ["checkout"],
  },
  "search-variant": {
    type: "variant",
    variants: ["control", "semantic", "hybrid"] as const,
    default: "control",
  },
});
```

```ts app.ts theme={null}
import { createClient } from "shipdit";
import type { FlagDefinitions } from "./generated/flags";

const shipd = createClient<FlagDefinitions>({
  sdkKey: process.env.SHIPD_SDK_KEY!,
  endpoint: "https://edge.useshipd.com",
  defaults: { "new-checkout": false, "search-variant": "control" },
});

await shipd.ready();

if (shipd.isEnabled("new-checkout", { userId: "usr_8f2k19" })) {
  return renderNewCheckout();
}
```

<AccordionGroup>
  <Accordion title="Feature flags, toggles, switches, gates — same thing">
    A **flag** is a named value your app reads at runtime: on/off, a variant, a number, or JSON. Teams also call them toggles, switches, or gates. **Variant flags** are experiments / A/B tests. This site uses **flag**.
  </Accordion>

  <Accordion title="Config as code, not a dashboard-only tool">
    The source of truth for definitions is `shipd.config.ts`. `shipd push` applies it. The dashboard is for targeting rules, rollouts, and debugging — not a second source of flag keys.
  </Accordion>

  <Accordion title="Local evaluation">
    The SDK downloads a **snapshot** (the evaluation payload) and checks flags in memory. If the edge is down, you get your `defaults`. See [Local evaluation](/concepts/local-evaluation).
  </Accordion>
</AccordionGroup>

## Paths through the docs

| If you want to…             | Go here                                                                     |
| --------------------------- | --------------------------------------------------------------------------- |
| Get a flag evaluating       | [Quickstart](/quickstart)                                                   |
| Author flags in a repo      | [Define flags in code](/guides/define-flags)                                |
| Wire the SDK                | [Evaluate flags](/guides/evaluate-flags)                                    |
| Target users / identify     | [Target users](/guides/target-users)                                        |
| Look up a command or option | [CLI](/reference/cli) · [SDK](/reference/sdk) · [Config](/reference/config) |
