
Security News
Lovable’s OJ Rewrites Vite’s Dev Server in Rust as AI Lowers the Cost of Forking Open Source
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.
@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/dendro.git
cd dendro
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/dendro.git
cd dendro
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/dendro.git
cd dendro
# 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.

Security News
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.