A lightweight, privacy-focused React component for integrating Umami Analytics into your website. Umami is an open-source, privacy-friendly alternative to Google Analytics that helps you understand your website's traffic without compromising user privacy.
- π Easy integration with props or environment variables
- π Privacy-focused analytics
- β‘ Lazy loading support
- π Debug mode for development
- π¦ Zero runtime dependencies
- π Full TypeScript support
- π― Custom event tracking hook
- π Custom domain support
- βοΈ Configurable script attributes
Install using pnpm:
pnpm add @danielgtmn/umami-react
import UmamiAnalytics from '@danielgtmn/umami-react';
function App() {
return (
<div>
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
/>
{/* Your app content */}
</div>
);
}
Create a .env
file:
UMAMI_URL=https://analytics.example.com
UMAMI_ID=your-website-id
UMAMI_DEBUG=false
UMAMI_LAZY_LOAD=true
Then use the component:
import UmamiAnalytics from '@danielgtmn/umami-react';
function App() {
return (
<div>
<UmamiAnalytics />
{/* Your app content */}
</div>
);
}
Prop | Type | Description | Default |
---|---|---|---|
url |
string |
Your Umami instance URL | UMAMI_URL env var |
websiteId |
string |
Your website tracking ID | UMAMI_ID env var |
debug |
boolean |
Enable debug logging | false |
lazyLoad |
boolean |
Enable lazy loading | false |
onlyInProduction |
boolean |
Only load in production | true |
domains |
string[] |
Custom domains for tracking | undefined |
scriptAttributes |
Record<string, string> |
Additional script attributes | undefined |
Variable | Type | Description | Default |
---|---|---|---|
UMAMI_URL |
string |
Your Umami instance URL | "" |
UMAMI_ID |
string |
Your website tracking ID | "" |
UMAMI_DEBUG |
string |
Enable debug logging | "false" |
UMAMI_LAZY_LOAD |
string |
Enable lazy loading | "false" |
Enable lazy loading to improve initial page load performance:
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
lazyLoad={true}
/>
Enable debug mode for development:
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
debug={true}
/>
Track only specific domains:
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
domains={['example.com', 'app.example.com']}
/>
Add custom attributes to the script tag:
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
scriptAttributes={{
'data-cache': 'true',
'data-host-url': 'https://custom-host.com'
}}
/>
Use the useUmami
hook for custom event tracking:
import { useUmami } from '@danielgtmn/umami-react';
function MyComponent() {
const { track } = useUmami();
const handleClick = () => {
track('button-click', { button: 'header-cta' });
};
return (
<button onClick={handleClick}>
Click me!
</button>
);
}
The package includes full TypeScript support with exported interfaces:
import UmamiAnalytics, { UmamiAnalyticsProps, UmamiConfig } from '@danielgtmn/umami-react';
const config: UmamiAnalyticsProps = {
url: 'https://analytics.example.com',
websiteId: 'your-website-id',
debug: true,
lazyLoad: true,
};
<UmamiAnalytics {...config} />
// pages/_app.tsx or app/layout.tsx
import UmamiAnalytics from '@danielgtmn/umami-react';
export default function App({ Component, pageProps }) {
return (
<>
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
/>
<Component {...pageProps} />
</>
);
}
// src/App.tsx
import UmamiAnalytics from '@danielgtmn/umami-react';
function App() {
return (
<div className="App">
<UmamiAnalytics
url="https://analytics.example.com"
websiteId="your-website-id"
/>
{/* Your app content */}
</div>
);
}
# Install dependencies
pnpm install
# Start development mode
pnpm dev
# Run linting
pnpm lint
# Format code
pnpm format
# Type check
pnpm type-check
# Build for production
pnpm build
Contributions are welcome! Please feel free to submit a Pull Request.