@pixygon/companion
Pixiel, the companion anima that follows a person across every pearl: the spec, the renderer (Smooth, Pixel, 3D blocks, Soft), the mind, the API client and the React pieces (face, dock, hatch, sculptor, shop).
Install
# .npmrc @pixygon:registry=https://ppm.pixygon.io/ npm install @pixygon/companion@0.2.0
Versions
| Version | Published | Integrity |
|---|---|---|
| 0.2.0 latest | 2026-10-02 | sha512-4/dal9Zyz4GCQD+… |
| 0.1.1 | 2026-10-02 | sha512-Pn0inzThF410Lnf… |
| 0.1.0 | 2026-10-02 | sha512-qpbGh8xDr8cgLmw… |
@pixygon/companion
Pixiel: the companion anima that follows a person across every pearl they are signed in to. Each person hatches one from a spark, sculpts it, dresses it, and talks to it.
Decision: Dyson/docs/companion/0001-pixiel-companion.md. API: /v1/me/companion (PixygonAPI services/companion/).
| Entry | What | React? |
|---|---|---|
@pixygon/companion | the spec (generated from the API), the renderer (Smooth, Pixel, 3D blocks, Soft), the mind, the shared animation loop, the API client | no |
@pixygon/companion/react | PixielFace, SparkFace, CompanionDock (the corner chat) | yes |
@pixygon/companion/home | PixielHome for pixiel.ai: hatch, sculpt, shop, memories, conversations | yes |
Pearls don't import this directly. @pixygon/site mounts the dock through CornerChat: signed out, the pearl's concierge is unchanged; signed in, it lazy-loads the person's Pixiel.
import { CompanionDock } from '@pixygon/companion/react';
<CompanionDock token={() => auth.accessToken} slug="splitsheet" />
Rules:
- The API decides. It checks every form, gear and name value, so the client only normalises what it draws. A new option goes in PixygonAPI
services/companion/spec.js; then runnode scripts/sync-spec.mjs, andtest/spec.test.mjsfails until the two match. - Client-only. Render nothing on the server. The dock loads after first paint and only for a signed-in person.
- Reduced motion. It keeps still and only changes expression.