back to blog
TypescriptAniListani-clientNPMOpenSource

ani-client

A simple npm package to communicate with AniList API.

May 4, 2026
4 min read

Why I built ani-client

I always wanted an easier way to communicate with the AniList API. I looked around for a package that felt simple, typed, and pleasant to use, but I never really found one that matched what I had in mind. Some libraries felt too heavy, some were too opinionated, and others just did not fit the way I like to build things. So instead of forcing myself to adapt to something that did not feel right, I decided to build my own package.

That decision came from a pretty common developer frustration: when the tool you need exists, but it still does not feel like your tool. I was not trying to reinvent AniList access for everyone. I just wanted a package that would make sense for the way I build projects, especially with TypeScript in mind.

The idea behind it

The goal with ani-client was never to make the biggest or most feature-packed client possible. I wanted something clean, focused, and easy to understand. A package should not get in the way of the API it wraps. It should make the experience smoother, while staying close enough to the original service so developers still know what is happening under the hood.

That is why I wanted ani-client to feel lightweight and predictable. No unnecessary abstraction. No weird learning curve. Just a simple way to query AniList and use the data in real projects without fighting the library.

Why I made my own package

A lot of the time, when I build something, I first ask myself whether an existing solution already solves the problem well enough. If the answer is yes, I usually use it. But in this case, I could not find a package that really matched the balance I wanted between simplicity, typing, and ergonomics.

I also wanted the package to reflect how I like to work:

  • small and readable API surface.
  • good TypeScript support.
  • straightforward integration in real projects.
  • minimal friction for people who just want to fetch anime or manga data.

Making the package myself also gave me complete control over the design choices. I could shape the API around actual usage instead of working around someone else’s architecture.

What ani-client is for

ani-client is meant to be the kind of package you can drop into a project and start using quickly. It is useful for things like:

  • Discord bots.
  • anime tracking tools.
  • portfolio projects.
  • anime search features.
  • personal dashboards or fan apps.

For me, the interesting part was not only fetching data, but making that data easy to work with in TypeScript. That matters a lot when you are building something that needs to stay maintainable over time.

What I learned

Building ani-client taught me that small packages can still be meaningful. You do not need to create a giant ecosystem to make something valuable. Sometimes the best open-source project is simply the one that solves a very specific problem in a clean way.

It also reminded me how much polish matters. The developer experience of a package is not just about whether it works. It is about whether it feels obvious, stable, and pleasant to use. Good naming, clear types, and sensible defaults do a lot more than people think.

Another thing I realized is that open source is often less about perfection and more about iteration. A package gets better because you keep using it, testing it in real projects, and refining the parts that feel awkward.

What comes next

The next step for ani-client is to make it more complete without making it bloated. I want to keep the same simple philosophy, but improve the parts that matter most in real-world usage.

What I see next is:

  • better coverage of AniList features.
  • improved typings where the API can be more expressive.
  • cleaner helpers for common use cases.
  • better documentation and examples.
  • a more polished developer experience overall.

I also want the package to stay honest about what it is. It does not need to become everything for everyone. It just needs to be the best version of itself.

Long-term vision

In the long run, I see ani-client as part of a larger ecosystem of tools I actually enjoy using myself. I like building projects that are useful on their own but also fit naturally into other things I make, whether that is a Discord bot, a website, or a personal tool.

That is really the point of open source for me: building something that starts from a personal need, then becomes useful to other people too. If ani-client can help someone avoid the same frustration I had, then it has already done its job.

For now, I want to keep improving it step by step, while keeping the codebase approachable and the API simple. That balance matters more to me than chasing features for the sake of it.