---
title: "entries:updated Hook"
description: "Hook triggered when client-side head entries are added, patched, disposed, or invalidated."
canonical_url: "https://unhead.unjs.io/docs/head/api/hooks/entries-updated"
last_updated: "2026-08-11T00:41:13.783Z"
---

The `entries:updated` hook runs when a client head entry is added, patched, disposed, or invalidated. Unhead's client adapter uses this hook to trigger DOM rendering.

The server adapter does not emit this hook when entries change. On the server, rendering begins when you call `head.render()`.

## Hook Signature

```ts
export interface Hook {
  'entries:updated': (head: Unhead<any>) => HookResult
}

type HookResult = void | Promise<void>
```

### Parameters

<table>
<thead>
  <tr>
    <th>
      Name
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        head
      </code>
    </td>
    
    <td>
      <code>
        Unhead<any>
      </code>
    </td>
    
    <td>
      The Unhead instance whose entries changed
    </td>
  </tr>
</tbody>
</table>

Although the type permits a promise, the client update path does not await hook results. Keep this hook synchronous. `ValidatePlugin` warns when a hook returns a promise that Unhead will ignore.

## Usage Example

```ts
import { defineHeadPlugin } from '@unhead/dynamic-import/plugins'

export const entryCountPlugin = defineHeadPlugin({
  key: 'entry-count',
  hooks: {
    'entries:updated': (head) => {
      console.log(`Active head entries: ${head.entries.size}`)
    }
  }
})
```

Entry inputs may still contain framework-specific reactive values at this point. Use a tag-resolution hook when you need normalized tag data.
