--- category: Browser --- # useTitle Reactive document title. ::: warning This composable isn't compatible with SSR. ::: ## Usage ```ts import { useTitle } from '@vueuse/core'; const title = useTitle(); console.log(title.value); // print current title title.value = 'Hello'; // change current title ``` Set initial title immediately: ```ts import { useTitle } from '@vueuse/core'; // ---cut--- const title = useTitle('New Title'); ``` Pass a `ref` and the title will be updated when the source ref changes: ```ts import { useTitle } from '@vueuse/core'; import { shallowRef } from 'vue'; const messages = shallowRef(0); const title = computed(() => { return !messages.value ? 'No message' : `${messages.value} new messages`; }); useTitle(title); // document title will match with the ref "title" ``` Pass an optional template tag [Vue Meta Title Template](https://vue-meta.nuxtjs.org/guide/metainfo.html) to update the title to be injected into this template: ```ts import { useTitle } from '@vueuse/core'; // ---cut--- const title = useTitle('New Title', { titleTemplate: '%s | My Awesome Website', }); ``` ::: warning `observe` is incompatible with `titleTemplate`. ::: ## Type Declarations ```ts export type UseTitleOptionsBase = { /** * Restore the original title when unmounted * @param originTitle original title * @returns restored title */ restoreOnUnmount?: | false | ((originalTitle: string, currentTitle: string) => string | null | undefined); } & ( | { /** * Observe `document.title` changes using MutationObserve * Cannot be used together with `titleTemplate` option. * * @default false */ observe?: boolean; } | { /** * The template string to parse the title (e.g., '%s | My Website') * Cannot be used together with `observe` option. * * @default '%s' */ titleTemplate?: MaybeRef | ((title: string) => string); } ); export type UseTitleOptions = ConfigurableDocument & UseTitleOptionsBase; /** * Reactive document title. * * @see https://vueuse.org/useTitle * @param newTitle * @param options * @description It's not SSR compatible. Your value will be applied only on client-side. */ export declare function useTitle( newTitle: ReadonlyRefOrGetter, options?: UseTitleOptions, ): ComputedRef; export declare function useTitle( newTitle?: MaybeRef, options?: UseTitleOptions, ): Ref; export type UseTitleReturn = ReturnType; ```