# @chrismessina/raycast-faker

> Real-looking, obscured data for Store screenshots of Raycast extensions that show personal data

Latest version **0.1.1** (published 2026-09-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install @chrismessina/raycast-faker
pnpm add @chrismessina/raycast-faker
yarn add @chrismessina/raycast-faker
bun add @chrismessina/raycast-faker
```

Provides the command `raycast-faker`.

## Health

**Score 70/100 (B)** — status: active.

Positive: has types; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.1.1 |
| Published | 2026-09-26 |
| First published | 2026-09-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 34.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 0 |
| Author | Chris Messina |
| Maintainers | chrismessina |
| Keywords | raycast, screenshots, fixtures, privacy, faker |

## Links

- npm: https://www.npmjs.com/package/@chrismessina/raycast-faker
- Repository: https://github.com/chrismessina/raycast-faker
- Homepage: https://github.com/chrismessina/raycast-faker#readme
- Issues: https://github.com/chrismessina/raycast-faker/issues
- npm.io page: https://npm.io/package/@chrismessina/raycast-faker

## Alternatives

- [pagerjs](https://npm.io/package/pagerjs.md) — 60 weekly downloads
- [whistle.savefor-mock](https://npm.io/package/whistle.savefor-mock.md) — 4 weekly downloads
- [@absmartly/api-mocks](https://npm.io/package/@absmartly/api-mocks.md) — 0 weekly downloads
- [foss-design](https://npm.io/package/foss-design.md) — 0 weekly downloads
- [visual-companion](https://npm.io/package/visual-companion.md) — 0 weekly downloads

## Recent versions

- 0.1.1 (latest) — 2026-09-26
- 0.1.0 — 2026-09-26

## README

# @chrismessina/raycast-faker

Generate actual screenshots without leaking private, sensitive, or confidential data before
publishing Raycast extensions to the Raycast Store.

An extension for a bank, a CRM, a calendar, or an inbox has only one source of realistic
screens: the contributor's real data. The faker records your extension's real API responses and
scrubs them in memory. People and businesses become Twin Peaks characters and places. Text IDs,
account numbers, and free text are replaced consistently. Amounts are scaled by one hidden
factor, and dates are shifted. Then it **replays** those fixtures while you take the
screenshots, so the screens look like real use and the names, amounts, and dates on them are fake.

```ts
import { fakerKey, withFaker } from "@chrismessina/raycast-faker";

const apiFetch = withFaker(fetch, {
  hosts: ["api.example.com"],
  keep: ["status", "kind"], // enums and public data your UI reads
  names: { counterpartyName: "company", nameOnCard: "person", name: "account" },
  scale: ["amount", "balance"],
});

await LocalStorage.getItem(fakerKey("logins")); // a separate, empty store while replaying
```

```bash
npx raycast-faker record   # from the extension root; walk every screen you plan to shoot
npx raycast-faker replay   # take the screenshots
npx raycast-faker off      # back to your real data
```

- **Safe to ship.** Only development builds can record or replay. In a Store build, `withFaker`
  returns the `fetch` you gave it and `fakerKey` returns its key.
- **No raw response is written.** Fixtures and secrets live in `~/.config/raycast-faker/<extension>/`,
  outside the extension folder, because `ray publish` ships everything inside it. Responses are
  scrubbed before they're saved, and a fixture in which a replaced value survives in a kept field
  is refused.
- **Fail-closed.** Every string value is replaced unless a rule keeps it or it's a one- or
  two-letter code. In replay, a request with no fixture fails instead of reaching the real API.
- **Know the limits.** Object keys, numbers other than money, and some path segments are left as
  they are. Other caches, downloads, and SDKs with their own transport need handling in the
  extension. The spec lists them under "What the faker doesn't cover."

[docs/SPEC.md](docs/SPEC.md) covers the rules, the modes, and what each kind of value becomes. The step-by-step
screenshot procedure is the `screenshots` skill in `raycast-extensions-skills`.

---
_Source: https://npm.io/package/@chrismessina/raycast-faker · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
