
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
@crashbytes/dendro
Advanced tools
A beautiful directory tree visualization CLI with file type icons - dendro (δένδρο) means 'tree' in Greek
dendro (δένδρο) - from the Greek word for "tree"
A beautiful, fast directory tree visualization CLI with intuitive file type icons.
🔗 GitHub Repository | 📦 npm Package
The name dendro comes from the Greek word δένδρο (pronounced "DEN-droh"), meaning "tree". It's:
When you visualize directory structures, you're essentially mapping a tree—and that's exactly what dendro does, with style.
npm install -g @crashbytes/dendro
npx @crashbytes/dendro
git clone https://github.com/CrashBytes/dendron.git
cd dendron
npm install
npm link
# Visualize current directory
dendro
# Visualize specific directory
dendro /path/to/project
# Limit depth to 3 levels
dendro ~/projects -d 3
# Show all files including hidden
dendro -a
# Show help
dendro --help
Usage: dendro [path] [options]
Arguments:
path Directory path to display (default: ".")
Options:
-V, --version Output version number
-d, --max-depth <number> Maximum depth to traverse
-a, --all Show hidden files and directories
--no-icons Disable file type icons
-p, --show-paths Show full paths
-e, --exclude <patterns> Patterns to exclude (regex)
--no-stats Hide statistics summary
-h, --help Display help
# Show only 2 levels deep
dendro -d 2
# Show all files including hidden ones
dendro -a
# Exclude specific patterns (node_modules, test directories)
dendro -e "node_modules" "test" "__pycache__"
# Show full file paths
dendro -p
# Plain text output (no icons)
dendro --no-icons
# Combine options
dendro ~/my-project -d 3 -a -e "*.log" "dist"
dendro automatically detects and displays appropriate icons for common file types:
| Icon | File Types |
|---|---|
| 📁 | Directories |
| 📜 | JavaScript (.js, .jsx, .mjs, .cjs) |
| 📘 | TypeScript (.ts, .tsx) |
| 📋 | JSON (.json) |
| 📝 | Markdown (.md, .mdx) |
| 🎨 | Stylesheets (.css, .scss, .sass, .less) |
| 🌐 | HTML (.html, .htm) |
| 🖼️ | Images (.png, .jpg, .gif, .svg, .webp) |
| 🎬 | Videos (.mp4, .avi, .mov, .mkv) |
| 🎵 | Audio (.mp3, .wav, .ogg, .m4a) |
| 📕 | PDFs (.pdf) |
| 🗜️ | Archives (.zip, .tar, .gz, .rar, .7z) |
| 🗄️ | Databases (.db, .sqlite, .sql) |
| ⚙️ | Config files (.yaml, .yml, .toml, .ini) |
| 🔒 | Lock files (package-lock.json, yarn.lock) |
| 📦 | Git files (.gitignore, .gitattributes) |
| 📄 | Other text files |
Use dendro in your Node.js projects:
const { buildTree, renderTree, getTreeStats } = require('@crashbytes/dendro');
// Build a tree structure
const tree = buildTree('/path/to/directory', {
maxDepth: 3,
showHidden: false,
excludePatterns: [/node_modules/, /\.git/]
});
// Render as text
const output = renderTree(tree, {
showIcons: true,
showPaths: false
});
console.log(output);
// Get statistics
const stats = getTreeStats(tree);
console.log(`${stats.directories} directories, ${stats.files} files`);
buildTree(dirPath, options)Builds a tree data structure from a directory.
Parameters:
dirPath (string) - Path to directoryoptions (object)
maxDepth (number) - Maximum depth to traverse (default: Infinity)showHidden (boolean) - Include hidden files (default: false)excludePatterns (RegExp[]) - Patterns to exclude (default: [])Returns: Tree object with structure:
{
name: string,
type: 'file' | 'directory',
icon: string,
path: string,
children?: TreeNode[]
}
renderTree(tree, options)Renders a tree structure as formatted text.
Parameters:
tree (object) - Tree structure from buildTreeoptions (object)
showIcons (boolean) - Display file type icons (default: true)showPaths (boolean) - Display full paths (default: false)prefix (string) - Internal use for recursionisLast (boolean) - Internal use for recursionReturns: Formatted string representation
getTreeStats(tree)Calculates statistics for a tree.
Returns: Object with { files: number, directories: number }
By default (without -a flag), dendro excludes:
.)node_modules.git.DS_StoredistbuildcoverageOverride with -a or use -e to add custom exclusions.
const { buildTree, renderTree } = require('@crashbytes/dendro');
// Build tree
const tree = buildTree('.', { maxDepth: 3 });
// Filter to show only JavaScript files
function filterJS(node) {
if (node.type === 'file') {
return /\.(js|jsx|ts|tsx)$/.test(node.name) ? node : null;
}
if (node.children) {
const filtered = node.children.map(filterJS).filter(Boolean);
return filtered.length > 0 ? { ...node, children: filtered } : null;
}
return null;
}
const jsOnly = filterJS(tree);
console.log(renderTree(jsOnly));
// In your build script
const { buildTree, getTreeStats } = require('@crashbytes/dendro');
const tree = buildTree('./dist');
const stats = getTreeStats(tree);
console.log(`Build output: ${stats.files} files in ${stats.directories} directories`);
See the /examples directory for more usage examples:
basic-usage.js - Simple tree visualizationadvanced-usage.js - Custom filtering and statisticsWe welcome contributions! Here's how you can help:
git clone https://github.com/YOUR-USERNAME/dendron.git
cd dendron
npm install
git checkout -b feature/amazing-feature
npm test
node bin/cli.js
git commit -m "Add amazing feature"
git push origin feature/amazing-feature
Found a bug or have a feature request? Please open an issue on GitHub Issues.
When reporting bugs, please include:
npm test
# Clone the repository
git clone https://github.com/CrashBytes/dendron.git
cd dendron
# Install dependencies
npm install
# Link for local testing
npm link
# Make changes and test
dendro ~/test-directory
See CHANGELOG.md for version history.
MIT License - see LICENSE file for details.
CrashBytes
Built with ❤️ for developers who love beautiful CLIs.
Special thanks to all contributors who help make dendro better!
If you find dendro useful, please:
dendro - Because every great project starts with understanding its structure 🌳
FAQs
A beautiful directory tree visualization CLI with file type icons - dendro (δένδρο) means 'tree' in Greek
The npm package @crashbytes/dendro receives a total of 0 weekly downloads. As such, @crashbytes/dendro popularity was classified as not popular.
We found that @crashbytes/dendro demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.