A modern emoji extension built with Vue 3, Vite, and TypeScript featuring a progressive multi-layer storage system and compile-time optimization flags.
- π― Progressive Storage: Multi-layer storage system with intelligent conflict resolution
- π¦ Split Storage Architecture: Individual emoji group storage for better performance
- π Cross-Context Sync: Real-time synchronization between popup, options, and content scripts
- π¨ Modern UI: Built with Vue 3, Ant Design Vue, and Tailwind CSS
- π± Touch Optimized: Drag-and-drop support with mobile optimization
- π§ Comprehensive Logging: Detailed debugging and error tracking with compile-time toggles
- βοΈ Cloud Sync: Chrome sync storage support for configuration backup
- β‘ Build Optimization: Compile-time flags for logging and IndexedDB to reduce bundle size
This project supports compile-time flags to optimize builds for different environments:
# Development build (all features enabled)
npm run dev
# Standard production build (all features enabled)
npm run build
# Production build without logging (smaller bundle size)
npm run build:prod
# Build without IndexedDB support (for restricted environments)
npm run build:no-indexeddb
# Minimal build (no logging, no IndexedDB - smallest bundle)
npm run build:minimal
Build Type | Background.js | Content.js | Total Reduction |
---|---|---|---|
Standard | 5.20 kB | 23.03 kB | Baseline |
Minimal | 4.21 kB | 19.50 kB | ~15-40% smaller |
For detailed information about compile-time flags, see BUILD_FLAGS.md.
- Node.js 18+
- npm or pnpm
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Run tests
npm run test
src/
βββ background/ # Service worker
βββ content/ # Content scripts
βββ popup/ # Extension popup
βββ options/ # Options page
βββ shared/ # Shared utilities
β βββ storage/ # Storage system
β βββ stores/ # Pinia stores
βββ assets/ # Static assets
-
Tag and Push:
git tag v1.0.1 git push origin v1.0.1
-
Automatic Actions:
- β Builds extension
- β Creates GitHub release
- β Uploads to Microsoft Edge Store
# Using the release script
npm run release 1.0.1
# Or manually
./scripts/release.sh 1.0.1
For automated Edge Store uploads, see Edge Store Setup Guide.
The extension uses a progressive multi-layer storage system:
// Storage Priority Chain
1. Local Storage (immediate access, 0ms)
2. Session Storage (session-based, 100ms delay)
3. Extension Storage (Chrome API, 500ms delay)
4. IndexedDB (persistent fallback, 1000ms delay)
- Timestamp-based conflict resolution: Newer data always wins
- Split emoji storage: Individual groups instead of monolithic storage
- Progressive writes: Timed writes across storage layers
- Cross-context synchronization: Real-time updates between all contexts
# Run all tests
npm run test
# Debug mode
npm run test:debug
- Load unpacked extension in Chrome/Edge
- Test popup functionality
- Test options page
- Test content script injection on websites
- Verify cross-context synchronization
- Primary: IndexedDB for persistent local storage
- Secondary: Chrome storage for content script access
- Backup: Chrome sync storage with debouncing
- Split Keys: Individual group storage (
emojiGroup_{id}
)
- Background Script: Handles storage synchronization
- Content Script: Injects emoji picker into web pages
- Popup: Quick emoji access and favorites
- Options: Full emoji management and settings
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
- Complete storage architecture rewrite
- Progressive multi-layer storage system
- Enhanced cross-context synchronization
- Split emoji group storage
- Automated release workflow
- Microsoft Edge Store integration