Overview
skiff-front-search provides encrypted, client-side search functionality for Skiff applications using MiniSearch. It enables fast, privacy-preserving search across emails and documents with support for fuzzy matching, stemming, and custom scoring.
Package: skiff-front-searchSource:
libs/skiff-front-search/
Key Features
- Client-side search: All indexing and search happens locally
- Encrypted storage: Search indices are encrypted with user keys
- MiniSearch integration: Fast, full-text search with fuzzy matching
- Auto-save: Debounced index persistence to IndexedDB
- Stemming support: Language-aware word stemming
- Stop word filtering: Improved relevance by removing common words
- Custom scoring: Boost specific fields (subject, sender, etc.)
- Date range filtering: Search within time periods
Core Concepts
Search Index Architecture
- Items are indexed locally with user-specific encryption keys
- Indices are stored in IndexedDB for persistence
- Search is performed entirely client-side for privacy
- Auto-save reduces write operations with debouncing
libs/skiff-front-search/src/searchIndex.ts:1
Creating a Search Index
Located inlibs/skiff-front-search/src/searchIndex.ts
Basic Index Setup
libs/skiff-front-search/src/searchIndex.ts:24
Adding Items to Index
libs/skiff-front-search/src/searchIndex.ts:119
Searching the Index
libs/skiff-front-search/src/searchIndex.ts:149
Removing Items
libs/skiff-front-search/src/searchIndex.ts:130
Getting Recent Items
libs/skiff-front-search/src/searchIndex.ts:140
Managing Metadata
libs/skiff-front-search/src/searchIndex.ts:110
Manual Save
libs/skiff-front-search/src/searchIndex.ts:85
Search Utilities
Located inlibs/skiff-front-search/src/utils.ts
Default Search Options
libs/skiff-front-search/src/utils.ts:26
Text Processing
libs/skiff-front-search/src/utils.ts:1
Result Sorting
libs/skiff-front-search/src/utils.ts:46
Date Filtering
libs/skiff-front-search/src/utils.ts:1
Encryption
Located inlibs/skiff-front-search/src/encryption.ts
How Encryption Works
libs/skiff-front-search/src/encryption.ts:1
Email Search Example
Located inlibs/skiff-front-search/src/skemail.ts
libs/skiff-front-search/src/skemail.ts:1
Document Search Example
Located inlibs/skiff-front-search/src/editor.ts
libs/skiff-front-search/src/editor.ts:1
Stop Words
Located inlibs/skiff-front-search/src/stopWords.ts
Common words filtered out during indexing to improve relevance:
libs/skiff-front-search/src/stopWords.ts:1
Worker Wrapper
Located inlibs/skiff-front-search/src/workerWrapper.ts
libs/skiff-front-search/src/workerWrapper.ts:1
Complete Usage Example
Performance Considerations
Auto-Save Configuration
The search index uses debounced saving:- Debounce delay: 5 seconds after last change
- Max wait: 30 seconds (forces save even during continuous updates)
libs/skiff-front-search/src/searchIndex.ts:85
Memory Management
libs/skiff-front-search/src/searchIndex.ts:87
Installation
This is a workspace package:Key Dependencies
- minisearch: Full-text search engine
- idb-keyval: IndexedDB wrapper
- stemmer: Word stemming for better search
- lodash: Utility functions
- comlink: Web Worker communication
- skiff-crypto: Encryption utilities
- skiff-graphql: GraphQL types
- skiff-utils: Shared utilities
Related Libraries
- skiff-crypto - Encryption for search indices
- skiff-graphql - GraphQL types
- skiff-utils - Shared utilities
- skiff-front-utils - Frontend utilities