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

strapi-typed-client

v2.2.1

Published

Type-safe Strapi v5 client with automatic TypeScript codegen and populate type inference

Readme

strapi-typed-client

npm version Ask DeepWiki GitMCP

Automatic TypeScript type generation and a fully typed API client for Strapi v5. Install a Strapi plugin, run a single CLI command, and get clean TypeScript interfaces plus a ready-to-use fetch client with full autocomplete.

Documentation

Quick Start

1. Install

npm install strapi-typed-client

2. Enable the Strapi plugin

// config/plugins.ts
export default {
    'strapi-typed-client': {
        enabled: true,
    },
}

3. Generate types

Scaffold the workflow (adds strapi:generate / strapi:check scripts to your package.json), then generate into your source tree and commit the result:

npx strapi-types init
npm run strapi:generate

Or run the generator directly:

npx strapi-types generate --url http://localhost:1337 --output ./src/strapi

Committed types survive reinstalls and show up as reviewable diffs.

4. Use

import { StrapiClient } from '@/strapi'

const strapi = new StrapiClient({
    baseURL: 'http://localhost:1337',
})

const articles = await strapi.articles.find({
    filters: { title: { $contains: 'hello' } },
    populate: { category: true, cover: true },
})

articles[0].category.name // fully typed

Features

  • Clean, flat TypeScript interfaces from your Strapi schema
  • Typed API client — find, findOne, create, update, delete
  • Built-in upload plugin support — client.upload.upload/find/findOne/destroy
  • Built-in i18n support — client.i18n.locales() for the configured locales
  • Typed errors with isStrapiErrorOf for discriminated narrowing
  • Session auth (Strapi 5.43+ jwtManagement: 'refresh') — auto-detected, with transparent token refresh
  • Automatic type inference for populate — no manual casting
  • Nested populate with unlimited depth
  • Separate Input types for create/update (relations as IDs)
  • Creator fields — createdBy / updatedBy for content types that set populateCreatorFields
  • DynamicZone support with union types
  • Components and nested components
  • Entity-specific filter types
  • Next.js integration (withStrapiTypes, cache, revalidate, tags)
  • Schema hashing — skips regeneration when nothing changed
  • Framework-agnostic — works with any TypeScript project

Session auth (Strapi 5.43+)

When your backend runs users-permissions with jwtManagement: 'refresh' (short-lived access JWT + rotating refresh token in an httpOnly cookie), the generator detects it automatically and bakes the session flow into the client — no config needed:

const strapi = new StrapiClient({
    baseURL: 'http://localhost:1337',
    credentials: 'include', // let the refresh cookie travel
})

await strapi.auth.login({ identifier, password }) // access token kept in memory
await strapi.auth.refresh() // bootstrap the session on page load
await strapi.articles.find() // expired token? refreshed & retried transparently
await strapi.auth.logout() // revoke the session server-side

On a 401 — or a 403 from an anonymous request, which is what Strapi actually answers when a protected route is hit with no credentials (the page-reload bootstrap case) — the client performs a single-flight POST /api/auth/refresh and retries the request once; a dead session surfaces the original error. The flow is browser-only (server-side code keeps using API tokens) and steps aside whenever you manage the Authorization header yourself. Legacy backends are untouched — the generated client behaves exactly as before. See Authentication for details.

Requirements

  • Strapi v5
  • Node.js >= 22

Documentation

Full documentation is available at boxlab-ltd.github.io/strapi-typed-client:

Use with AI tools

The docs are published in agent-friendly formats so AI coding assistants answer questions about this library accurately:

  • llms.txt/llms.txt and /llms-full.txt. Add the docs root https://boxlab-ltd.github.io/strapi-typed-client/ to Cursor (@Docs), Continue (@docs), or any tool that indexes docs by URL.

  • context7 — indexed at /boxlab-ltd/strapi-typed-client; the docs site also embeds the context7 chat widget.

  • GitMCP — point any MCP-capable agent at https://gitmcp.io/BoxLab-Ltd/strapi-typed-client:

    {
        "mcpServers": {
            "strapi-typed-client": {
                "url": "https://gitmcp.io/BoxLab-Ltd/strapi-typed-client"
            }
        }
    }
  • DeepWiki — browse or query the auto-generated wiki at deepwiki.com/BoxLab-Ltd/strapi-typed-client, or connect its MCP at https://mcp.deepwiki.com/mcp.

Issues & Contributing

Found a bug or have a feature request? Open an issue on GitHub.

Pull requests are welcome — please open an issue first to discuss what you'd like to change.

Support

The project is MIT-licensed and free to use. If it saved your team time, there are a few ways to support it — starring the repo, reporting bugs, or a donation. Teams that need priority fixes or help with integration can reach commercial support at [email protected].

License

MIT