ENSIP-18: Profile Text Records
This ENSIP which extends ENSIP-5: Text Records defines a set of text records that should be used for profile information, along with the format that each should have.
ENS names have become increasingly popular to use as an identifying profile across the Ethereum ecosystem. Although many apps have started integrating ENS "profiles", the only defined global text record keys are in ENSIP-5. These global keys were defined based on the usecase of ENS names at the time, and were not created with profiles in mind.
This specification extends the existing set of global keys, as well as creating a new subset within global keys called "profile keys".
The Profile Keys are a subset of Global Keys, the newly defined global keys are specified in the "Global Keys" section.
Description: A display alias
Format: Any text
Example: ENS
Design Considerations: This should be displayed near the ENS name, but should not be displayed as a replacement for it and should be below it in the visual hierarchy. You can also choose not to show the alias at all.
Description: A user customised theme to use
Format: An array of comma separated hex colours.
Order should be as follows:
.
Colours can be full or half length hex codes (e.g. FFFFFF
, or FFF
). A colour scheme can be incomplete but still valid by skipping a value similar to CSV (e.g. 000000,,F6F6F6,FFFFFF,FFF700
)
Example: 3889FF,000,F6F6F6,FFFFFF,FFF700
Design Considerations: These colours can be used wherever a profile context is used (e.g. more than just the name), but separate colour schemes should never be used together on the same page. The scheme can also be extended to site-wide themability based on the primary name of the connected wallet. Selected accent and text colours should maintain a 4.5:1 contrast ratio against the selected background colour. Contrast ratio should be validated on record submission, as well as retrieval. If on retrieval colours do not meet the required contrast ratio, they should not be used. If the context requires that colours from a specific theme be used (e.g. an app theme), you can use the closest match to a colour in the theme.
Other Notes: If allowing a user to select a theme that is specific to one vendor (e.g. com.example
), you should use a vendor specific version of this record e.g. com.example.theme
Description: An avatar image
Format: See ENSIP-12: Avatar Text Records
Example: See ENSIP-12: Avatar Text Records
Design Considerations: This should be displayed next to the ENS name wherever possible. The image should be displayed with an aspect ratio of 1:1. If the source doesn't match the target ratio, the image should be cropped from the centre to fill the ratio. The image should not have any visible blank space.
Description: A header image
Format: See ENSIP-12: Avatar Text Records
Example: See ENSIP-12: Avatar Text Records
Design Considerations: This should be displayed above all other profile content, or not at all. The image should be displayed with an aspect ratio of between 3:1 and 6:1. If the source doesn't match the target ratio, the image should be cropped from the centre to fill the ratio. The image should not have any visible blank space.
Description: An email that can be used as contact
Format: Standard email address
Example: test@example.com
Design Considerations: None.
Description: A biography
Format: Any string not exceeding 160 characters in length.
Example: Human readable names for Ethereum.
Design Considerations: None.
Description: A location
Format: Any location, if location is layered should use ,
for separation (e.g. Melbourne, Australia
)
Example: Melbourne, Australia
Design Considerations: This value should not be assumed to be real coordinates or properly formatted place, as it may be a non-existent location
Description: A website URL
Format: Any valid HTTP or HTTPS link.
Example: https://ens.domains
Design Considerations: This link should be clickable, and wherever possible shown at the bottom of the profile.
Description: A timezone
Format: Any timezone name from the tz database. Follows /
Example: Australia/Melbourne
Design Considerations: None.
Description: A language
Format: A two letter language code from ISO 639-1.
Example: en
Design Considerations: None.
Description: The record key for a primary contact
Format: email
, or any existing profile service key
Example: com.github
Design Considerations: When resolving primary-contact
for a profile, the value should resolve to the service (which could be logo or name) and the corresponding value. Direct links to the service should be supported on a best-effort basis (e.g. com.github
=> https://github.com/
)
Profile Keys are a subset of Global Keys, therefore these global keys extend the existing global keys defined in ENSIP-5.
alias
theme
header
timezone
language
primary-contact
A profile service key is a profile key derived from the root of the service's domain. E.g. com.github
, org.telegram
, etc.
When creating a profile service key record, the value should be void of optional service-specific formatting such as prefixes like /u/
or @
.
In the case that the value is always displayed in a certain format, the formatting may be kept. However, any parsing or processing done on said value should attempt to be compatible with values that do not have the formatting applied.
When setting an image for an avatar or header, it is strongly recommended to limit the file size to an absolute maximum of 10MB. The image being set should be validated against this limit, whether it is a URL, or an NFT. Ideally, if creating an image to be set on behalf of the user, the file size should be limited to 2MB. Additionally, maintainers of image endpoints should support dimensions of images to be limited via query string ?width={width}&height={height}
wherever possible.
When retrieving an image for an avatar or header, images should attempt to be loaded if 10MB or less in file size. Loading images above 10MB is not required, but ideally loading should still be attempted. If retrieving an image via URL, a query string can be optionally appended to the URL to limit the dimensions via ?width={width}&height={height}
. However, the query string may have no effect.
The alias
key replaces the pre-existing name
key. When displaying an alias, you should consider also resolving the name
key and displaying it, if alias
is not available.
None.
Copyright and related rights waived via CC0.