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

doublenote-backend

v0.5.0

Published

This is the (optional) backend of DoubleNote. It's an [Express.js](https://expressjs.com) server written in TypeScript.

Readme

DoubleNote Backend

This is the (optional) backend of DoubleNote.
It's an Express.js server written in TypeScript.

It's optional because the application was designed to support being served as static resources from a regular CDN or static-site host such as GitHub pages.

The goal of the server is to serve the compiled files of the frontend (located in /frontend/dist/DoubleNote/) when requested via HTTP or HTTPS and serve API requests.

Instead of displaying a 404 error, the server should serve the index.html. It is then the responsibility of the frontend to inform the user, that the requested route does not lead to a specific target.
The frontend achieves this functionality by providing a 404.html symbolic link to the index.html file in the gh-pages branch of this repository to be served statically on GitHub pages.

If this server isn't used, the host must provide some way of achieving the same functionality (redirecting 404s to index.html) using the configuration file(s) of the static server software used.

Goals

The frontend is designed to support multiple (or none) backend servers at once. Each server may host its own notebooks for synchronisation purposes.

Eventually, this server implementation should provide APIs which allow the automatic persistance of notebooks outside of localStorage.

It's meant to be a decentralised kind of backend service, in which every user gets to choose on which servers (if any) they wish to store their notebooks.

This is supposed to make sharing and collaboration easier, but is not required, as this application is designed to be static-serving-capable.

Folder structure

  • /backend/ Contains all files of the backend
    • README.md You are here
    • src/ Contains all backend source files
      • main.ts The main entry point of the application
      • server/ All other source files
        • server.ts The file configuring starting the server
        • routes/ Contains all routes mounted to the server
          • routes.ts The top-level routing file
          • files.ts Provides routing to static files of the frontend
          • api/ Contains all API routes
            • api.ts The top-level file for API routes
            • v1.ts The top-level file for the first version of the API
    • dist/ Compiler outout; included in .gitignore
    • node_modules/ Installed npm dependencies; included in .gitignore
    • package.json Declares all backend dependencies and npm scripts
    • package-lock.json An npm-generated file
    • tsconfig.json Configures how TypeScript should compile the backend
    • .gitignore Prevents node_modules and dist from entering version control

Further reading

For information about the frontend, see the frontend README.md.
For information about the application as a whole, see the main README.md.