Claude-code-plugins algolia-hello-world
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/algolia-pack/skills/algolia-hello-world" ~/.claude/skills/jeremylongshore-claude-code-plugins-algolia-hello-world && rm -rf "$T"
manifest:
plugins/saas-packs/algolia-pack/skills/algolia-hello-world/SKILL.mdsource content
Algolia Hello World
Overview
Index records into Algolia and search them back — the two fundamental operations. Uses the
algoliasearch v5 client where all methods live on the client directly (no initIndex).
Prerequisites
v5 installed (algoliasearch
)npm install algoliasearch
andALGOLIA_APP_ID
environment variables setALGOLIA_ADMIN_KEY- See
for setupalgolia-install-auth
Instructions
Step 1: Index Records with saveObjects
import { algoliasearch } from 'algoliasearch'; const client = algoliasearch( process.env.ALGOLIA_APP_ID!, process.env.ALGOLIA_ADMIN_KEY! ); // saveObjects adds or replaces records. Each must have objectID // (or Algolia auto-generates one). const { taskID } = await client.saveObjects({ indexName: 'movies', objects: [ { objectID: '1', title: 'The Matrix', year: 1999, genre: 'sci-fi' }, { objectID: '2', title: 'Inception', year: 2010, genre: 'sci-fi' }, { objectID: '3', title: 'Pulp Fiction', year: 1994, genre: 'crime' }, ], }); // Wait for indexing to complete before searching await client.waitForTask({ indexName: 'movies', taskID }); console.log('Indexing complete.');
Step 2: Search with searchSingleIndex
// Basic search — Algolia searches all searchableAttributes by default const { hits } = await client.searchSingleIndex({ indexName: 'movies', searchParams: { query: 'matrix' }, }); console.log(`Found ${hits.length} results:`); hits.forEach(hit => { // _highlightResult shows which parts matched console.log(` ${hit.title} (${hit.year})`); });
Step 3: Configure Index Settings
// Settings define how Algolia ranks results await client.setSettings({ indexName: 'movies', indexSettings: { searchableAttributes: ['title', 'genre'], // Fields to search attributesForFaceting: ['genre', 'year'], // Filterable fields customRanking: ['desc(year)'], // Tie-breaker: newer first attributesToRetrieve: ['title', 'year', 'genre'],// Fields returned in hits }, });
Output
Indexing complete. Found 1 results: The Matrix (1999)
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Wrong credentials | Verify in dashboard > Settings > API Keys |
| Object > 10KB (free) or 100KB (paid) | Reduce record size or split into smaller records |
(on search) | Index not created yet | auto-creates the index |
never resolves | Indexing queue backlog | Check dashboard > Indices > Operations |
Examples
Multi-Index Search (federated)
// Search multiple indices in one API call const { results } = await client.search({ requests: [ { indexName: 'movies', query: 'inception' }, { indexName: 'actors', query: 'inception' }, ], }); results.forEach(result => { if ('hits' in result) { console.log(`${result.index}: ${result.hits.length} hits`); } });
Browse All Records (no query, iterate everything)
// browse returns up to 1000 records per call — use for data export const { hits, cursor } = await client.browse({ indexName: 'movies', browseParams: { hitsPerPage: 1000 }, }); console.log(`First page: ${hits.length} records`); // Use cursor to fetch next pages
Delete Records
// Delete by objectID await client.deleteObject({ indexName: 'movies', objectID: '3' }); // Delete by query match await client.deleteBy({ indexName: 'movies', deleteByParams: { filters: 'genre:crime' }, });
Resources
Next Steps
Proceed to
algolia-local-dev-loop for development workflow setup.