Standard keys
Field keys are the stable identifiers for cells. The same string is used in YAML configs, ENS text records, EIP-712 signatures, EAS attestations, and the gridz.bio editor. The canonical registry is standard-keys.md.
Key syntax
Every key MUST match:
^[a-z0-9]([a-z0-9._\-\[\]])*[a-z0-9\]]$
This is a superset of ENS global keys (lowercase + hyphen), ENS service keys (reverse-dot), and the bracket form for agent endpoints. Maximum length 256 characters. Dynamic keys are first-class — unknown keys round-trip through every component; unknown widget_type values fall back to the Generic renderer.
Tier 1 — Inherited from ENS
Any ENS profile is a valid minimal Grid. Values follow the ENS "void of prefix" rule: store bare handles (alice), not decorated forms (@alice), unless a service requires otherwise.
Global keys (ENSIP-5)
| Key | Value | Notes |
|---|---|---|
avatar | URL / NFT URI | ENSIP-12 avatar spec |
description | string | Biography / summary |
display | string | Canonical capitalization of the name |
email | string | RFC 5322 address |
url | string | Website URL |
location, phone, keywords, mail, notice | string | Standard ENS text records |
Profile keys (ENSIP-18)
| Key | Value | Notes |
|---|---|---|
alias | string | Short display name (gridz.bio "name" maps here). Max ~50 chars by convention. |
header | URL | Banner image |
theme | string / JSON | Source for the Grid theme object |
timezone | string | IANA tz, e.g. America/New_York |
language | string | ISO 639-1 |
primary-contact | string | Preferred contact channel |
Service keys (reverse-dot)
Open namespace — any reverse-dot key with at least one dot is valid. Common examples on gridz.bio:
| Key | Service |
|---|---|
com.github | GitHub username |
com.twitter | X / Twitter handle |
com.discord | Discord handle |
xyz.farcaster | Farcaster handle |
social.bsky | Bluesky handle |
Tier 2 — Agent keys
| Key | Provenance | Notes |
|---|---|---|
agent-context | ENSIP-26 | Free-form context (text, Markdown, YAML, JSON) |
agent-endpoint[mcp] | ENSIP-26 | MCP server URL (incl. ipfs://) |
agent-endpoint[a2a] | ENSIP-26 | Agent-to-Agent protocol endpoint |
agent-registration[<registry>][<agentId>] | ENSIP-25 | Presence attests registry association; value SHOULD be "1" |
agent.capabilities | Gridz | JSON string array of declared capabilities |
agent.model, agent.version, agent.operator | Gridz | Agent metadata under the agent. prefix |
agent.oneclaw_id | Gridz | Links Grid to a 1Claw HSM-managed agent identity |
Tier 3 — Gridz widgets (gridz.*)
Gridz-defined namespace. Each key has a value schema and a 1:1 renderer component on gridz.bio. When widget_type is omitted, the key string is the render hint.
| Key | Widget |
|---|---|
gridz.message_me | Contact / DM button |
gridz.social_link | Single social link card |
gridz.stats | Stat tiles |
gridz.currently | "Currently …" status |
gridz.poll | Poll |
gridz.countdown | Countdown to a date |
gridz.clock | Live clock (timezone-aware) |
gridz.tech_stack | Tech / tool list |
gridz.tokens | Organization token listings (gridz.bio extension) |
gridz.guestbook, gridz.visitor_counter, … | See full list in repo |
Per-widget JSON schemas live under specs/widgets/*.schema.json in the gridz repo. TypeScript Zod and Python Pydantic models are generated from them.
Signing is key-agnostic
EIP-712 uses one GridzCell struct for every key — standard, agent, widget, or custom. The key string is part of the signed payload, so verifiers do not need a per-key struct registry. See Attestations.