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

opentwig

v1.0.7

Published

opentwig 🌿 is an open source link in bio page generator.

Readme

OpenTwig 🌿

npm version npm downloads License: MIT Node.js Version GitHub stars GitHub issues

OpenTwig is an open source personal link page generator that creates beautiful, customizable "link in bio" pages. Instead of relying on third-party services, users can define their configuration and instantly create a fully functional static site they own and control.

✨ Features

  • 🎨 Multiple Themes: Choose from 4 built-in themes (default, dark, minimal, colorful)
  • πŸ“± Mobile Responsive: Optimized for all devices with mobile-first design
  • πŸš€ Fast & Lightweight: Generates static HTML/CSS with minimal dependencies
  • πŸ”— Easy Link Management: Simple JSON configuration for all your links
  • πŸ–ΌοΈ Optional Avatar Support: Custom profile pictures with automatic processing (completely optional)
  • πŸ“Š Open Graph Images: Auto-generated social media preview images
  • πŸ“± QR Code Generation: Built-in QR codes for easy mobile sharing
  • 🎭 Modal Dialogs: Support for rich content in footer links
  • πŸ“€ Share Functionality: Native Web Share API integration
  • ⚑ CSS Optimization: Automatic CSS minification and autoprefixing
  • πŸ› οΈ CLI Interface: Simple command-line interface with helpful commands

πŸš€ Quick Start

Installation & Usage

# Create a new project
npx opentwig --init

# Edit the generated config.json with your information
# Then generate your page
npx opentwig

Prerequisites

  • Node.js (v14 or higher)
  • npm or yarn

πŸ“– Configuration

OpenTwig uses a simple JSON configuration file (config.json) to define your page. Here's the complete configuration structure:

With Avatar (Optional)

{
  "theme": "default",
  "url": "https://links.yourwebsite.com",
  "title": "Your Name - opentwig 🌿",
  "name": "Your Name",
  "content": "Hello World! Here is my bio.",
  "minify": true,
  "avatar": {
    "path": "./avatar.png"
  },
  "links": [
    {
      "url": "https://twitter.com",
      "title": "Twitter"
    },
    {
      "url": "https://instagram.com",
      "title": "Instagram"
    }
  ],
  "footerLinks": [
    {
      "title": "Contact",
      "url": "mailto:[email protected]"
    },
    {
      "title": "Privacy",
      "content": "Your privacy policy content here..."
    }
  ],
  "share": {
    "title": "Your Name - opentwig 🌿",
    "url": "https://links.yourwebsite.com",
    "text": "Share"
  }
}

Without Avatar (Minimal Configuration)

{
  "theme": "default",
  "url": "https://links.yourwebsite.com",
  "title": "Your Name - opentwig 🌿",
  "name": "Your Name",
  "content": "Hello World! Here is my bio.",
  "minify": true,
  "links": [
    {
      "url": "https://twitter.com",
      "title": "Twitter"
    },
    {
      "url": "https://instagram.com",
      "title": "Instagram"
    }
  ],
  "footerLinks": [
    {
      "title": "Contact",
      "url": "mailto:[email protected]"
    }
  ],
  "share": {
    "title": "Your Name - opentwig 🌿",
    "url": "https://links.yourwebsite.com",
    "text": "Share"
  }
}

Configuration Options

| Option | Type | Description | |--------|------|-------------| | theme | string | Theme name (default, dark, minimal, colorful) | | url | string | Your page URL (for Open Graph and QR codes) | | title | string | Page title (appears in browser tab) | | name | string | Your display name | | content | string | Bio/description text | | minify | boolean | Enable CSS minification (default: true) | | avatar | object | Optional Avatar image configuration | | avatar.path | string | Optional Path to your avatar image (supports PNG, JPG, JPEG, WebP) | | links | array | Array of link objects with url and title | | footerLinks | array | Footer links (can be URLs or modal dialogs) | | share | object | Web Share API configuration |

πŸ–ΌοΈ Avatar Configuration

The avatar feature is completely optional. If you don't include the avatar object in your configuration, no avatar will be displayed on your page.

Supported image formats:

  • PNG
  • JPG/JPEG
  • WebP

Avatar processing:

  • Images are automatically optimized and resized
  • Processed avatar is saved as avatar.png in the output directory
  • Original aspect ratio is preserved
  • Images are compressed for optimal web performance

Example avatar configuration:

{
  "avatar": {
    "path": "./my-photo.jpg"
  }
}

Note: If you don't want an avatar, simply omit the avatar object from your configuration entirely.

🎨 Themes

OpenTwig includes 4 beautiful themes:

  • Default: Clean, modern design with subtle shadows and rounded corners
  • Dark: Dark mode variant of the default theme
  • Minimal: Simplified, minimalist design
  • Colorful: Vibrant color scheme

All themes are mobile-responsive and include:

  • Optional custom avatar display
  • Link buttons with hover effects
  • Modal dialogs for rich content
  • QR code integration
  • Share button functionality

πŸ› οΈ CLI Commands

# Show help information
npx opentwig --help

# Create sample config.json
npx opentwig --init

# Generate page from config.json
npx opentwig

πŸ“ Output Files

OpenTwig generates the following files in the dist/ directory:

  • index.html - Main HTML page
  • style.css - Processed and optimized CSS
  • avatar.png - Processed avatar image (only generated if avatar is configured)
  • og-image.jpg - Open Graph image for social sharing
  • qr.svg - QR code for mobile sharing

πŸ”§ Development

Project Structure

opentwig/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.js              # Main entry point
β”‚   β”œβ”€β”€ constants.js          # Application constants
β”‚   └── utils/                # Utility functions
β”‚       β”œβ”€β”€ buildPage.js      # Page building logic
β”‚       β”œβ”€β”€ generateHTML.js   # HTML generation
β”‚       β”œβ”€β”€ generateOGImage.js # Open Graph image creation
β”‚       β”œβ”€β”€ generateQR.js     # QR code generation
β”‚       β”œβ”€β”€ processCSS.js     # CSS processing and optimization
β”‚       └── ...
β”œβ”€β”€ theme/
β”‚   β”œβ”€β”€ default/              # Default theme
β”‚   β”‚   β”œβ”€β”€ index.js         # Theme template
β”‚   β”‚   β”œβ”€β”€ style.css        # Theme styles
β”‚   β”‚   └── components/      # Reusable components
β”‚   β”œβ”€β”€ dark/                # Dark theme
β”‚   β”œβ”€β”€ minimal/             # Minimal theme
β”‚   └── colorful/            # Colorful theme
└── dist/                    # Generated output

Key Features Implementation

  • Image Processing: Uses Sharp for avatar and OG image processing
  • QR Code Generation: Uses qrcode library for SVG QR codes
  • CSS Processing: PostCSS with autoprefixer and minification
  • HTML Generation: Component-based template system
  • Theme System: Modular theme architecture with component support

🌐 Deployment

Since OpenTwig generates static files, you can deploy to any static hosting service:

  • GitHub Pages: Push dist/ folder to a repository
  • Netlify: Drag and drop the dist/ folder
  • Vercel: Connect your repository
  • AWS S3: Upload files to an S3 bucket
  • Any web server: Upload the dist/ folder to your server

πŸ“ License

MIT License - see LICENSE file for details

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ”— Links