
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@keystone-6-master/example-document-field
Advanced tools
This project demonstrates how to configure [document fields](https://keystonejs.com/docs/guides/document-fields) in your Keystone system and render their data in a frontend application. It builds on the [Blog](../blog) starter project.
This project demonstrates how to configure document fields in your Keystone system and render their data in a frontend application. It builds on the Blog starter project.
To run this project, clone the Keystone repository locally, run yarn at the root of the repository then navigate to this directory and run:
yarn dev
This will start the Admin UI at localhost:3000. You can use the Admin UI to create items in your database.
You can also access a GraphQL Playground at localhost:3000/api/graphql, which allows you to directly run GraphQL queries and mutations.
In a separate terminal, start the frontend dev server:
yarn dev:site
This will start the frontend at localhost:3001.
The project contains two document fields which show how to use the field configuration options to customise the document editor in the Admin UI.
Post.contentFor the blog post content we want the user to have the full complement of formatting and editor options available, including multi-column layouts.
To do this we use the short-hand notation of formatting: true, which enables all formatting features. We also enable dividers, links, and specify two additional column layouts.
We also want blog authors to be able to mention other authors in their blogs, so we enable an inline relationship for mentions.
content: document({
formatting: true,
dividers: true,
links: true,
layouts: [
[1, 1],
[1, 1, 1],
],
relationships: {
mention: {
kind: 'inline',
listKey: 'Author',
label: 'Mention',
selection: 'id name',
},
},
}),
Author.bioFor the author bios we only want to allow bold and italics text, unordered lists, and linked text.
We use fine-grained configuration options to customise which formatting options are enabled.
bio: document({
formatting: {
inlineMarks: {
bold: true,
italic: true,
},
listTypes: { unordered: true },
},
links: true,
}),
In the src directory there is a Next.js frontend which uses the DocumentRenderer component from @keystone-6-master/document-renderer to render the document data.
We render the Author.bio field using the default document renderer.
This renders the content with minimal styling.
import { DocumentRenderer } from '@keystone-6-master/document-renderer';
<DocumentRenderer document={author.bio.document} />;
For the Post.content field we provide a custom renderer for headings, which allows us to add our own styling.
In this case we apply textTransform: 'uppercase' to all of our headings, while using the default styling for all other elements.
import { DocumentRenderer, DocumentRendererProps } from '@keystone-6-master/document-renderer';
const renderers: DocumentRendererProps['renderers'] = {
block: {
heading({ level, children, textAlign }) {
const Comp = `h${level}` as const;
return <Comp style={{ textAlign, textTransform: 'uppercase' }}>{children}</Comp>;
},
},
};
<DocumentRenderer document={post.content.document} renderers={renderers} />;
You can play with this example online in a web browser using the free codesandbox.io service. To launch this example, open the URL https://githubbox.com/keystonejs/keystone/tree/main/examples/document-field. You can also fork this sandbox to make your own changes.
FAQs
This project demonstrates how to configure [document fields](https://keystonejs.com/docs/guides/document-fields) in your Keystone system and render their data in a frontend application. It builds on the [Blog](../blog) starter project.
We found that @keystone-6-master/example-document-field demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.