MCPcopy Index your code
hub / github.com/brandonbothell/popyt

github.com/brandonbothell/popyt @v9.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v9.1.0 ↗ · + Follow
1,428 symbols 3,866 edges 83 files 146 documented · 10% updated todayv9.1.0 · 2026-04-28★ 449 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Popyt

Want to access data from the YouTube Data v3 API? Want a Node.js YouTube API wrapper with typings, promises, and caching? No problem! We've got ya covered. npm i popyt

40+ stars on GitHub 0 dependencies Permissive license Open an issue on GitHub Automated testing 90%+ test coverage DeepScan grade: good Trending on NPM Available on NPM Less than 750 kilobytes (100kB minified) 200+ packages use Popyt to access the YouTube API 5000 lines of code and counting Written in TypeScript

Examples

Ask the AI assistant on the documentation site, try out the 5-minute tutorial, or clone the example project.

What you'll need

  • A YouTube Data v3 API key:
  • Complete steps 1-4 on the page linked above and copy your API key.

Here are some basic methods (try it on CodeSandbox):

Instantiate the object:

const { YouTube } = require('popyt')
const youtube = new YouTube(apiKey)

Instantiate the object without caching:

const { YouTube } = require('popyt')
const youtube = new YouTube(apiKey, undefined, { cache: false })

Get a video by ID:

const video = await youtube.getVideo('dQw4w9WgXcQ')
console.log(video)

You can do the same thing with playlists, channels, and comments by replacing Video with any of them.

Get a video by URL:

const video = await youtube.getVideo('https://youtube.com/watch?v=dQw4w9WgXcQ')
console.log(video)

Get a video by title (or similar title):

const video = await youtube.getVideo('never gonna give you up')
console.log(video)

Search videos:

const search = await youtube.searchVideos('never gonna give you up')
console.log(search.items.map(v => v.title).join('\n')) // titles of 50 beautiful videos

Note: This wrapper does not implement every feature of the YouTube API. If you would like anything added, feel free to open a PR or an issue. The limits imposed by the wrapper are not imposed by YouTube.

Core symbols most depended-on inside this repo

get
called by 112
src/util/request/index.ts
mapToBase
called by 63
.pnp.loader.mjs
mapToBase
called by 59
docusaurus/.pnp.loader.mjs
mapToBase
called by 57
docusaurus/.pnp.cjs
makeCallback
called by 42
.pnp.loader.mjs
resolve
called by 42
src/services/resolution-service.ts
checkTokenAndThrow
called by 40
src/oauth/index.ts
resolve
called by 39
docusaurus/.pnp.cjs

Shape

Method 995
Function 317
Class 114
Enum 2

Languages

TypeScript100%

Modules by API surface

docusaurus/.pnp.cjs667 symbols
.pnp.loader.mjs242 symbols
docusaurus/.pnp.loader.mjs239 symbols
src/index.ts30 symbols
src/util/request/index.ts22 symbols
src/entities/video.ts17 symbols
src/entities/channel.ts17 symbols
src/util/cache.ts16 symbols
src/oauth/channels.ts14 symbols
src/entities/playlist.ts12 symbols
src/oauth/videos.ts10 symbols
src/entities/comment.ts10 symbols

For agents

$ claude mcp add popyt \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact