Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ olib Public

An SDK for the OpenLibrary platform

License

Notifications You must be signed in to change notification settings

asmelabs/olib

@asmelabs/olib

A type-safe TypeScript SDK for the Open Library API.

Status: Work in progress 🚧

Why?

Open Library is an incredible open-source project β€” a free, editable catalog aiming to have one web page for every book ever published. But working with its API in TypeScript is painful:

  • No type safety. Response shapes are undocumented, inconsistent, and polymorphic. A description field might be a string or { type: string; value: string }. Good luck.
  • No official TypeScript SDK. There's a Python client, but nothing for the JS/TS ecosystem.
  • Verbose and scattered docs. You end up reading source code to understand what you'll actually get back.

@asmelabs/olib fixes all of that β€” Zod-validated responses, normalized types, and a clean API surface.

Install

# bun
bun add @asmelabs/olib
# npm
npm install @asmelabs/olib
# yarn
yarn add @asmelabs/olib
# pnpm
pnpm add @asmelabs/olib

Quick Start

import { createOpenLibraryClient } from "@asmelabs/olib";
const ol = createOpenLibraryClient();
// Search for books
const results = await ol.search("Fantastic Mr Fox"); // #not implemented yet
// Get a work by its Open Library ID
const work = await ol.works.get("OL45804W"); // #not implemented yet
// Get an edition by ISBN
const edition = await ol.editions.getByISBN("9780140328721"); // #not implemented yet
// Get an author
const author = await ol.authors.get("OL34184A");
// Build a cover image URL
const coverUrl = ol.covers.book("9780140328721").type("isbn").size("M").build();
// => "https://covers.openlibrary.org/b/isbn/9780140328721-M.jpg"

Features

  • πŸ”’ Type-safe β€” Full TypeScript types for all endpoints, powered by Zod schemas
  • βœ… Runtime validation β€” Responses are parsed and validated at runtime, not just at compile time
  • 🌐 Universal β€” Works in Node.js, Bun, Deno, and browsers (uses fetch)
  • πŸ“¦ Tree-shakeable β€” ESM-first, import only what you need
  • 🧩 Normalized responses β€” Polymorphic fields like description are normalized to consistent types
  • πŸ“– Covers helper β€” URL builder for book covers and author photos without extra API calls

API Coverage

Module Endpoints Status
Search Books, Authors, Subjects #not implemented yet
Works Get, Editions, Ratings, Bookshelves #not implemented yet
Editions Get, by ISBN #not implemented yet
Authors Get, Works βœ…
Covers Book covers, Author photos (URL builder) βœ…
Subjects Get #not implemented yet

Docs

β†’ Full documentation coming soon.

Requirements

  • TypeScript β‰₯ 5.0
  • A fetch-compatible runtime (Node 18+, Bun, Deno, modern browsers)

Contributing

Contributions are welcome! Please read the Contributing Guide before submitting a PR.

License

MIT

Credits

Built and maintained by Asme Labs.

Open Library is a project of the Internet Archive, a 501(c)(3) non-profit.

About

An SDK for the OpenLibrary platform

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors 2

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /