Featurely became Pullwish a while ago, and the SDKs still had the old names. That's fixed now. Every SDK ships under the @pullwish scope on npm.
The new names
featurely-error-tracker→@pullwish/error-trackerfeaturely-feature-reporter→@pullwish/feature-reporterfeaturely-site-manager→@pullwish/site-managerfeaturely-i18n→@pullwish/i18nfeaturely-logger→@pullwish/logger
The old packages haven't been removed and never will be. Builds that depend on them keep working. They're marked deprecated on npm, so the next time you install one, npm tells you which package replaced it.
What each package does
@pullwish/error-tracker catches unhandled errors and promise rejections automatically. Each one comes with breadcrumbs, device info and stack traces, and lands in your Pullwish dashboard.
npm install @pullwish/error-trackerimport { ErrorTracker } from "@pullwish/error-tracker";
const tracker = new ErrorTracker({ apiKey: "your_api_key", environment: "production" });
tracker.install();@pullwish/feature-reporter is a floating feedback button that opens a form for feature requests and bug reports. Submissions go straight to your project board.
npm install @pullwish/feature-reporterimport { FeatureReporter } from "@pullwish/feature-reporter";
new FeatureReporter({ apiKey: "your_api_key", projectId: "your-project-id" }).init();@pullwish/site-manager gives you maintenance mode, status banners, feature flags and version checks, all controlled from the dashboard.
npm install @pullwish/site-managerimport { SiteManager } from "@pullwish/site-manager";
const manager = new SiteManager({ apiKey: "your_api_key", projectId: "your-project-id" });
await manager.init();
if (manager.isFeatureEnabled("new-checkout")) renderNewCheckout();@pullwish/i18n loads translations from your project and caches them with ETag-based invalidation. It supports {{variable}} interpolation and plural forms.
npm install @pullwish/i18nimport { PullwishI18n } from "@pullwish/i18n";
const i18n = new PullwishI18n({ apiKey: "your_api_key", projectId: "your-project-id", locale: "en" });
await i18n.init();
i18n.t("nav.home");@pullwish/logger sends structured, batched logs from the browser or Node.js. You read them under Event Logs in the dashboard.
npm install @pullwish/loggerimport { createLogger } from "@pullwish/logger";
const logger = createLogger({ apiKey: process.env.PULLWISH_API_KEY!, projectId: process.env.PULLWISH_PROJECT_ID!, source: "server" });
logger.info("User signed in", { category: "auth" });Migrating
Migrating is mostly a find-and-replace:
npm uninstall featurely-<pkg> && npm install @pullwish/<pkg>- Update your imports to
@pullwish/<pkg>. - Rename the three exports that carried the old brand:
@pullwish/i18n:FeaturelyI18n→PullwishI18n@pullwish/logger:FeaturelyLogger→PullwishLogger@pullwish/error-tracker:FeaturelyErrorHandler→PullwishErrorHandler
Everything else keeps its name: ErrorTracker, FeatureReporter, SiteManager, createLogger and createServerI18n.
Your API keys and project IDs stay the same. Only the package names changed.
Tools
The tools moved to the new scope too. @pullwish/cli (npx @pullwish/cli@latest init) runs a guided setup that creates an API key and adds the init code for you. @pullwish/mcp gives your AI editor docs for all five SDKs.
