npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@bootstrapware/importer

v0.1.12

Published

Client-side CSV/XLSX/TSV importer for production SaaS. File contents never leave the browser.

Readme

@bootstrapware/importer

Embeddable CSV, Excel, and TSV importing for small production SaaS.

Parsing, mapping, and validation run in the browser. File contents, parsed rows, and filenames never leave the customer's machine. Bootstrapware is not in the data path. Your app receives normalized rows through onComplete and sends them to your own backend.

On the upload step, once fields are known, Download template.csv generates a client-side file from the local or hosted schema (label headers, falling back to keys; one type-derived example row).

pnpm add @bootstrapware/importer

Peer dependencies: react and react-dom (>= 18).

Local schema

Use this for development, evaluation, or when you want the schema in code.

import { Importer } from "@bootstrapware/importer";
import "@bootstrapware/importer/styles.css";

<Importer
  fields={[
    { key: "email", label: "Email", type: "email", required: true, aliases: ["Email Address", "E-mail"] },
    { key: "name", label: "Name", type: "string", required: true },
    { key: "seats", label: "Seats", type: "number" },
  ]}
  duplicateKey="email"
  onComplete={(rows) => {
    // Send rows to YOUR backend. Not ours.
  }}
/>

Hosted configuration

Publishable keys may appear in the browser. Secret keys must stay server-side. File contents are still never uploaded.

<Importer
  importerId="imp_..."
  publishableKey="bsw_live_pub_..."
  onComplete={(rows) => {
    // rows go to your API
  }}
/>

Optional apiBaseUrl defaults to https://importer.bootstrapware.co.

Field types

string | number | date | email | enum | boolean | url

enum requires enumValues.

Optional aliases?: string[] helps auto-map common header variants (Email Address, E-mail, and so on).

Optional unique: true on a field rejects duplicate values for that field within the file. Component-level duplicateKey does the same for one chosen field.

Optional locale props:

<Importer
  fields={fields}
  dateOrder="DMY"       // slash/dash/dot dates as day/month/year
  numberLocale="eu"     // or "us" | "auto" (default)
  dir="rtl"
  onComplete={onComplete}
/>

Parsing notes

  • Numbers accept US and European formats, currency symbols, percentages as fractions, and accounting negatives ($1,234.50, 1.234,56, 50% → 0.5, (500)). With numberLocale="eu" or semicolon-delimited auto, bare 1.234 is thousands.
  • Common empty placeholders (N/A, -, null) are treated as blank.
  • Emails like Ada <[email protected]> or mailto:[email protected] are normalized to [email protected].
  • Booleans accept true/false, yes/no, y/n, 1/0, on/off.
  • URLs accept http/https. Bare www.example.com is stored as https://www.example.com/.
  • Mapped cells are trimmed and internal whitespace is collapsed (including Excel NBSP).
  • CSV delimiter is auto-detected (,, ;, or |) from the leading non-empty rows, so a title line without separators does not force comma. Separators inside quoted cells are ignored. .tsv / .tab use tabs.
  • Multi-sheet Excel workbooks show a sheet picker on the map step.
  • Title or report rows above the real headers can be skipped: the map step shows a Header row picker (auto-detected from field keys, labels, and aliases). Column dropdowns include sample cell values from the file.
  • dateOrder="DMY" parses 3/4/2024 as 4 March; default MDY is 3 April. Dotted dates (15.03.2024) and values with a day or month above 12 are unambiguous and parse without flipping dateOrder.

Security

  • Do not put bsw_live_sec_ or bsw_test_sec_ in client code.
  • Do not upload spreadsheet contents to Bootstrapware.
  • onComplete is the data path to your application.

Docs

  • Product: https://bootstrapware.co/importer
  • Quickstart: https://bootstrapware.co/importer/docs/quickstart
  • Agent rules (AGENTS.md): https://bootstrapware.co/importer/docs/agents

For coding agents, copy the packaged AGENTS.md into your repo rules, or point the agent at the docs URL above.

License

MIT