OpenPRD is a lightweight, single-file PRD standard (prd/<slug>/prd.md) for humans and AI agents — the low-ceremony counterpart to OpenSpec's multi-file change bundles. PRD documents are private by convention; only the standard is published here. - docs/openprd.md — the standard: file layout, front-matter, the 8 required body sections, privacy, and the optional bridge to LogicSRC tasks. - packages/schemas/schemas/openprd-prd.schema.json — front-matter manifest schema. - packages/schemas/fixtures/openprd-prd.yaml — a valid manifest fixture. - packages/validators — register the openprd-prd schema. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
4.3 KiB
OpenPRD
OpenPRD is a lightweight, open standard for product requirements documents authored by humans or AI agents. It is maintained by Profullstack, Inc. as part of the LogicSRC open-standards surface.
Where OpenSpec models a change as a multi-file bundle (proposal + design + specs + tasks + deltas), OpenPRD deliberately models a product decision as one Markdown file. It answers "what are we building and why", not "how the change is structured for implementation". The single-file shape is the point: it is the low-ceremony front door that a prd CLI command can produce in one step.
Privacy
PRD documents are private by convention. Only this standard is published. Generated PRDs live under a repo-local prd/ directory that SHOULD be listed in .gitignore. Tools that write OpenPRD documents MUST NOT publish them anywhere by default.
File layout
prd/
<slug>/
prd.md # one OpenPRD document (front-matter manifest + body)
<slug>is a kebab-case identifier, unique within the repo, and equal to the manifestid.- A repo MAY contain many PRDs; each is a self-contained directory so attachments (mockups, notes) can sit beside
prd.md.
Manifest (front-matter)
Every prd.md opens with a YAML front-matter block validated by
openprd-prd.schema.json:
---
openprd: "0.1" # standard version (required)
id: park-service-expansion # kebab-case slug == directory name (required)
title: Parked-domain service expansion # (required)
status: draft # draft | review | active | shipped | archived (required)
owner: did:key:… # optional DID/handle of the accountable owner
repo: moshcoder/moshcoding # optional target repo (owner/name)
created: 2026-07-12 # optional ISO date
updated: 2026-07-12 # optional ISO date
tags: [growth, monetization] # optional labels
supersedes: [old-slug] # optional ids this PRD replaces
---
Body sections
The body is Markdown with a fixed, ordered set of ## sections. All are required (a section MAY be a single line such as _None._), which keeps every PRD skimmable and diffable:
## Problem— the user/business problem, and why it matters now.## Goals— what success looks like, as outcomes (not features).## Non-Goals— explicitly out of scope, to bound the work.## Users— who this is for; personas or segments.## Requirements— numberedR1,R2, … each prefixed with a priority tag[P0]/[P1]/[P2]. One capability per line.## UX Notes— flows, states, and constraints that shape the experience.## Success Metrics— how the goals will be measured.## Risks & Open Questions— known risks and decisions still owed.
Minimal example
---
openprd: "0.1"
id: launch-flip
title: Coming-soon → live launch flip
status: draft
---
## Problem
Parked domains have no one-click path from coming-soon to a live site.
## Goals
Owners flip a domain live and notify its waitlist in a single action.
## Non-Goals
_Building the live site itself._
## Users
Domain owners running parked pages on the service.
## Requirements
- R1 [P0] A per-domain "go live" action publishes/redirects the domain.
- R2 [P0] Flipping live emails that domain's waitlist.
- R3 [P1] The action is reversible within a grace window.
## UX Notes
One button on the domain's admin row; confirm dialog shows the waitlist size.
## Success Metrics
Time-to-live per domain; waitlist → visit conversion after launch.
## Risks & Open Questions
- Email deliverability on bulk launch sends.
- Should redirects preserve `?dn=` analytics?
Relationship to LogicSRC
OpenPRD is intentionally decoupled from the rest of LogicSRC: a PRD is just a file and needs no service to exist. When coordination is wanted, a PRD's Requirements map cleanly onto LogicSRC task documents (each R# → one task), and the PRD owner/repo reuse LogicSRC identity and repo conventions. That bridge is optional and lives in tooling, not in this standard.
Conformance
A document conforms to OpenPRD 0.1 when:
- it lives at
prd/<slug>/prd.md, - its front-matter validates against
openprd-prd.schema.json, idequals<slug>, and- all eight body sections are present in order.