For EIP champions

Make your EIP legible

Most people deciding whether to back your EIP are not on the client teams. They are app developers, rollup teams, wallet maintainers, stakers, and node operators, and what they read is the Forkcast summary of your proposal, not the spec. You are the person best placed to write that summary. This page explains each field, what a good answer looks like, and how to open a PR with it.

This is a guide for writing data, not a governance requirement. Nothing here is a prerequisite for proposing an EIP or getting it considered for a fork.

TL;DR

Edit your EIP's file at src/data/eips/{your EIP number}.json and open a PR to ethereum/forkcast. Fill in laymanDescription, benefits, tradeoffs, all eight stakeholderImpacts keys, and a faq, then set "reviewer" to "expert".

Reference 8025.json as a starting point and see how it renders on the site. Everything below is detail on what makes each field good.

Where this data shows up

  • EIP page, Analysis tab

    Your layman description leads as the TL;DR, followed by benefits, tradeoffs, and stakeholder impacts.

  • EIP page, FAQ tab

    Each answer gets its own deep link, so people can cite a single answer in a thread.

  • Upgrade page cards

    Expanding an EIP shows your benefits, tradeoffs, and stakeholder impacts.

  • Stakeholder view

    Groups every EIP in a fork by who it affects, built entirely from your stakeholder impacts.

How to submit

  1. 1
  2. 2

    Edit the file for your EIP, or create it if it does not exist yet.

    src/data/eips/{EIP_NUMBER}.json
  3. 3

    Validate that the file parses and matches the schema.

    npm install && npm run compile-eips
  4. 4

    Confirm your EIP is no longer flagged as missing data.

    npm run audit-eips -- --fork <ForkName>
  5. 5

    Open a PR titled "Add EIP-{number}: {title}", or "Update EIP-{number}" for edits to an existing file.

Shortcut: skip the local checkout

You do not need to clone anything. Open your EIP's file in src/data/eips, hit the edit button, and GitHub will fork the repo and open the PR for you.

Two things to know before you edit

  • Leave title, description, author, status, createdDate, type, category, and requires alone. A sync job pulls those from ethereum/EIPs and will overwrite hand edits.
  • Set "reviewer": "expert" when you wrote the content yourself. That marks it as champion-authored rather than bot-generated.

Field guide

Every field below is optional in the schema, but the first five are what the site actually renders, and what the data audit checks for.

laymanDescription

A short paragraph answering: what changes for someone who does not read specs? Around 60 words, plain language, no jargon and no unexpanded acronyms.

Good

"Normally every validator must replay each block's transactions against the full Ethereum state to check it is valid — costly work that grows with the gas limit. This lets volunteer nodes produce small cryptographic proofs that others can verify cheaply, without holding the state. It is fully opt-in and changes no consensus rules."

Weak

"Introduces a CL-side mechanism for stateless payload validity attestation via gossiped zkVM execution proofs over a guest program commitment."

This is the abstract restated. If a reader needs the spec to parse it, it is not a layman description.

benefits

An array of strings, roughly four to six items, each one claim, ideally under ~16 words. Each item should be independently checkable by a skeptical reader. Facts, not marketing.

Good

"Keeps pool rule changes under hard-fork governance rather than admin keys, proxies, or pause controls"

Weak

"Dramatically improves the Ethereum user experience"

Nothing here can be verified or disputed.

Worked example: EIP-8182.

tradeoffs

Same shape as benefits: short, single-claim strings. Use null only if there genuinely are none.

An honest tradeoffs list buys you more credibility with client teams than an empty one. Reviewers will find the costs anyway; naming them first shows you understand your own proposal.

Things worth naming:

  • New security surface, especially new cryptography or trusted setups.
  • State growth that cannot be pruned.
  • Implementation burden on client teams, tooling, or wallets.
  • Anything irreversible without a subsequent hard fork.

stakeholderImpacts

All eight keys are required, about 20 words each. This field powers the stakeholder view, so an omitted key means your EIP silently disappears from that audience's list.

endUsers People transacting on Ethereum
appDevs Smart contract and dapp developers
walletDevs Wallet software maintainers
toolingInfra Indexers, explorers, RPC providers, analytics
layer2s Rollups and L2 teams
stakersNodes Validators and node operators
clClients Consensus layer client teams
elClients Execution layer client teams
  • Write "No impact." explicitly rather than omitting a key. A missing key reads as an oversight; an explicit "no impact" reads as a decision.
  • For clClients and elClients, describe implementation complexity, not user benefit. These two entries are what client teams scan first.

Good (elClients)

"Implement the shielded-pool system contract, Groth16 BN254 verification, and nullifier tracking"

Weak (elClients)

"Some work required"

faq

An array of {question, answer} pairs. Write questions in the reader's voice, not yours: "Does this change gas costs?" rather than "Gas cost considerations".

  • Answers support markdown: bold, lists, links, code fences, and multiple paragraphs via \n\n.
  • Each answer is individually deep-linkable via ?tab=faq&q=N, so keep one question per item and make each answer stand alone.

A solid starter set:

  • What's in EIP-N?
  • What problem does it solve?
  • Why now, and why this fork?
  • What does it explicitly not do?
  • What breaks, and for whom?
  • What is still open or unresolved?

Worked example: EIP-8025.

Smaller fields

layer
"EL" or "CL", chosen by the substance of the change. Not by which call it was presented on — the venue only reflects which working group shepherded the discussion.
supportingDocuments
{label, url} entries for benchmarks, analyses, and prototype writeups. This is where the evidence behind your benefits list belongs.
forkRelationships[].champions
Maximum three per fork relationship. name plus any of discord, telegram, or email, so client teams have a way to reach you.
discussionLink and specificationUrl
discussionLink is the discussion thread, usually Eth Magicians. Set specificationUrl only for unmerged EIPs, where the default eips.ethereum.org URL would 404; point it at the GitHub PR instead.

Annotated template

The champion-owned subset of the schema. Copy this into src/data/eips/{id}.json, replace the placeholders, and delete any optional block you are not using.

{
  "id": 9999,
  "layer": "EL",
  "reviewer": "expert",
  "discussionLink": "https://ethereum-magicians.org/t/your-thread/00000",

  "laymanDescription": "Two or three plain sentences. What changes, for someone who does not read specs.",

  "benefits": [
    "One concrete, checkable claim, ideally under ~16 words",
    "Another one",
    "Aim for four to six of these total"
  ],

  "tradeoffs": [
    "An honest cost, risk, or burden this introduces",
    "Use null instead of an empty array only if there truly are none"
  ],

  "stakeholderImpacts": {
    "endUsers": { "description": "About 20 words, or 'No impact.'" },
    "appDevs": { "description": "About 20 words, or 'No impact.'" },
    "walletDevs": { "description": "About 20 words, or 'No impact.'" },
    "toolingInfra": { "description": "About 20 words, or 'No impact.'" },
    "layer2s": { "description": "About 20 words, or 'No impact.'" },
    "stakersNodes": { "description": "About 20 words, or 'No impact.'" },
    "clClients": { "description": "Implementation complexity, not user benefit." },
    "elClients": { "description": "Implementation complexity, not user benefit." }
  },

  "faq": [
    { "question": "What's in EIP-9999?", "answer": "Markdown is supported, including **bold**, lists, links, and \n\n for paragraphs." },
    { "question": "What problem does it solve?", "answer": "..." }
  ],

  "supportingDocuments": [
    { "label": "Benchmark results", "url": "https://..." }
  ],

  "forkRelationships": [
    {
      "forkName": "Glamsterdam",
      "statusHistory": [{ "status": "Proposed", "call": "acde/999", "date": "2026-01-01" }],
      "champions": [{ "name": "Your Name", "discord": "@yourhandle" }]
    }
  ]
}

Before you open the PR

  • All eight stakeholder impacts are filled in, including the "No impact" ones.
  • tradeoffs is a real list, or deliberately null because there genuinely are none.
  • Every benefit and tradeoff is a single claim, ideally under ~16 words.
  • The layman description has no jargon and no acronyms, ideally under ~60 words.
  • Each FAQ answer stands on its own, because it can be linked to in isolation.
  • npm run compile-eips passes.
  • npm run audit-eips reports no issues for your EIP.