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

mkstruct

v2.0.0

Published

πŸš€ Instantly generate nested folder & file structures from flat or ASCII tree text files. Ideal for scaffolding projects in seconds.

Readme

mkstruct

npm version License: MIT Node.js Version

Generate folder and file structures from plain text lists or ASCII trees in seconds.

[email protected] ships a faster tree normalizer, smarter file detection, and a slimmer CLI tailored for everyday scaffolding workflows.


Why mkstruct v2

  • Auto-format detection – Paste a flat list or an ASCII tree; mkstruct figures it out.
  • Tree normalization – Cleans up mixed characters, tabs, and uneven spacing before parsing.
  • Robust file detection – Recognises extensionless files such as Makefile, Dockerfile, and dotfiles.
  • Safety first – Prevents writes outside the current working directory and supports dry-run previews.
  • CLI ergonomics – Zero config with npx, inline structures via -s, piping with --stdin, and verbose tracing when you need insight.

Requires Node.js 14.0.0 or newer.


Installation

| Use case | Command | | --- | --- | | Try once with npx | npx mkstruct structure.txt | | Install globally | npm install -g mkstruct | | Add to a project | npm install --save-dev mkstruct |

Each option exposes the same mkstruct binary.


Quick Start

Flat list input

Create structure.txt:

src/index.js
src/utils/api.js
src/components/Button.jsx
public/index.html
README.md

Generate:

npx mkstruct structure.txt

ASCII tree input

Create tree.txt:

β”œβ”€β”€ src
β”‚   β”œβ”€β”€ index.js
β”‚   β”œβ”€β”€ utils
β”‚   β”‚   └── api.js
β”‚   └── components
β”‚       └── Button.jsx
β”œβ”€β”€ public
β”‚   └── index.html
└── README.md

Generate:

npx mkstruct tree.txt

mkstruct automatically detects the format and creates folders before files so hierarchies stay intact.


CLI Reference

mkstruct [file] [options]

| Flag | Description | | --- | --- | | -d, --dry-run | Preview actions without touching the file system | | -f, --force | Overwrite files that already exist | | -s, --structure <text> | Supply the structure inline (great for snippets) | | --stdin | Read structure from standard input (pipe support) | | -v, --verbose | Show parsing and normalization diagnostics | | -h, --help | Display usage information |

Common patterns

Preview output:

mkstruct structure.txt --dry-run

Pipe a remote definition:

curl -s https://example.com/structure.txt | mkstruct --stdin

Inline structure on the fly:

mkstruct -s "api/\nβ”œβ”€β”€ routes/\nβ”‚   └── users.js\n└── server.js"

Regenerate boilerplate forcefully:

mkstruct structure.txt --force

Inspect normalization behaviour:

mkstruct tree.txt --verbose

Input Guidelines

Flat format rules

  1. Use forward slashes (/) to separate folders.
  2. Provide one path per line; blank lines are ignored.
  3. Lines with extensions are treated as files; others become folders unless they match common filenames.

ASCII tree rules

  1. Use the standard characters β”œβ”€β”€, └──, and β”‚ (single- or double-dash variants both work).
  2. Indent with four spaces or tabsβ€”mkstruct normalizes mixed indentation.
  3. Root nodes without connectors are supported (project as the first line, for example).

Example:

project
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ index.js
β”‚   └── utils
β”‚       └── helper.js
└── README.md

Recipes

React starter

src/App.jsx
src/main.jsx
src/components/Navbar.jsx
src/components/Hero.jsx
src/components/Footer.jsx
src/pages/Home.jsx
src/pages/About.jsx
src/hooks/useAuth.js
src/utils/api.js
src/styles/globals.css
public/favicon.ico
npx mkstruct react-structure.txt

Express API tree

β”œβ”€β”€ server.js
β”œβ”€β”€ config
β”‚   β”œβ”€β”€ database.js
β”‚   └── environment.js
β”œβ”€β”€ routes
β”‚   β”œβ”€β”€ api.js
β”‚   β”œβ”€β”€ auth.js
β”‚   └── users.js
β”œβ”€β”€ controllers
β”‚   β”œβ”€β”€ authController.js
β”‚   └── userController.js
β”œβ”€β”€ models
β”‚   └── User.js
β”œβ”€β”€ middleware
β”‚   β”œβ”€β”€ auth.js
β”‚   └── errorHandler.js
└── utils
    β”œβ”€β”€ logger.js
    └── validators.js
npx mkstruct backend-tree.txt

Documentation bundle

docs/getting-started.md
docs/api/authentication.md
docs/api/endpoints.md
docs/guides/deployment.md
docs/guides/testing.md
docs/examples/basic.md
docs/examples/advanced.md

Guardrails

  • Refuses to write outside the current working directory.
  • Creates parent folders before files to avoid partial structures.
  • Skips existing files unless --force is supplied.
  • Supports dry-runs for safe previews and verbose logging for debugging.

Troubleshooting

| Symptom | Cause | Fix | | --- | --- | --- | | Error: No input provided | No file, --stdin, or -s argument supplied | Provide a filename, pipe stdin, or use -s | | Files appear in the wrong place | Ran the command from the wrong directory | pwd, cd into the project root, rerun | | Tree format not detected | Non-standard characters or broken indentation | Copy the tree glyphs exactly; run with --verbose for hints | | Refusing to write outside CWD | Paths contain .. or absolute segments | Ensure all paths stay relative to the project root |


Contributing

  1. Fork the repo and create a feature branch.
  2. Install dependencies: npm install.
  3. Run tests: npm test.
  4. Open a pull request referencing any related issues.
git clone https://github.com/Gitnaseem745/mkstruct.git
cd mkstruct
npm install
npm test

Bug reports and feature ideas are welcome via GitHub Issues.


License

MIT Β© Naseem Ansari

See the full text in LICENSE.


Stay in Touch

If mkstruct saves you setup time, consider dropping the repo a ⭐️.


Made with ❀️ by developers, for developers