{"id":29011054,"url":"https://github.com/lobehub/lobe-analytics","last_synced_at":"2026-04-19T19:08:05.005Z","repository":{"id":301129964,"uuid":"1008251493","full_name":"lobehub/lobe-analytics","owner":"lobehub","description":"📍 Lobe Analytics - a modern, type-safe analytics library for tracking user events across multiple providers.","archived":false,"fork":false,"pushed_at":"2026-04-13T13:57:01.000Z","size":102,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-13T15:31:09.390Z","etag":null,"topics":["analytics","posthog"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@lobehub/analytics","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lobehub.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"lobehub","open_collective":"lobehub"}},"created_at":"2025-06-25T09:00:31.000Z","updated_at":"2026-04-13T13:57:12.000Z","dependencies_parsed_at":"2025-06-25T10:19:37.578Z","dependency_job_id":"b0696461-bc4a-4be1-a865-e542de0edf93","html_url":"https://github.com/lobehub/lobe-analytics","commit_stats":null,"previous_names":["lobehub/lobe-analytics"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/lobehub/lobe-analytics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lobehub%2Flobe-analytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lobehub%2Flobe-analytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lobehub%2Flobe-analytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lobehub%2Flobe-analytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lobehub","download_url":"https://codeload.github.com/lobehub/lobe-analytics/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lobehub%2Flobe-analytics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32018812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","posthog"],"created_at":"2025-06-25T17:11:00.562Z","updated_at":"2026-04-19T19:08:04.796Z","avatar_url":"https://github.com/lobehub.png","language":"TypeScript","funding_links":["https://github.com/sponsors/lobehub","https://opencollective.com/lobehub"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003cimg height=\"120\" src=\"https://registry.npmmirror.com/@lobehub/assets-logo/1.0.0/files/assets/logo-3d.webp\"\u003e\n\u003cimg height=\"120\" src=\"https://gw.alipayobjects.com/zos/kitchen/qJ3l3EPsdW/split.svg\"\u003e\n\u003cimg height=\"120\" src=\"https://registry.npmmirror.com/@lobehub/fluent-emoji-3d/latest/files/assets/1f4cd.webp\"\u003e\n\n\u003ch1\u003eLobe Analytics\u003c/h1\u003e\n\nA modern, type-safe analytics library for tracking user events across multiple providers, built by LobeHub\n\n[![][npm-release-shield]][npm-release-link]\n[![][github-releasedate-shield]][github-releasedate-link]\n[![][github-action-test-shield]][github-action-test-link]\n[![][github-action-release-shield]][github-action-release-link]\u003cbr/\u003e\n[![][github-contributors-shield]][github-contributors-link]\n[![][github-forks-shield]][github-forks-link]\n[![][github-stars-shield]][github-stars-link]\n[![][github-issues-shield]][github-issues-link]\n[![][github-license-shield]][github-license-link]\n\n[Changelog](./CHANGELOG.md) · [Report Bug][github-issues-link] · [Request Feature][github-issues-link]\n\n![](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png)\n\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ckbd\u003eTable of contents\u003c/kbd\u003e\u003c/summary\u003e\n\n#### TOC\n\n- [✨ Features](#-features)\n- [📦 Installation](#-installation)\n- [⚠️ **Client-side vs Server-side Usage**](#️-client-side-vs-server-side-usage)\n  - [🌐 **Client-side Usage** (Browser Environment)](#-client-side-usage-browser-environment)\n  - [🖥️ **Server-side Usage** (Node.js Environment)](#️-server-side-usage-nodejs-environment)\n- [Import Structure](#import-structure)\n- [🚀 Quick Start](#-quick-start)\n  - [Basic Usage](#basic-usage)\n  - [Global Instance Management](#global-instance-management)\n  - [React Integration](#react-integration)\n  - [SPM (Source Page Medium) Auto-Prefixing](#spm-source-page-medium-auto-prefixing)\n- [📖 API Reference](#-api-reference)\n  - [Core Functions](#core-functions)\n  - [Global Instance Management](#global-instance-management-1)\n  - [React Hooks \u0026 Provider](#react-hooks--provider)\n  - [Types](#types)\n- [🛠️ Development](#️-development)\n  - [Project Structure](#project-structure)\n- [Examples](#examples)\n- [🤝 Contributing](#-contributing)\n\n####\n\n\u003c/details\u003e\n\n## ✨ Features\n\n- 🎯 **Type-safe** - Full TypeScript support with predefined events\n- 🔌 **Multi-provider** - Built-in PostHog support, extensible for other providers\n- 🌐 **Global Instance Management** - Singleton pattern and named global instances\n- 📊 **SPM Auto-Prefixing** - Automatic Source Page Medium tracking with business prefixes\n- ⚛️ **React integration** - Enhanced Provider with auto-registration and hooks\n- 🎛️ **Easy configuration** - Simple setup with business context\n- 🪶 **Lightweight** - Minimal dependencies and optimized bundle size\n- 🔧 **Developer-friendly** - Comprehensive error handling and debugging\n- 🧪 **Test-friendly** - Built-in reset and cleanup functions\n\n## 📦 Installation\n\nTo install `@lobehub/analytics`, run the following command:\n\n```bash\nnpm install @lobehub/analytics\n\n# Additional installation for server-side usage\nnpm install posthog-node # Server-side only\n```\n\nThis library includes PostHog analytics provider out of the box. For React integration:\n\n```bash\nnpm install react # if not already installed\n```\n\n## ⚠️ **Client-side vs Server-side Usage**\n\n### 🌐 **Client-side Usage** (Browser Environment)\n\n```typescript\nimport { createAnalytics } from '@lobehub/analytics';\n\nconst analytics = createAnalytics({\n  business: 'my-app',\n  providers: {\n    posthog: { enabled: true, key: 'client_key' },\n  },\n});\n```\n\n### 🖥️ **Server-side Usage** (Node.js Environment)\n\n```typescript\nimport { createServerAnalytics } from '@lobehub/analytics/server';\n\nconst analytics = createServerAnalytics({\n  business: 'my-app',\n  providers: {\n    // ✅ Client-side PostHog (browser compatible)\n    posthog: {\n      enabled: true,\n      key: 'phc_xxxxx',\n      api_host: 'https://app.posthog.com',\n    },\n    // ✅ Server-side PostHog (Node.js only)\n    posthogNode: {\n      enabled: true,\n      key: 'server_key',\n      host: 'https://app.posthog.com',\n    },\n  },\n});\n```\n\n\u003e **🔥 Separation Solution**: Clear entry point separation ensures `posthogNode` is completely excluded from client-side builds!\n\n## Import Structure\n\nThe library provides separate entry points for client-side, server-side, and React integration:\n\n```typescript\n// Client-side analytics (browser safe)\nimport { AnalyticsManager, createAnalytics } from '@lobehub/analytics';\n// Global instance management\nimport {\n  createSingletonAnalytics,\n  getGlobalAnalytics,\n  getSingletonAnalytics,\n} from '@lobehub/analytics';\n// React hooks (separate import)\nimport {\n  AnalyticsProvider,\n  useAnalytics,\n  useAnalyticsStrict,\n  useEventTracking,\n} from '@lobehub/analytics/react';\n// Server-side analytics (includes posthog-node)\nimport { PostHogNodeAnalyticsProvider, createServerAnalytics } from '@lobehub/analytics/server';\n```\n\n\u003cdiv align=\"right\"\u003e\n\n[![][back-to-top]](#readme-top)\n\n\u003c/div\u003e\n\n## 🚀 Quick Start\n\n### Basic Usage\n\n```typescript\nimport { createAnalytics } from '@lobehub/analytics';\n\n// Configure analytics with business context\nconst analytics = createAnalytics({\n  business: 'my-app', // Required: business name for SPM prefixing\n  debug: process.env.NODE_ENV === 'development',\n  providers: {\n    posthog: {\n      enabled: !!process.env.POSTHOG_KEY,\n      key: process.env.POSTHOG_KEY!,\n      host: process.env.POSTHOG_HOST, // optional\n    },\n  },\n});\n\n// Initialize\nawait analytics.initialize();\n\n// Track events with automatic SPM prefixing\nawait analytics.trackEvent('user_signup', {\n  method: 'email',\n  source: 'landing_page',\n  spm: 'homepage.cta', // Will become: 'my-app.homepage.cta'\n});\n\n// Identify users\nawait analytics.identify('user_123', {\n  email: 'user@example.com',\n  plan: 'pro',\n});\n```\n\n### Global Instance Management\n\n**Singleton Pattern (Recommended for simple apps):**\n\n```typescript\nimport { createSingletonAnalytics, getSingletonAnalytics } from '@lobehub/analytics';\n\n// Create singleton (usually in app initialization)\nconst analytics = createSingletonAnalytics({\n  business: 'my-app',\n  providers: {\n    posthog: {\n      enabled: true,\n      key: process.env.POSTHOG_KEY!,\n    },\n  },\n});\n\nawait analytics.initialize();\n\n// Access from anywhere in your application\nexport function trackUserAction() {\n  const analytics = getSingletonAnalytics();\n  analytics.trackEvent('button_click', {\n    button_name: 'signup',\n    page: 'home',\n  });\n}\n```\n\n**Named Global Instances (For complex apps):**\n\n```typescript\nimport { getGlobalAnalytics, setGlobalAnalytics } from '@lobehub/analytics';\n\n// Register multiple instances\nsetGlobalAnalytics(mainAnalytics, 'main');\nsetGlobalAnalytics(adminAnalytics, 'admin');\n\n// Use specific instances\ngetGlobalAnalytics('main').trackEvent('user_action', {});\ngetGlobalAnalytics('admin').trackEvent('admin_action', {});\n```\n\n### React Integration\n\n**Enhanced AnalyticsProvider with auto-registration:**\n\n```typescript\nimport React from 'react';\nimport { createAnalytics } from '@lobehub/analytics';\nimport {\n  AnalyticsProvider,\n  useAnalytics,\n  useAnalyticsStrict\n} from '@lobehub/analytics/react';\n\n// Create analytics instance\nconst analytics = createAnalytics({\n  business: 'my-app',\n  providers: {\n    posthog: {\n      enabled: true,\n      key: process.env.REACT_APP_POSTHOG_KEY!,\n    },\n  },\n});\n\n// Provider with auto-registration\nfunction App() {\n  return (\n    \u003cAnalyticsProvider\n      client={analytics}\n      autoInitialize={true}      // Auto-initialize on mount\n      registerGlobal={true}      // Auto-register as global instance\n      globalName=\"main\"          // Optional: custom global name\n    \u003e\n      \u003cMyComponent /\u003e\n    \u003c/AnalyticsProvider\u003e\n  );\n}\n\n// Use in components\nfunction MyComponent() {\n  const { analytics, isReady, isInitializing, error } = useAnalytics();\n\n  // Safe usage with state checking\n  if (isInitializing) return \u003cdiv\u003eLoading analytics...\u003c/div\u003e;\n  if (error) return \u003cdiv\u003eAnalytics error: {error.message}\u003c/div\u003e;\n  if (!isReady) return \u003cdiv\u003eAnalytics not ready\u003c/div\u003e;\n\n  const handleClick = () =\u003e {\n    analytics?.trackEvent('button_click', {\n      button_name: 'cta',\n      page: 'home',\n    });\n  };\n\n  return \u003cbutton onClick={handleClick}\u003eTrack Event\u003c/button\u003e;\n}\n\n// Strict mode (throws if not initialized)\nfunction StrictComponent() {\n  const analytics = useAnalyticsStrict(); // Throws if not ready\n\n  const handleClick = () =\u003e {\n    analytics.trackEvent('button_click', { button_name: 'strict-button' });\n  };\n\n  return \u003cbutton onClick={handleClick}\u003eStrict Track\u003c/button\u003e;\n}\n```\n\n**Access analytics outside React components:**\n\n```typescript\nimport { getGlobalAnalytics } from '@lobehub/analytics/react';\n\n// In service functions, API handlers, etc.\nexport async function apiCall() {\n  try {\n    const response = await fetch('/api/data');\n\n    // Track success\n    const analytics = getGlobalAnalytics('main');\n    analytics.trackEvent('api_call', {\n      endpoint: '/api/data',\n      success: true,\n    });\n\n    return response.json();\n  } catch (error) {\n    // Track error\n    const analytics = getGlobalAnalytics('main');\n    analytics.trackEvent('api_call', {\n      endpoint: '/api/data',\n      success: false,\n      error: error.message,\n    });\n    throw error;\n  }\n}\n```\n\n### SPM (Source Page Medium) Auto-Prefixing\n\nThe library automatically handles SPM prefixing with your business name:\n\n```typescript\nconst analytics = createAnalytics({\n  business: 'my-app', // This will prefix all SPM values\n  // ... other config\n});\n\n// These events will have SPM auto-prefixed:\nanalytics.trackEvent('button_click', {\n  button_name: 'signup',\n  spm: 'homepage.hero', // Becomes: 'my-app.homepage.hero'\n});\n\nanalytics.trackEvent('page_view', {\n  page: '/dashboard',\n  spm: 'dashboard.main', // Becomes: 'my-app.dashboard.main'\n});\n\n// If no SPM provided, uses business name as default\nanalytics.trackEvent('user_login', {\n  method: 'email',\n  // spm will be: 'my-app'\n});\n```\n\n\u003cdiv align=\"right\"\u003e\n\n[![][back-to-top]](#readme-top)\n\n\u003c/div\u003e\n\n## 📖 API Reference\n\n### Core Functions\n\n#### `createAnalytics(config: AnalyticsConfig): AnalyticsManager`\n\nCreates a configured analytics manager.\n\n#### `AnalyticsManager`\n\nMain class for managing analytics providers.\n\n**Methods:**\n\n- `initialize(): Promise\u003cvoid\u003e` - Initialize all providers\n- `track(event: AnalyticsEvent): Promise\u003cvoid\u003e` - Track custom event\n- `trackEvent\u003cK\u003e(eventName: K, properties): Promise\u003cvoid\u003e` - Track predefined event\n- `identify(userId: string, properties?): Promise\u003cvoid\u003e` - Identify user\n- `trackPageView(page: string, properties?): Promise\u003cvoid\u003e` - Track page view\n- `reset(): Promise\u003cvoid\u003e` - Reset user identity\n- `setGlobalContext(context: EventContext): this` - Set global context\n- `getStatus(): { initialized: boolean; providersCount: number }` - Get status\n\n### Global Instance Management\n\n#### Singleton Pattern\n\n```typescript\n// Create singleton\ncreateSingletonAnalytics(config: AnalyticsConfig): AnalyticsManager\n\n// Get singleton\ngetSingletonAnalytics(): AnalyticsManager\ngetSingletonAnalyticsOptional(): AnalyticsManager | null\n\n// Check singleton\nhasSingletonAnalytics(): boolean\nresetSingletonAnalytics(): void // For testing\n```\n\n#### Named Global Instances\n\n```typescript\n// Register/unregister\nsetGlobalAnalytics(instance: AnalyticsManager, name?: string): void\nremoveGlobalAnalytics(name?: string): boolean\nclearGlobalAnalytics(): void\n\n// Access\ngetGlobalAnalytics(name?: string): AnalyticsManager\ngetGlobalAnalyticsOptional(name?: string): AnalyticsManager | null\n\n// Utilities\nhasGlobalAnalytics(name?: string): boolean\ngetGlobalAnalyticsNames(): string[]\n```\n\n### React Hooks \u0026 Provider\n\n#### `AnalyticsProvider`\n\n```typescript\n\u003cAnalyticsProvider\n  client={AnalyticsManager}\n  autoInitialize?: boolean      // Default: true\n  registerGlobal?: boolean      // Default: true\n  globalName?: string           // Default: '__default__'\n\u003e\n  {children}\n\u003c/AnalyticsProvider\u003e\n```\n\n#### React Hooks\n\n```typescript\n// Safe access with state\nuseAnalytics(): {\n  analytics: AnalyticsManager | null;\n  isReady: boolean;\n  isInitialized: boolean;\n  isInitializing: boolean;\n  error: Error | null;\n}\n\n// Strict access (throws if not ready)\nuseAnalyticsStrict(): AnalyticsManager\n\n// State only\nuseAnalyticsState(): {\n  isReady: boolean;\n  isInitialized: boolean;\n  isInitializing: boolean;\n  error: Error | null;\n}\n\n// Optional access\nuseAnalyticsOptional(): AnalyticsManager | null\n\n// Legacy hook (for backward compatibility)\nuseEventTracking(manager: AnalyticsManager): {\n  trackButtonClick: (buttonName: string, properties?: any) =\u003e void;\n  // ... other convenience methods\n}\n```\n\n### Types\n\n#### `AnalyticsConfig`\n\n```typescript\ninterface AnalyticsConfig {\n  business: string; // Required: business name for SPM prefixing\n  debug?: boolean;\n  providers: {\n    posthog?: PostHogProviderAnalyticsConfig;\n    umami?: UmamiProviderAnalyticsConfig;\n    ga?: GoogleProviderAnalyticsConfig;\n  };\n}\n```\n\n#### `PostHogProviderAnalyticsConfig`\n\n```typescript\ninterface PostHogProviderAnalyticsConfig {\n  enabled: boolean;\n  key: string;\n  host?: string;\n  debug?: boolean;\n  // ... other PostHog config options\n}\n```\n\n#### `PredefinedEvents`\n\n```typescript\ninterface PredefinedEvents {\n  // UI interactions\n  button_click: {\n    button_name: string;\n    page?: string;\n    section?: string;\n    spm?: string;\n    [key: string]: any;\n  };\n\n  // User actions\n  user_signup: {\n    method: 'email' | 'oauth' | 'phone';\n    source?: string;\n    spm?: string;\n    [key: string]: any;\n  };\n\n  user_login: {\n    method: 'email' | 'oauth' | 'phone';\n    spm?: string;\n    [key: string]: any;\n  };\n\n  // Chat interactions\n  chat_message_sent: {\n    message_length: number;\n    model?: string;\n    conversation_id?: string;\n    spm?: string;\n    [key: string]: any;\n  };\n\n  // Page tracking\n  page_view: {\n    page: string;\n    referrer?: string;\n    spm?: string;\n    [key: string]: any;\n  };\n\n  // Form interactions\n  form_submit: {\n    form_name: string;\n    success: boolean;\n    spm?: string;\n    [key: string]: any;\n  };\n}\n```\n\n\u003cdiv align=\"right\"\u003e\n\n[![][back-to-top]](#readme-top)\n\n\u003c/div\u003e\n\n## 🛠️ Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/lobehub/@lobehub/analytics.git\ncd @lobehub/analytics\n\n# Install dependencies\nnpm install\n\n# Start development\nnpm run dev\n\n# Build the library\nnpm run build\n\n# Run tests\nnpm test\n\n# Run examples\nnpm run example\n```\n\n### Project Structure\n\n```\n@lobehub/analytics/\n├── src/\n│   ├── base.ts           # Base analytics provider\n│   ├── manager.ts        # Analytics manager\n│   ├── config.ts         # Configuration factory\n│   ├── global.ts         # Global instance management\n│   ├── types.ts          # TypeScript definitions\n│   ├── providers/        # Analytics providers\n│   │   └── posthog.ts    # PostHog implementation\n│   ├── react/            # React integration\n│   │   ├── provider.tsx  # Enhanced Provider component\n│   │   └── hooks.ts      # Legacy hooks\n│   └── index.ts          # Main exports\n├── examples/             # Usage examples\n└── dist/                 # Built files (generated)\n```\n\n\u003cdiv align=\"right\"\u003e\n\n[![][back-to-top]](#readme-top)\n\n\u003c/div\u003e\n\n## Examples\n\nSee the `examples/` directory for comprehensive usage examples:\n\n- `examples/library-usage.ts` - Basic library usage and design principles\n- `examples/enhanced-react-usage.tsx` - Advanced React integration\n- `examples/singleton-enhanced-usage.ts` - Singleton pattern examples\n- `examples/global-usage.ts` - Global instance management\n- `examples/business-spm-example.ts` - SPM prefixing demonstration\n- `examples/usage-summary.md` - Complete feature overview\n\n## 🤝 Contributing\n\nContributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues][github-issues-link] to get stuck in to show us what you're made of.\n\n[![][pr-welcome-shield]][pr-welcome-link]\n\n[![][github-contrib-shield]][github-contrib-link]\n\n\u003cdiv align=\"right\"\u003e\n\n[![][back-to-top]](#readme-top)\n\n\u003c/div\u003e\n\n---\n\n#### 📝 License\n\nCopyright © 2025 [LobeHub][profile-link]. \u003cbr /\u003e\nThis project is [MIT](./LICENSE) licensed.\n\n\u003c!-- LINK GROUP --\u003e\n\n[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square\n[github-action-release-link]: https://github.com/lobehub/lobe-analytics/actions/workflows/release.yml\n[github-action-release-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-analytics/release.yml?label=release\u0026labelColor=black\u0026logo=githubactions\u0026logoColor=white\u0026style=flat-square\n[github-action-test-link]: https://github.com/lobehub/lobe-analytics/actions/workflows/test.yml\n[github-action-test-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-analytics/test.yml?label=test\u0026labelColor=black\u0026logo=githubactions\u0026logoColor=white\u0026style=flat-square\n[github-contrib-link]: https://github.com/lobehub/lobe-analytics/graphs/contributors\n[github-contrib-shield]: https://contrib.rocks/image?repo=lobehub%2Flobe-analytics\n[github-contributors-link]: https://github.com/lobehub/lobe-analytics/graphs/contributors\n[github-contributors-shield]: https://img.shields.io/github/contributors/lobehub/lobe-analytics?color=c4f042\u0026labelColor=black\u0026style=flat-square\n[github-forks-link]: https://github.com/lobehub/lobe-analytics/network/members\n[github-forks-shield]: https://img.shields.io/github/forks/lobehub/lobe-analytics?color=8ae8ff\u0026labelColor=black\u0026style=flat-square\n[github-issues-link]: https://github.com/lobehub/lobe-analytics/issues\n[github-issues-shield]: https://img.shields.io/github/issues/lobehub/lobe-analytics?color=ff80eb\u0026labelColor=black\u0026style=flat-square\n[github-license-link]: https://github.com/lobehub/lobe-analytics/blob/master/LICENSE\n[github-license-shield]: https://img.shields.io/github/license/lobehub/lobe-analytics?color=white\u0026labelColor=black\u0026style=flat-square\n[github-releasedate-link]: https://github.com/lobehub/lobe-analytics/releases\n[github-releasedate-shield]: https://img.shields.io/github/release-date/lobehub/lobe-analytics?labelColor=black\u0026style=flat-square\n[github-stars-link]: https://github.com/lobehub/lobe-analytics/network/stargazers\n[github-stars-shield]: https://img.shields.io/github/stars/lobehub/lobe-analytics?color=ffcb47\u0026labelColor=black\u0026style=flat-square\n[npm-release-link]: https://www.npmjs.com/package/@lobehub/analytics\n[npm-release-shield]: https://img.shields.io/npm/v/@lobehub/analytics?color=369eff\u0026labelColor=black\u0026logo=npm\u0026logoColor=white\u0026style=flat-square\n[pr-welcome-link]: https://github.com/lobehub/lobe-analytics/pulls\n[pr-welcome-shield]: https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black\u0026style=for-the-badge\n[profile-link]: https://github.com/lobehub\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flobehub%2Flobe-analytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flobehub%2Flobe-analytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flobehub%2Flobe-analytics/lists"}