Troubleshooting Guide
Common integration issues and the fastest fixes.
Entries not showing
If <ChangelogWidget>, <Tour>, <Banner>, or <NewBadge> render nothing:
- Check required entry fields:
id,label,releasedAt,showNewUntil. - Verify time gates: expired
showNewUntilor futurepublishAtwill hide entries. - If using
version, confirmFeatureDropProvider appVersionsatisfies constraints. - If using
audience, confirmuserContextmatches entryaudiencerules. - If using
flagKeyorproduct, confirm bridge/scope is wired correctly. - If using
dependsOn, verify prerequisite seen/clicked/dismissed state exists.
There is no devMode override. For local debugging, use a temporary manifest entry with a future showNewUntil and broad targeting.
Spotlight / hotspot / tour placement issues
- Ensure target elements exist before component mount.
- Mount guided components after app shell/layout finishes rendering.
- Check stacking context conflicts (
position,overflow,z-index). - Tune z-index CSS variables if needed (for example
--featuredrop-z-index,--featuredrop-tour-z-index).
Duplicate React instance errors
Errors like Invalid hook call or Cannot read properties of null (reading 'useRef') usually mean multiple React copies are bundled.
vite.config.ts
import path from 'node:path'
export default {
resolve: {
alias: {
react: path.resolve('./node_modules/react'),
'react-dom': path.resolve('./node_modules/react-dom')
}
}
}Remote sync mismatch across devices
- Confirm your API implements
RemoteAdaptercontract endpoints (GET /state,POST /dismiss,POST /dismiss-all). - If using
HybridAdapter, callawait storage.sync()after auth/session restore. - Check for backend 5xx or auth failures causing remote retries/circuit-breaker behavior.
Build-time manifest failures
npx featuredrop validate --pattern "features/**/*.md"
npx featuredrop doctor --pattern "features/**/*.md"If still blocked, open a GitHub issue with a minimal reproduction.