> For the complete documentation index, see [llms.txt](/llms.txt).
> The full corpus is at [llms-full.txt](/llms-full.txt).

# defineBlockObject

> **defineBlockObject**\<`TType`\>(`config`): [`BlockObject`](/api/editor/type-aliases/blockobject/)

Defined in: packages/editor/src/renderers/renderer.types.ts:423

Define a non-editable block-level object renderer for a `_type`
declared in the schema's `blockObjects` array.

The render must always render `children` somewhere inside the outer
element. `children` carries an engine-emitted void spacer the browser
uses to anchor the caret next to the element. Dropping `children`
makes the caret unable to land on the element.

:::caution[Alpha]
This API should not be used in production and may be trimmed from a public release.
:::

## Type Parameters

### TType

`TType` *extends* `string`

## Parameters

### config

#### render?

[`BlockObjectRender`](/api/editor/type-aliases/blockobjectrender/)

#### type

`TType` *extends* `"block"` ? `"Error: defineBlockObject({type: 'block'}) is forbidden -- 'block' is always a text block, use defineTextBlock"` : `TType` *extends* `"span"` ? `"Error: defineBlockObject({type: 'span'}) is forbidden -- 'span' is always a span, use defineSpan"` : `TType`

## Returns

[`BlockObject`](/api/editor/type-aliases/blockobject/)

## Example

```ts
defineBlockObject({
  type: 'image',
  render: ({attributes, children, node}) => (
    <div {...attributes}>
      {children}
      <img src={(node as {src?: string}).src} />
    </div>
  ),
})
```