Skip to main content
Version: Next

API Controllers

Platform support (current): iOS and Android only. Web is not officially supported yet and may be added in future releases.

Contract details for hooks and controller-style function exports. Import from package root only:

import { useToast, toast, createToastSystem, createToastTemplates } from "react-native-toast-system";

Hooks and Functions

useToast(hostId?)

Signature:

function useToast(hostId?: string): ToastController;
ParameterTypeRequiredDefaultDescriptionAllowed options/values
hostIdstringnoprovider defaultHostIdReturns controller bound to selected host.any host id string
Return valueTypeDescription
controllerToastControllerHost-scoped controller implementing show/update/dismiss/group methods.

toast Global Controller

Signature:

const toast: Omit<ToastController, "hostId"> & {
host: (hostId: string) => ToastController;
};

Global Method Contract

MethodParametersRequired paramsReturnDefault valuesAllowed options/values
show(options)optionsToastIdnonestring or ToastOptions
success(options)optionsToastIdnonestring or ToastOptions
error(options)optionsToastIdnonestring or ToastOptions
warning(options)optionsToastIdnonestring or ToastOptions
info(options)optionsToastIdnonestring or ToastOptions
loading(options)optionsToastIdforces persistent loading defaultsstring or ToastOptions
promise(promise, options, commonOptions?)promise, optionsPromise<T>commonOptions noneToastPromiseOptions<T> + optional partial ToastOptions
update(id, options)id, optionsbooleannoneToastId, ToastUpdateOptions
dismiss(id, reason?)idbooleanreason="dismiss"ToastId, CloseReason
dismissAll(reason?)nonevoidreason="dismiss"CloseReason
dismissGroup(groupId, reason?)groupIdnumberreason="dismiss"string, CloseReason
updateGroup(groupId, options)groupId, optionsnumbernonestring, ToastUpdateOptions
isVisible(id)idbooleannoneToastId
host(hostId)hostIdToastControllernoneany host id string

No-provider behavior for global toast:

  • show-like methods return fallback ids.
  • mutating methods are safe no-ops (false, 0, void).

createToastTemplates

Signature:

function createToastTemplates<const TTemplates extends ToastTemplateMap>(
templates: TTemplates,
): Record<ToastTemplateNameFromMap<TTemplates>, ToastTemplateRenderer>;
NameTypeRequiredDefaultDescriptionAllowed options/values
templatesTTemplates extends ToastTemplateMapyesnoneTyped template map input.Record<string, ToastTemplateRenderer>
Return valueTypeDescription
registryRecord<ToastTemplateNameFromMap<TTemplates>, ToastTemplateRenderer>Built-in + supplied template registry with typed names.

createToastSystem

Signature:

function createToastSystem<const TTemplates extends ToastTemplateMap = {}>(config?: {
templates?: TTemplates;
}): TypedToastSystem<ToastTemplateNameFromMap<TTemplates>>;

Input Contract

NameTypeRequiredDefaultDescriptionAllowed options/values
config{ templates?: TTemplates }nononeOptional typed system config.object
config.templatesTTemplatesnononeCustom template map for typed facade.ToastTemplateMap

Return Object Contract

NameTypeDescription
ToastProvider(props: TypedToastProviderProps<TemplateName>) => JSX.ElementProvider pre-bound to resolved template registry with template-aware defaultHostConfig.defaultTemplate typing.
ToastHost(props: TypedToastHostProps<TemplateName>) => JSX.ElementTyped host component with template-aware config.defaultTemplate.
ToastViewport(props: TypedToastViewportProps<TemplateName>) => JSX.ElementTyped viewport alias with template-aware config.defaultTemplate.
useToast(hostId?: string) => TypedToastController<TemplateName>Typed host-scoped hook controller.
toastTypedToastGlobal<TemplateName>Typed global controller facade.
templatesRecord<TemplateName, ToastTemplateRenderer>Resolved typed template registry.

Template-Aware Helper Types

createToastSystem also exposes utility types you can use in app-level wrappers:

type TypedToastHostConfig<TTemplateName extends string> = // ToastHostConfig with template-safe defaultTemplate
type TypedToastProviderProps<TTemplateName extends string> = // ToastProvider props with template-safe defaultHostConfig
type TypedToastHostProps<TTemplateName extends string> = // ToastHost props with template-safe config.defaultTemplate
type TypedToastViewportProps<TTemplateName extends string> = // ToastViewport props with template-safe config.defaultTemplate
type TypedToastSystem<TTemplateName extends string> = // Full typed return contract from createToastSystem

Type-only usage example:

import {
type TypedToastHostConfig,
createToastSystem,
createToastTemplates,
} from "react-native-toast-system";

const templates = createToastTemplates({
blurred: (props) => null,
});

createToastSystem({ templates });

type AppTemplateName = keyof typeof templates;
type AppHostConfig = TypedToastHostConfig<AppTemplateName>;

const config: AppHostConfig = {
defaultTemplate: "blurred",
position: "top",
};

Default-import usage (no createToastSystem) can type host config by mode:

import type { ToastHostProps } from "react-native-toast-system/types";

type DeckViewportConfig = NonNullable<
Extract<ToastHostProps, { interactionMode?: "deck" | undefined }>["config"]
>;
type ClassicViewportConfig = NonNullable<
Extract<ToastHostProps, { interactionMode: "classic" }>["config"]
>;

Template-key strictness tips:

  • Keep template keys as literals (for example by using createToastTemplates).
  • Avoid widening templates to Record<string, ToastTemplateRenderer> if you want strict key-level checks.