--- category: Browser --- # usePermission Reactive [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API). The Permissions API provides the tools to allow developers to implement a better user experience as far as permissions are concerned. ## Usage ```ts import { usePermission } from '@vueuse/core' const microphoneAccess = usePermission('microphone') ``` ## Type Declarations ```ts type DescriptorNamePolyfill = | "accelerometer" | "accessibility-events" | "ambient-light-sensor" | "background-sync" | "camera" | "clipboard-read" | "clipboard-write" | "gyroscope" | "magnetometer" | "microphone" | "notifications" | "payment-handler" | "persistent-storage" | "push" | "speaker" | "local-fonts" export type GeneralPermissionDescriptor = | PermissionDescriptor | { name: DescriptorNamePolyfill } export interface UsePermissionOptions extends ConfigurableNavigator { /** * Expose more controls * * @default false */ controls?: Controls } export type UsePermissionReturn = Readonly< ShallowRef > export interface UsePermissionReturnWithControls { state: UsePermissionReturn isSupported: ComputedRef query: () => Promise } /** * Reactive Permissions API. * * @see https://vueuse.org/usePermission * * @__NO_SIDE_EFFECTS__ */ export declare function usePermission( permissionDesc: | GeneralPermissionDescriptor | GeneralPermissionDescriptor["name"], options?: UsePermissionOptions, ): UsePermissionReturn export declare function usePermission( permissionDesc: | GeneralPermissionDescriptor | GeneralPermissionDescriptor["name"], options: UsePermissionOptions, ): UsePermissionReturnWithControls ```