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 🙏

© 2024 – Pkg Stats / Ryan Hefner

balloon-generator

v0.11.3

Published

Basic static site generator

Downloads

11

Readme

Balloon — Static Website Generator

Because balloons generate static...

Balloon is a very simple static site generator. Built for deploying to S3. It works for my needs, but it's pretty simple.

View the source code of my website.

Overview of Balloon

  • uses Swig template language
  • auto convert Markdown to HTML if file ends in .md
    • supports Github-flavored Markdown features
    • auto syntax-highlights code blocks
  • built-in webserver that auto-restarts on changed files
  • S3 deploy functionality

Balloon Static Website Generator

Installation

npm install -g balloon-generator

Usage

# generate static based on settings in balloon.json (see below)
balloon
balloon --output ./another/destination/  # override build directory

# Same as above, except it watches for changes and serves the build directory
balloon --serve
balloon --serve 3000  # with port

# Get help
balloon --help
  Usage: balloon [options]

  Options:

    -h, --help             output usage information
    -V, --version          output the version number
    -s, --serve [port]     watch and serve files
    -b, --build <path>     override build path

Folder Structure

Here's what a base project looks like:

MyBalloonProject/
├── balloon.json  # Main config file (see below)
├── content/      # Website pages live here (markdown and/or HTML)
├── layouts/      # Layouts live here
└── static/       # Everything in here remains untouched (use for images, css, etc)

Here is something a bit more complicated:

MyBalloonProject/
├── balloon.json
├── content/
│   ├── index.html
│   ├── rss.xml
│   ├── blog/
│   │   ├── index.html
│   │   └── 2014/
│   │       └── 12/
│   │           ├── 04/
│   │           │   ├── My First Post.md
│   │           └── 08/
│   │               └── My Second Post.md
├── layouts/
│   ├── rss.xml
│   └── base.html
└── static/
    ├── favicon.ico
    ├── styles/
    │   └── main.css
    └── scripts/
        └── main.js

A few notes on what you see above:

  • URL slugs are automatically generated from file names
  • file paths will be equal to the URL path
    • Example mysite.com/blog/2014/12/04/my-first-post.html

Configuration

Balloon looks for a balloon.json file in the directory that it is run from. Here is an example of a config:

{
    /** Directory to watch */
    "source": "./",

    /** Directory to put built files */
    "build": "build/",

    /** The domain (S3 bucket) to deploy to */
    "domain": "website.com",

    /**
     * Context attributs (values) in each of these will apply if
     * the regex pattern (key) matches the URL path of the page
     * being rendered.
     */
    "defaults": {

        ".*": {
            // The only required context variable
            "_layout": "default.html",

            // Some useful variables to be used in templates
            "siteName": "My Website",
            "page_type": "basic"
        },

        "^/blog/.+": {
            "_layout": "blog.html",

            // Change the type for blog posts so the template knows
            // what to do
            "page_type": "blog"
        }
    }
}

Template Context

Balloon lets you define context variables in balloon.json (see below), but it also provides some default ones that should be useful. All Balloon-generated variables start with underscores.

  • _title name of the file, without the extension
  • _slug full URL path of the current page
  • _created an extracted date if the URL path contains the pattern /YYYY/MM/DD/
    • this is an object containing the properties timestamp, year, month, day
  • _pages a list of all the pages that were rendered, along with the context for each one
    • only files named index.html and rss.xml have access to _pages
    • Example: useful for a /blog/index.html page to list all blog posts

Other Notes

Right now I'm the only person I know of using Balloon in production. You can check out my site (also view the source). I'm always open to chat as well. You can find my contact info on my website.