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

hacker-news

v0.0.1

Published

Scrapes Hacker News and exposes its API endpoints in a Node Module.

Readme

#HackerNews.js

HackerNews.js scrapes Hacker News (or how its HTML was rendered on 5/6/13) for data and exposes it in a Node.js module. This tries to be API compatible with the iHackerNews API, except for two cases: we do not return cachedOnUTC, and the newComments and commentThreads endpoint.

If there's enough demand, I'll add the cachedOnUTC thing, although I'll expose it in the

This module is exposed in a REST API in another Node.js module which is yet to be written. Expect it soon.

#Usage

npm install hacker-news

Insert it into your app using:

var hackernews = require('hacker-news')

Use it!

var frontPage = hackernews.news(callback)	

##Warning

Hacker News will block your IP if you query their server too much. I'm not quite sure their rate limits (and will update this as I find out), but it may be ~30 seconds. Most pages seem to be regenerated once in a while, anyways, so it shouldn't be a big deal.

#API Endpoints

###news

Parameters: [nextid, callback]

Lists the front page news articles in the format:

{
	nextId: 'id for next page of links'
	items: [{
		title: 'HackerNews.js',
		url: 'URL of article or item?id=selfpostid',
		postedBy: 'EdJiang',
		postedAgo: '1 day ago',
		points: 123,
		id: 1234567,
		commentCount: 32
		}...]
}

###byUsername

Parameters: username, [nextid, callback]

Lists a user's submitted articles in the format:

{
	nextId: 'id for next page of links'
	items: [{
		title: 'HackerNews.js',
		url: 'URL of article or item?id=selfpostid',
		postedBy: 'EdJiang',
		postedAgo: '1 day ago',
		points: 123,
		id: 1234567,
		commentCount: 32
		}...]
}

###new

Parameters: [nextid, callback]

Lists newly submited articles articles in the format:

{
	nextId: 'id for next page of links'
	items: [{
		title: 'HackerNews.js',
		url: 'URL of article or item?id=selfpostid',
		postedBy: 'EdJiang',
		postedAgo: '1 day ago',
		points: 123,
		id: 1234567,
		commentCount: 32
		}...]
}

###newComments

Parameters: [nextid, callback]

Endpoint differs from the iHackerNews API by adding a object wrapper with nextId info

Lists newly submitted comments in the format:

{
	nextId: 'id for next page of links'
	items: [{
		comment: 'This is awesome!',
		id: 1234567,
		parentID: 1234567,
		points: 0, //Note: HN doesn't show comment score, so this is always zero
		postedAgo: '2 hours ago',
		postedBy: 'pg', 
		postId: 12345678
		}...]
}

###ask

Parameters: [nextid, callback]

Lists the Ask HN articles in the format:

{
	nextId: 'id for next page of links'
	items: [{
		title: 'HackerNews.js'
		url: 'URL of article or item?id=selfpostid'
		postedBy: 'EdJiang'
		postedAgo: '1 day ago'
		points: 123
		id: 1234567
		commentCount: 32
		}...]
}

###post

Parameters: postId, [callback]

Lists information about a post in the format:

{
	title: 'HackerNews.js'
	url: 'URL of article or item?id=selfpostid'
	postedBy: 'EdJiang'
	postedAgo: '1 day ago'
	points: 123
	id: 1234567
	commentCount: 32
	text: 'This is only used for Ask HN or other self posts, otherwise will be an empty string!'
	comments: [{
		children: [...] 
		comment: 'This is awesome!',
		id: 1234567,
		parentID: 1234567,
		points: 0, //Note: HN doesn't show comment score, so this is always zero
		postedAgo: '2 hours ago',
		postedBy: 'pg', 
		postId: 12345678
	}...]
}

###threads

Parameters: userId, [callback]

Lists a user's comments and replies in a threaded format:

{
	nextId: 'id for next page of links'
	comments: [{
		children: [...] 
		comment: 'This is awesome!',
		id: 1234567,
		parentID: 1234567,
		points: 0, //Note: HN doesn't show comment score, so this is always zero
		postedAgo: '2 hours ago',
		postedBy: 'pg', 
		postId: 12345678
	}...]
}

###Profile

Parameters: userId, [callback]

Lists a user's profile information:

{
	about: 'I am Edward',
	createdAgo:'2 years ago',
	karma: '9001',
	username: 'EdJiang'
}