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

linuxify

v1.0.0

Published

Lightweight Linux system optimizer - manage services, extensions, and disk space with an intuitive web UI

Downloads

10

Readme

Linuxify

Lightweight Linux system optimizer - manage services, extensions, and disk space with an intuitive web UI

License: MIT Node.js Version

🚀 Features

  • Service Management - Enable/disable non-critical system services
  • Extension Control - Manage GNOME shell extensions (UI + system)
  • Disk Cleanup - One-click cleanup tasks (APT cache, thumbnails, logs, etc.)
  • Real-time Monitoring - Live system stats (uptime, load, memory, CPU, disk)
  • Critical Protection - Cannot disable critical system services
  • Tabbed Interface - Single-page layout prevents scroll conflicts
  • Auto-refresh - Updates every 5 seconds
  • Responsive Design - Works on desktop and mobile

📋 Requirements

  • Linux (Ubuntu, Debian, AnduinOS, etc.)
  • Node.js >= 16
  • npm or yarn
  • sudo access (for system operations)

🔧 Installation

Quick Start (Recommended)

The easiest way to get started with Linuxify is using npx:

npx linuxify

This will:

  1. Show an interactive setup wizard to choose your preferred setup mode
  2. Configure either sudoers or run directly with sudo
  3. Start the application automatically

Installation Options

Two setup modes are available. The setup wizard will guide you through both options:

1. Sudoers Mode (Recommended for security-conscious users)

npx linuxify
# Select option "1" when prompted
  • ✅ Configure sudoers file once during setup
  • ✅ Run Linuxify as regular user afterwards
  • ✅ Commands execute with limited, scoped sudo permissions
  • ⚠️ Requires understanding of sudoers configuration
  • ⚠️ Exposes commands to sudoers file (potential privilege escalation vector if other apps exploit sudoers)

2. Sudo Run Mode (Simpler, full control)

# If installed globally
sudo $(which npx) linuxify

# Or if in project directory
cd linuxify
sudo npm run cli

# Or using node directly
sudo node bin/linuxify
  • ✅ No sudoers configuration needed
  • ✅ Simplest setup (just one command with sudo)
  • ✅ Full root privileges, complete control
  • ⚠️ Web interface runs as root (security consideration)
  • ⚠️ Should only be accessed from localhost
  • ⚠️ Should not be exposed to network/internet

3. Skip Setup (Manual configuration later)

npx linuxify
# Select option "0" when prompted
  • Run without any setup
  • Configure manually later with npx linuxify --setup or sudo bash setup.sh

Manual Installation

# Clone or navigate to project
cd linuxify

# Install dependencies
npm install

# Start with setup wizard
npm run cli

# Or start directly (skip setup)
npm start

⚙️ Setup Modes & Sudo Configuration

Mode 1: Sudoers Mode (Recommended)

This is the traditional approach where you configure the sudoers file once, then run Linuxify as a regular user.

Automatic Setup (Recommended)

When you run npx linuxify and select sudoers mode:

  1. The setup wizard displays the required sudoers rules
  2. Automatically edits the sudoers file (just enter your sudo password)
  3. Verifies the configuration with validation
  4. Tests if passwordless sudo is working

The wizard uses a secure bash script that:

  • Validates sudoers syntax before applying changes
  • Creates backups of your sudoers file
  • Uses /etc/sudoers.d/linuxify (safer approach when available)
  • Falls back to direct editing only if needed
  • Shows clear success/error messages

Manual Setup (Alternative)

If you prefer manual setup:

sudo bash setup.sh

Or for interactive sudoers editing:

sudo visudo

Add at the end of the file:

# Linuxify - systemctl commands
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl disable *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl stop *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl mask *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl unmask *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl enable *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl start *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl restart *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl reload *

# Linuxify - cleanup commands
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt clean
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt autoremove -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt autoremove --purge -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/journalctl --vacuum-time=7d
%sudo ALL=(ALL) NOPASSWD: /usr/bin/journalctl --vacuum-size=500M
%sudo ALL=(ALL) NOPASSWD: /usr/bin/flatpak remove --unused -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/dnf clean all
%sudo ALL=(ALL) NOPASSWD: /usr/bin/pacman -Sc --noconfirm
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /tmp/*
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /var/tmp/*
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /root/.cache
%sudo ALL=(ALL) NOPASSWD: /usr/bin/find /root -name "*.old" -delete

To verify sudoers was applied correctly:

sudo -n systemctl status systemd

If this runs without asking for a password, sudoers is configured correctly!

Mode 2: Sudo Run Mode

This approach runs Linuxify directly as root with full privileges, without needing sudoers configuration.

Setup

# If installed globally
sudo $(which npx) linuxify

# Or navigate to project and run with node directly
cd linuxify
sudo node bin/linuxify

# Or use npm script
sudo npm run cli

Security Considerations:

  • ⚠️ The web interface runs as root (all operations have full system access)
  • ⚠️ Only access from localhost (127.0.0.1) - do not expose to network
  • ⚠️ Do not expose to internet or untrusted networks
  • ✅ Simpler setup - no sudoers configuration needed
  • ✅ Useful for one-time administrative tasks
  • ✅ Full control without privilege escalation concerns

When to Use:

  • Initial system setup/optimization before users are added
  • Running as system administrator on local machine only
  • One-time cleanup/optimization tasks
  • When you want to avoid sudoers configuration complexity

Standalone Setup Script

To configure sudoers without starting the app:

sudo bash setup.sh

This script:

  • ✓ Validates sudoers syntax before applying
  • ✓ Creates automatic backups
  • ✓ Prefers /etc/sudoers.d/linuxify for safer configuration
  • ✓ Verifies the final configuration
  • ✓ Shows clear success/error messages
  • ✓ Handles both systemctl and cleanup commands

📊 Tabs Overview

Services

  • Optimizable - Non-critical services you can safely disable
  • All Services - Complete system services list
  • Critical services are protected (cannot be disabled)

Extensions

  • UI Extensions - GNOME shell cosmetic/UI extensions (heavy hitters like blur-my-shell, arcmenu)
  • Other Extensions - System extensions (keyboard layout, keyboard indicators)

Disk Cleanup

One-click cleanup actions:

  • APT cache & autoremove
  • Desktop thumbnails & trash
  • NPM, Yarn, Pip caches
  • Flatpak unused packages
  • Journal logs (7+ days)
  • Old kernels

Quick Actions

  • Disable all UI extensions (preserves dash-to-panel)
  • Force refresh system data

🎯 System Stats

Real-time display of:

  • Uptime - System uptime duration
  • Load Average - CPU load (color-coded: green < 0.5, yellow < 1.0, red > 1.0)
  • Memory - Used / Total RAM
  • CPU - Processor model
  • Disk - Available / Total / Used space

🏗️ Architecture

linuxify/
├── server.js              # Express server
├── package.json          # Dependencies
├── modules/
│   ├── services.js       # Service management
│   ├── extensions.js     # GNOME extension control
│   └── system.js         # System info & cleanup
├── views/
│   └── index.ejs         # Main UI (Vue 3)
├── docs/
│   ├── index.html        # Landing page
│   └── docs.html         # Advanced documentation
└── README.md             # This file

🛠️ Tech Stack

  • Backend: Node.js + Express
  • Frontend: Vue 3 (CDN) + EJS templates
  • Styling: Tailwind CSS + DaisyUI
  • Task Runner: npm scripts + nodemon

📝 Configuration

Edit server.js to change:

  • Port: const PORT = 3000; (line 7)
  • Refresh interval: setInterval(refresh, 5000); (line 338 in index.ejs)

⚠️ Safety Considerations

  • Critical Services - Marked red, cannot be toggled
  • Non-critical Only - Services tab filters by default to safe options
  • Cleanup Tasks - All non-destructive, safe to run multiple times
  • Read-only Operations - Monitoring and info gathering don't modify system

🐛 Troubleshooting

"sudo: no password provided"

Run through sudoers configuration above to allow passwordless sudo for specific commands.

Port 3000 already in use

Change PORT in server.js or kill existing process:

fuser -k 3000/tcp

Extensions not showing

Some extensions may be installed in system directories. Refresh browser cache.

Disk cleanup not freeing space

Some services may lock files. Try one task at a time and wait a moment.

📄 License

MIT - See LICENSE file

👤 Author

[email protected]

🤝 Contributing

Contributions welcome! Feel free to open issues and pull requests.

🔗 Links


Linuxify - Keep your Linux system optimized, one click at a time.