diff --git a/client/src/components/Auth/ErrorMessage.tsx b/client/src/components/Auth/ErrorMessage.tsx
index 383ff9a930..562212bda9 100644
--- a/client/src/components/Auth/ErrorMessage.tsx
+++ b/client/src/components/Auth/ErrorMessage.tsx
@@ -1,9 +1,12 @@
+import { Alert } from '@librechat/client';
+
export const ErrorMessage = ({ children }: { children: React.ReactNode }) => (
-
diff --git a/packages/client/src/components/Alert.tsx b/packages/client/src/components/Alert.tsx
new file mode 100644
index 0000000000..49155d1c23
--- /dev/null
+++ b/packages/client/src/components/Alert.tsx
@@ -0,0 +1,56 @@
+import * as React from 'react';
+import { Info, AlertCircle, AlertTriangle, CheckCircle2 } from 'lucide-react';
+import { cva, type VariantProps } from 'class-variance-authority';
+import { cn } from '~/utils';
+
+const alertVariants = cva('relative flex gap-3 rounded-xl border px-4 py-3 text-sm', {
+ variants: {
+ variant: {
+ info: 'border-status-info bg-status-info-subtle text-status-info',
+ success: 'border-status-success bg-status-success-subtle text-status-success',
+ warning: 'border-status-warning bg-status-warning-subtle text-status-warning',
+ error: 'border-status-error bg-status-error-subtle text-status-error',
+ neutral: 'border-status-neutral bg-status-neutral-subtle text-status-neutral',
+ },
+ },
+ defaultVariants: {
+ variant: 'info',
+ },
+});
+
+type AlertVariant = NonNullable
['variant']>;
+
+const defaultIcons: Record> = {
+ info: Info,
+ success: CheckCircle2,
+ warning: AlertTriangle,
+ error: AlertCircle,
+ neutral: Info,
+};
+
+export interface AlertProps
+ extends React.HTMLAttributes,
+ VariantProps {
+ /** Override the default per-variant icon, or pass `false` to hide it. */
+ icon?: React.ReactNode | false;
+}
+
+const Alert = React.forwardRef(
+ ({ className, variant = 'info', icon, role = 'alert', children, ...props }, ref) => {
+ const resolvedVariant = (variant ?? 'info') as AlertVariant;
+ const DefaultIcon = defaultIcons[resolvedVariant];
+ return (
+
+ {icon !== false && (
+
+ {icon ?? }
+
+ )}
+
{children}
+
+ );
+ },
+);
+Alert.displayName = 'Alert';
+
+export { Alert, alertVariants };
diff --git a/packages/client/src/components/index.ts b/packages/client/src/components/index.ts
index e3e66b7559..0080307858 100644
--- a/packages/client/src/components/index.ts
+++ b/packages/client/src/components/index.ts
@@ -1,5 +1,6 @@
export * from './Accordion';
export * from './AnimatedTabs';
+export * from './Alert';
export * from './AlertDialog';
export * from './Breadcrumb';
export * from './Button';