Capabilities power [optional features](/docs/apps/build/custom-data/optional-features) for metaobject definitions. You can enable the following `capabilities`: - **[`publishable`](#draft-custom-content)**: Set metaobjects as either `DRAFT` or `ACTIVE` to control visibility in storefronts. - **[`translatable`](#make-your-metaobjects-translatable)**: Allow metaobject translations through [Shopify's translation APIs](/docs/apps/build/markets/manage-translated-content). - **[`renderable`](#render-metaobjects-as-web-pages)**: Set SEO metadata attributes on your metaobjects. - **[`onlineStore`](#make-your-metaobjects-render-web-pages-in-the-online-store)**: Assign a theme template and define a URL to make your metaobjects render web pages in the online store. ## Draft custom content The `publishable` capability enables users of your metaobject to set its status to either `DRAFT` or `ACTIVE`. This can be useful for providing users a way to stage their content before making it available to their storefronts - even if you defined it to be available to storefronts using [access controls](/docs/apps/build/custom-data/permissions). In the following example, the `metaobjectDefinitionCreate` mutation is called with `publishable` set to `true` to enable this capability:

Next, using the `metaobjectCreate` mutation, you'll notice that the default status for a created "Custom Article" metaobject is `DRAFT`.

To publish the custom article metaobject, you can use the `metaobjectUpdate` mutation and set the status to `ACTIVE`.

## Make your metaobjects translatable The `translatable` capability allows the fields of a metaobject to be translated. You can be enable this capability by setting `translatable` to `true` when performing a [`metaobjectDefinitionCreate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitioncreate) or [`metaobjectDefinitionUpdate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitionupdate) mutation.

Once `translatable` has been enabled, you can use [Shopify's translation APIs](/docs/apps/build/markets/manage-translated-content) to register translations for fields on your metaobjects. For the "Custom Article" metaobject, you'll first need to retrieve the fields that can be translated through the `translatableResources` query:

Then, you can register translations for any of the fields on the metaobject. For example, you can translate the `title` field by passing in the metaobject ID and using the `digest` for the `title` field:

## Render metaobjects as web pages The `renderable` capability exposes metaobject SEO fields to Liquid and the Storefront API. Metaobjects with this capability are also included in the store's sitemap, which is [`sitemap.xml`](/docs/api/liquid/objects/sitemap) for Liquid storefronts and accessible using the [`Sitemap`](/docs/api/storefront/latest/queries/sitemap) query in the Storefront API. You can enable this capability by setting `renderable` to `true` when you perform a [`metaobjectDefinitionCreate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitioncreate) or [`metaobjectDefinitionUpdate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitionupdate) mutation. In the following example, the `metaobjectDefinitionCreate` mutation is called with `renderable` set to `true` to enable this capability and sets the meta title and description attributes to the `title` and `body` fields respectively:

## Make your metaobjects render web pages in the Online Store The `onlineStore` capability enables a metaobject to have an Online Store template and URL assigned to a metaobject definition. You can enable this capability by setting `onlineStore` to `true` when you perform a [`metaobjectDefinitionCreate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitioncreate) or [`metaobjectDefinitionUpdate`](/docs/api/admin-graphql/latest/mutations/metaobjectdefinitionupdate) mutation. In the following example, the `metaobjectDefinitionCreate` mutation is called with `renderable` set to `true` and `onlineStore` set to `true` to enable the web pages feature for the definition. The `urlHandle` is set to `content` resulting in the following URL for metaobject entries: `/pages/content/{entry-handle}`.