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

tmdb-ts

v2.3.0

Published

TMDB v3 library wrapper

Downloads

9,689

Readme

tmdb-ts

CI Version npm npm Downloads

TypeScript library wrapper for TMDB API v3.

Features

  • Full TypeScript support with comprehensive type definitions
  • Modern authentication using JWT access tokens (no API key in URLs)
  • Complete API coverage for TMDB v3 endpoints
  • Promise-based async/await interface
  • Zero configuration - just provide your access token
  • Isomorphic - works in Node.js (18+) and modern browsers
  • Zero dependencies - uses native fetch API

Installation

npm install --save tmdb-ts

Usage

This library uses JWT authentication tokens for requests, so there is no need to append an API key to the URL. Once you have registered for access to the API, you can use your access token as follows:

Note: Version 1.0 removed the default import. Make sure to use named imports.

import { TMDB } from 'tmdb-ts';

const tmdb = new TMDB('accessToken');

try {
  const movies = await tmdb.search.movies({ query: 'American Pie' });
  console.log(movies);
} catch (err) {
  // handle error
}

Custom Fetch

You can pass a custom fetch implementation via the options parameter. This is useful for frameworks like Next.js that patch the global fetch for caching, or for adding logging, interceptors, or using a different HTTP library.

const tmdb = new TMDB('accessToken', { fetch: customFetch });

Next.js

Next.js patches the global fetch with caching support. Since tmdb-ts uses native fetch by default, this works automatically. However, you can explicitly pass it for clarity or to customize caching:

const tmdb = new TMDB('accessToken', {
  fetch: (url, init) =>
    fetch(url, { ...init, next: { revalidate: 3600 } }),
});

undici

import { fetch as undiciFetch } from 'undici';

const tmdb = new TMDB('accessToken', { fetch: undiciFetch });

cross-fetch

import crossFetch from 'cross-fetch';

const tmdb = new TMDB('accessToken', { fetch: crossFetch });

node-fetch

import nodeFetch from 'node-fetch';

const tmdb = new TMDB('accessToken', { fetch: nodeFetch as unknown as typeof fetch });

axios

Axios has a different API shape, so it needs a small wrapper:

import axios from 'axios';
import { TMDB } from 'tmdb-ts';

const axiosFetch: typeof fetch = async (input, init) => {
  const { data, status, statusText, headers } = await axios({
    url: input.toString(),
    method: init?.method ?? 'GET',
    headers: init?.headers as Record<string, string>,
    data: init?.body,
  });

  return new Response(JSON.stringify(data), {
    status,
    statusText,
    headers: new Headers(headers as Record<string, string>),
  });
};

const tmdb = new TMDB('accessToken', { fetch: axiosFetch });

// Now all requests go through axios
const movie = await tmdb.movies.details(550);
console.log(movie.title); // "Fight Club"

const results = await tmdb.search.movies({ query: 'Inception' });
console.log(results.results[0].title); // "Inception"

got

got also needs a wrapper since it has a different API:

import got from 'got';

const gotFetch: typeof fetch = async (input, init) => {
  const response = await got(input.toString(), {
    method: init?.method as any,
    headers: init?.headers as Record<string, string>,
    body: init?.body as string,
  });

  return new Response(response.body, {
    status: response.statusCode,
    statusText: response.statusMessage,
    headers: new Headers(response.headers as Record<string, string>),
  });
};

const tmdb = new TMDB('accessToken', { fetch: gotFetch });

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.