Skip to content

OpenPronoun

An open standard for getting pronouns right in software.

Model them, parse them, store them, and show them the way each person asked, consistently across every system that touches their name.

Draft 0.1, open for feedback. Reference libraries are MIT licensed.

Animation: the inputs 'They/Them', 'they / them / theirs' and 'them/they' drift into a pair of curly braces and come out as one structured set with five labelled forms: they, them, their, theirs, themselves.
Three ways of typing the same pronouns, one canonical set.

Pronouns show up everywhere a person’s name does: profiles, patient charts, HR systems, class rosters, chat apps, and the emails your product sends on someone’s behalf. Today almost every team solves this from scratch, and the usual answers fall short.

  • Free-text fields are flexible, but software can’t use them. You can’t safely write “They updated their settings” from a string someone typed.
  • Short dropdowns leave people out. “He / She / They / Other” tells everyone whose pronouns aren’t listed that they’re the exception.
  • Nothing interoperates. Pronouns entered in one system don’t survive the trip to the next.

Getting this wrong isn’t cosmetic. Misgendering erodes trust, and in settings like healthcare it can discourage people from seeking care at all. OpenPronoun gives teams a shared, well-tested answer so they don’t have to invent one, and so the people using their software are addressed correctly everywhere.

Different spellings, spacing, capitalization, and word order all normalize to one canonical pronoun set with every grammatical form filled in. Multiple sets, neopronouns, and answers like any pronouns or ask me are part of the model, not edge cases. See Parsing & normalization.

Because every form is stored, any part of your product can show pronouns consistently: a short label beside a name, a grammatically correct generated sentence, or a public view that leaves out sets the person only shares with some people. See Display & stringification.

Animation: a structured record in curly braces sends data along dotted lines to three surfaces: a profile card showing 'They/Them, She/Her', a generated sentence reading 'They shared their notes.', and a public view showing only 'They/Them'.
One stored record feeds a profile label, a generated sentence, and a privacy-aware public view.

Don’t want to build the UI yourself? Drop in a component, set it, and forget it. Each one looks good out of the box, takes on your product’s look when you want it to, and follows this spec without you having to read it.

Try it. Open the list to add a set, remove one, drag to reorder, or choose Custom to create your own:

They/Them
She/Her
Select one or more pronoun sets. You can choose from common pronouns, neopronouns, or create a custom set. Use arrow keys to navigate options, space to select, and enter to open the selected option for editing.
On a profileThey/ThemShe/Her
As textThey/Them, She/Her
What gets stored
[
  {
    "subjective": "they",
    "objective": "them",
    "possessive_adjective": "their",
    "possessive_pronoun": "theirs",
    "reflexive": "themselves"
  },
  {
    "subjective": "she",
    "objective": "her",
    "possessive_adjective": "her",
    "possessive_pronoun": "hers",
    "reflexive": "herself"
  }
]

This is the real PronounSelector in badge mode. It’s styled only with theme tokens to match these docs, and follows your light or dark setting.

Here’s all it takes in your app:

import { useState } from "react";
import { PronounDisplay, PronounSelector, type PronounEntry } from "@openpronoun/react";
export function ProfilePronouns() {
const [pronouns, setPronouns] = useState<PronounEntry[]>([]);
return (
<>
<PronounSelector value={pronouns} onChange={setPronouns} />
<PronounDisplay pronouns={pronouns} />
</>
);
}
  • Looks right by default. Light and dark themes, accessible names, visible focus, and full keyboard support, including reordering sets.
  • Restyles to match you. Override theme tokens, attach your own class names to each part, or swap the icons.
  • Behaves to spec. Built on @openpronoun/core, so custom sets, multiple sets, exclusions, and privacy are handled for you.

React components are available now in @openpronoun/react. Preact is in development by a community contributor, and Vue, Svelte, Solid, and a framework-free web component are open for anyone who’d like to build them. The components guide covers everything they do and how to restyle them.

Working with the data directly, or in a framework without components yet? Start with @openpronoun/core.

Terminal window
npm install @openpronoun/core
import { parse, format } from "@openpronoun/core";
const pref = parse("they/them, she/her");
// [{ subjective: "they", objective: "them", possessive_adjective: "their",
// possessive_pronoun: "theirs", reflexive: "themselves" },
// { subjective: "she", ... }]
format(pref!); // "They/Them, She/Her"
format(pref!, { form: "expanded" }); // "They/Them/Theirs, She/Her/Hers"
parse("any pronouns"); // [{ type: "any" }]
parse("no pronouns"); // [{ type: "none" }] (use their name)
parse("fae/faer"); // known neopronoun set, all five forms

The usage guide covers validation and privacy filtering, with live examples for React, Vue, Svelte, Solid, Preact, Alpine, and vanilla JS.

Designed around the people being described

Section titled “Designed around the people being described”

The spec bakes in a few commitments, so every implementation inherits them.

  • No “Other” bucket. Anything that doesn’t match a known set is kept exactly as the person wrote it, never rejected or mangled.
  • More than one set is normal. she/they, he/they, and ranked or unranked combinations are part of the core model.
  • Neopronouns are real pronouns. xe/xem, ze/zir, fae/faer, and others parse into full sets like any other.
  • Different answers mean different things. Any pronouns, no pronouns (use my name), ask me, and prefer not to say are distinct, and none of them is treated as a blank.
  • “Not these” is respected. A set someone has excluded is never shown or used.
  • Context and privacy travel with the data. “he/him (at work)” keeps its note, and a set shared only with some audiences stays out of public views.
  • Asking is optional. The UX guidance treats pronoun fields as optional, explained, and under the person’s control.
AreaWhat it defines
Data modelPronounSet and PronounPreference: five English forms, multiple sets with optional ranking, any / none / ask / unspecified, custom entries, exclusions, context, privacy, and language.
ParsingTurning real-world input into the model: separators, scrambled order, concatenated sets, special phrases, and freeform capture.
DisplayCanonical short and expanded strings, multiple sets, context, and capitalization.
ConformanceNormative requirements in RFC 2119 language, a published JSON Schema, and shared test fixtures.
UX & accessibilityHow to ask for pronouns respectfully and show them clearly.
Internationalization and security & privacyLanguage tagging, localization, and handling pronoun data with care.

The model lines up with emerging healthcare work such as HL7’s Gender Harmony pronoun value sets, while staying general-purpose. The overview and motivation cover the background.

PackageWhat it’s for
@openpronoun/coreReference TypeScript implementation: parse, format, validate, filterByAudience, and the pronoun lexicon.
@openpronoun/reactDrop-in React components and hooks for collecting and displaying pronouns per the spec, themeable and restylable.
@openpronoun/schemaCanonical JSON Schema for the data model.
@openpronoun/zodZod schemas and inferred TypeScript types mirroring the JSON Schema.
@openpronoun/conformanceLanguage-agnostic parsing and formatting fixtures any implementation can test against.

Writing a port in another language? Validate against @openpronoun/schema and run the @openpronoun/conformance fixtures, and you’re testing against the same expectations as the reference library. More in Reference implementations.

Implementations that meet the conformance requirements may display the badge:

Pronoun Standard Compliant

![Pronoun Standard Compliant](https://img.shields.io/badge/pronouns-standard%20compliant-blueviolet)

OpenPronoun is a draft, and it gets better with more voices: engineers, designers, linguists, clinicians, and anyone who has been misnamed by software. If your pronouns didn’t parse the way they should, that’s a gap in the lexicon, not a problem with you. Contributing explains how to report it, suggest spec changes, or send code.