A simple Capacitor plugin to index and manage iOS Spotlight search items.
@daniele-rolli/capacitor-spotsearch
This plugin lets you programmatically add, update, and remove searchable items from iOS Spotlight, using the native CoreSpotlight API. Supports optional opt-in indexing and provides a Web fallback for testing.
- Add (
indexItems) searchable content to iOS Spotlight - Delete specific items by ID (
deleteItems) - Delete all items in a domain (
deleteDomain) - Optional opt-in indexing mode for user privacy
- Web plugin fallback (stores items in-memory)
npm install @daniele-rolli/capacitor-spotsearch
npx cap synciOS deployment target: 14.0+
import { SpotSearch } from '@daniele-rolli/capacitor-spotsearch';
// Example: Enable indexing (Web fallback only)
await SpotSearch.enableIndexing?.(true);import { SpotSearch } from '@daniele-rolli/capacitor-spotsearch';
await SpotSearch.indexItems({
items: [
{
id: 'article-123',
domain: 'news',
title: 'Breaking News: Cats Take Over',
snippet: 'A mysterious feline uprising...',
keywords: ['cats', 'news', 'funny'],
url: 'https://example.com/cats',
thumbnailBase64: 'iVBORw0KGgoAAAANSUhEUgAA...', // optional
extra: { category: 'animals' },
},
],
});await SpotSearch.deleteItems({
ids: ['article-123', 'article-456'],
});await SpotSearch.deleteDomain({
domain: 'news',
});| Field | Type | Required | Description |
|---|---|---|---|
id |
string |
✅ | Unique item identifier |
domain |
string |
✅ | Logical grouping (e.g., news, products) |
title |
string |
✅ | Main display title |
snippet |
string |
❌ | Short description for Spotlight |
keywords |
string[] |
❌ | Keywords to improve search |
url |
string |
❌ | Deep link or website URL |
thumbnailBase64 |
string |
❌ | Base64 thumbnail image |
extra |
Record<string, any> |
❌ | Additional metadata |
Indexes an array of SpotItem objects.
Deletes items by their unique IDs.
Deletes all items within a given domain.
Opt-in to allow Web plugin indexing. Defaults to false.
- Stores items in memory (
Map) for development/testing. - Requires calling
enableIndexing(true)before adding items.
- Uses
CSSearchableItemandCSSearchableIndex. - Images are provided via
thumbnailBase64. - Deleting a domain removes all items indexed under it.
Author: Daniele Rolli