The Pullwish SDKs now live under @pullwish on npm
3 min read

The Pullwish SDKs now live under @pullwish on npm

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.

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-tracker
  • featurely-feature-reporter → @pullwish/feature-reporter
  • featurely-site-manager → @pullwish/site-manager
  • featurely-i18n → @pullwish/i18n
  • featurely-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-tracker
import { 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-reporter
import { 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-manager
import { 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/i18n
import { 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/logger
import { 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:

  1. npm uninstall featurely-<pkg> && npm install @pullwish/<pkg>
  2. Update your imports to @pullwish/<pkg>.
  3. 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.