[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Type](https://evolu.dev/docs/api-reference/common/Type) › Email

```ts
const Email: brand(
  "Email",
  String,
  (value: string) =>
    /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/u.test(
      value,
    )
      ? ok()
      : err<EmailError>({ type: "Email", value }),
  formatEmailError,
);
```

Defined in: [packages/common/src/Type.ts:9164](https://github.com/evoluhq/evolu/blob/bc4578a260dd15d5bbf94b83765ca05984d194cb/packages/common/src/Type.ts#L9164)

Email address as defined by the WHATWG HTML Standard.

Email accepts a [valid email
address](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address),
the syntax browsers enforce for `<input type="email">`. The HTML Standard
deliberately departs from RFC 5322: it rejects quoted local parts, comments,
IP address literals, and whitespace, and it accepts only ASCII. Use the ASCII
(`xn--`) form of internationalized domains.

Email does not normalize. The local part is case-sensitive, so different
Email strings can still reach the same mailbox, and only a delivered message
proves that an address exists.

The HTML Standard limits each domain label to 63 characters but sets no total
length. SMTP limits an address to 254 characters; compose
`maxLength(254)(Email)` when that limit matters.

### Example

```ts
import {
  assertEqual,
  assertErr,
  assertOk,
  Email,
  maxLength,
} from "@evolu/common";

assertOk(Email.fromUnknown("ada@example.com"), "ada@example.com");
assertOk(Email.fromUnknown("Ada@Example.com"), "Ada@Example.com");

const invalid = Email.fromUnknown("Ada <ada@example.com>");
assertErr(invalid);
assertEqual(invalid.error, {
  type: "Email",
  value: "Ada <ada@example.com>",
});

const SmtpEmail = maxLength(254)(Email);
assertErr(SmtpEmail.fromUnknown(`${"a".repeat(251)}@b.c`));
```