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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@rpattersonnet/project-structure

v0.0.1-b1

Published

Project structure foundation or template, package metadata

Downloads

6

Readme

Project Structure

project-structure foundation or template

This repository is meant to be used as a minimal, yet opinionated baseline for software projects. It includes:

  • A Makefile for local development build, test and maintenance tasks
  • A Makefile target to format all code, including using for style
  • A kitchen sink linter configuration that runs all available code checks
  • VCS hooks to enforce conventional commits and successful build and test on commit and push, and release notes on push
  • Targets/recipes in the Makefile to automate releases controlled by conventional commits and end-user oriented release notes by Towncrier
  • Targets/recipes in the Makefile to automate upgrading requirements and dependencies

The intended use is to add this repository as a VCS remote for your project. Thus developers can merge changes from this repository as we make changes related to project structure and tooling. As we add structure specific to certain types of projects (e.g. CLI scripts, web development, etc.), frameworks, libraries and such, branches will be used for each such variation such that structure common to different variations can be merged back into the branches for those specific variations.

Template Usage

This is a rough guide to applying this project template to your project. This is not thoroughly tested as such tests would be so meta as to be extremely wasteful of developer time to create and maintain. So report any issues you have or better yet figure it out and submit a PR with corrections to this section.

  1. Choose the right branch to use:

    Is your project a CLI utility? A web application? For what programming language will your project publish packages for? Which project hosting provider and/or CI/CD platform will you use? Choose the appropriate branch for your project:

    • (py|js|ruby|etc.):

      Basic package metadata with build, tests, linters, code formatting and release publishing from local developer checkouts.

    • etc.

  2. Reconcile VCS history:

    If starting a fresh project:

    $ git clone --origin "template" --branch "dist" \
    "https://gitlab.com/rpatterson/project-structure.git" "./foo-project"
    $ cd "./foo-project"
    $ git remote add "origin" "[email protected]:foo-username/foo-project.git"
    $ git config remote.template.tagOpt --no-tags
    $ git switch -C "main" --track "origin/main"

    If merging into an existing project:

    $ git remote add "template" \
    "https://gitlab.com/rpatterson/project-structure.git"
    $ git config remote.template.tagOpt --no-tags
    $ git merge --allow-unrelated-histories "template/dist"
  3. Rename file and directory paths derived from the project name:

    $ git ls-files | grep -iE 'project.?structure'
  4. Rename strings derived from the project name and template author identity in project files:

    $ git grep -iE 'project.?structure|ross|Patterson'
  5. Examine # TEMPLATE: comments and change as appropriate:

    These are the bits that need the developer's attention and reasoning to take the correct action. So read the comments and address them with care and attention:

    $ git grep "TEMPLATE"

Finally, remove this section from this ./README.rst and update the rest of it's content as appropriate for your project. As fixes and features are added to the upstream template, you can merge them into your project and repeat steps 3-5 above as needed.

This template publishes pre-releases on all pushes to the develop branch and final releases on all pushes to the main branch. Project owners may decide which types of changes should go through pre-release before final release and which types of changes should go straight to final release. For example they may decide that:

  • Contributions from those who are not maintainers or owners should be merged into develop. See the ./CONTRIBUTING.rst file for such an example public contributions policy and workflow.
  • Fixes for bugs in final releases may be committed to a branch off of main and, after passing all tests and checks, merged back into main to publish final releases immediately.
  • Routine version upgrades for security updates may also be merged to main as above for bug fixes.

Installation

Install using any tool for installing standard packages for the project language:

$ true "TEMPLATE: Always specific to the type of project"

Contributing

NOTE: This project is hosted on GitLab. There's a mirror on GitHub but please use GitLab for reporting issues, submitting PRs/MRs and any other development or maintenance activity.

See the ./CONTRIBUTING.rst file for more details on how to get started with development.

Motivation

There are many other project templates so why make another? I've been doing full-stack web development since 1998, so I've had plenty of time to develop plenty of opinions of my own. What I want in a template is complete tooling (e.g. test coverage, linting, formatting, CI/CD, etc.) but minimal dependencies, structure, and opinion beyond complete tooling (e.g. some build/task system, structure for frameworks/libraries not necessarily being used, etc.). I couldn't find a template that manages that balance so here we are.

I also find it hard to discern from other templates why they made what choices the did. As such, I also use this template as a way to try out various different options in the development world and evaluate them for myself. You can learn about my findings and the reasons the choices I've made in the commit history.

Most importantly, however, I've never found a satisfactory approach to keeping project structure up to date over time. So the primary motivation is to use this repository as a remote from which we can merge structure updates over the life of projects using the template.