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}`.