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

@fanar-app/fanar

v0.1.0

Published

Debug receiver for Node.js — see what your app is doing, instantly.

Downloads

27

Readme

fanar

Debug receiver for Node.js — see what your app is doing, instantly.

Send any value from your Node.js app and watch it appear in the Fanar desktop app in real time. Zero dependencies. Works with plain Node, Express, Fastify, and NestJS.


Install

npm install @fanar-app/fanar

Requires the Fanar desktop app running on your machine.


Usage

import fanar from '@fanar-app/fanar'

// Primitives
fanar('hello world')
fanar(42)
fanar(true)

// Objects — renders as a collapsible JSON tree
fanar({ user, orders, meta })

// Exceptions — renders with clickable stack frames that open in VS Code
fanar(new Error('something went wrong'))

// SQL queries — syntax highlighted, bindings listed, slow queries flagged red
fanar.query('SELECT * FROM users WHERE id = ?', { bindings: [userId], duration: 12 })

// Timers
const t = fanar.time('render')
// ... do work ...
t.stop()

// Named label and color for any payload
fanar(data).label('after transform').color('purple')

// Clear the desktop app
await fanar.clear()

Request context

Automatically group all fanar() calls within a single request. Register the middleware once:

Express / Fastify

app.use(fanar.middleware())

Standalone (no HTTP framework)

fanar.run(() => {
  fanar('inside this closure — all calls share a request ID')
})

NestJS

import { FanarModule, FanarTypeOrmLogger, withFanar, Fanar } from '@fanar-app/fanar/nestjs'

Module setup:

// Inline config
FanarModule.forRoot({ enabled: true, host: 'localhost', port: 23517 })

// From ConfigService
FanarModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: (config: ConfigService) => ({
    enabled: config.get('NODE_ENV') !== 'production',
  }),
  inject: [ConfigService],
})

Once imported, a global interceptor fires after every request and sends: method, path, status, duration, and query count.

TypeORM — automatic query logging:

// data-source.ts
import { FanarTypeOrmLogger } from '@fanar-app/fanar/nestjs'

export const AppDataSource = new DataSource({
  // ...
  logger: new FanarTypeOrmLogger(),
})

Prisma — automatic query logging:

import { withFanar } from '@fanar-app/fanar/nestjs'

export const prisma = withFanar(
  new PrismaClient({ log: [{ emit: 'event', level: 'query' }] })
)

Method tracing:

import { Fanar } from '@fanar-app/fanar/nestjs'

@Injectable()
export class OrderService {
  @Fanar()
  async createOrder(dto: CreateOrderDto) {
    // method name, args, return value, and duration sent automatically
  }
}

Configuration

fanar.configure({ host: 'localhost', port: 23517 })

Or set at startup — the desktop app also accepts FANAR_PORT as an environment variable.


License

MIT