{"id":13612496,"url":"https://github.com/tkareine/jekyll-minibundle","last_synced_at":"2025-10-06T11:36:22.170Z","repository":{"id":5815552,"uuid":"7030624","full_name":"tkareine/jekyll-minibundle","owner":"tkareine","description":"A minimalistic asset bundling plugin for Jekyll","archived":false,"fork":false,"pushed_at":"2024-05-25T16:33:26.000Z","size":543,"stargazers_count":69,"open_issues_count":0,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-09T20:14:14.227Z","etag":null,"topics":["asset-bundling","assets","bundler","fingerprinting","jekyll","jekyll-plugin","minification","minimalist","ruby","ruby-gem"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tkareine.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2012-12-06T05:52:03.000Z","updated_at":"2025-02-19T17:20:57.000Z","dependencies_parsed_at":"2024-01-14T04:57:00.073Z","dependency_job_id":null,"html_url":"https://github.com/tkareine/jekyll-minibundle","commit_stats":{"total_commits":466,"total_committers":4,"mean_commits":116.5,"dds":0.006437768240343367,"last_synced_commit":"fa082d3c9f0a6885c7b11168a7d3d2b513bcc8dd"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkareine%2Fjekyll-minibundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkareine%2Fjekyll-minibundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkareine%2Fjekyll-minibundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkareine%2Fjekyll-minibundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkareine","download_url":"https://codeload.github.com/tkareine/jekyll-minibundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248103872,"owners_count":21048245,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asset-bundling","assets","bundler","fingerprinting","jekyll","jekyll-plugin","minification","minimalist","ruby","ruby-gem"],"created_at":"2024-08-01T20:00:30.758Z","updated_at":"2025-10-06T11:36:22.150Z","avatar_url":"https://github.com/tkareine.png","language":"Ruby","funding_links":[],"categories":["Assets \u0026 Converters \u0026 Minifiers"],"sub_categories":[],"readme":"# Jekyll Minibundle plugin\n\n[![Gem version](https://badge.fury.io/rb/jekyll-minibundle.svg)][MinibundleGem]\n[![CI](https://github.com/tkareine/jekyll-minibundle/actions/workflows/ci.yml/badge.svg)][MinibundleCI]\n\nA straightforward asset bundling plugin for [Jekyll], utilizing external\nasset conversion/minification tool of your choice. The plugin provides\nasset concatenation for bundling and asset fingerprinting with [MD5]\ndigest for cache busting.\n\nThere are no runtime dependencies, except for the minification tool used\nfor bundling (fingerprinting has no dependencies).\n\nThe plugin requires Jekyll version 3 or 4. It is tested with Ruby MRI\n2.7 and later.\n\nThe plugin works with Jekyll's watch mode (auto-regeneration, Jekyll\noption `--watch`), but not with incremental feature enabled (Jekyll\noption `--incremental`).\n\nMinibundle plugin does not affect the behavior of Jekyll's [built-in\nasset conversion][JekyllBuiltInAssets]. The plugin is designed to\nincorporate the results produced by external asset tools only.\n\n## Features\n\nThere are two features: fingerprinting with [MD5 digest][MD5] over the\ncontents of the asset file (any type of file will do), and asset\nbundling combined with the first feature.\n\nAsset bundling consists of concatenation and minification. The plugin\nimplements concatenation and leaves choosing the minification tool up to\nyou. [UglifyJS][UglifyJS2] is a good and fast minifier, for example. The\nplugin connects to the minifier with standard unix pipe, feeding asset\nfile contents to it in desired order via standard input, and reads the\nresult from standard output.\n\nWhy is this good? A fingerprint in asset's path is the [recommended\nway][GoogleWebDevHttpCache] to handle caching of static resources,\nbecause you can allow browsers and intermediate proxies to cache the\nasset for a very long time. Calculating MD5 digest over the contents of\nthe file is fast and the resulting digest is reasonably unique to be\ngenerated automatically.\n\nAsset bundling is good for reducing the number of requests to the\nbackend upon page load. The minification of stylesheets and JavaScript\nsources makes asset sizes smaller and thus faster to load over network.\n\n## Usage\n\nThe plugin ships as a [RubyGem][MinibundleGem]. To install:\n\n1. Add the following line to the [Gemfile] of your site:\n\n   ``` ruby\n   gem 'jekyll-minibundle'\n   ```\n\n2. Run `bundle install`.\n\n3. Instruct Jekyll to load the gem by adding this line to the\n[configuration file][JekyllConf] of your site (`_config.yml`):\n\n   ``` yaml\n   plugins:\n     - jekyll/minibundle\n   ```\n\n   (Use the `gems` key instead of `plugins` for Jekyll older than v3.5.0.)\n\nAn alternative to using the `plugins` configuration option is to add the\n`_plugins/minibundle.rb` file to your site project with this line:\n\n``` ruby\nrequire 'jekyll/minibundle'\n```\n\nYou must allow Jekyll to use custom plugins. That is, do not enable\nJekyll's `safe` configuration option.\n\n### Asset fingerprinting\n\nIf you just want to have an MD5 fingerprint in your asset's path, use\nthe `ministamp` [Liquid] tag in a Liquid template file. For example,\nfingerprinting CSS styles:\n\n``` liquid\n\u003clink rel=\"stylesheet\" href=\"{{ site.baseurl }}/{% ministamp _assets/site.css assets/site.css %}\" media=\"screen, projection\"\u003e\n```\n\nWhen it's time to render the `ministamp` tag, the plugin copies the\nsource file (`_assets/site.css`, the first tag argument) to the\nspecified destination path (`assets/site.css`, the second tag argument)\nin Jekyll's site destination directory. The filename will contain a\nfingerprint.\n\nThe tag outputs the asset destination path, encoded for HTML, into\nLiquid's template rendering outcome. For example, when `site.baseurl` is\nempty:\n\n``` html\n\u003clink rel=\"stylesheet\" href=\"/assets/site-390be921ee0eff063817bb5ef2954300.css\" media=\"screen, projection\"\u003e\n```\n\nAnother example, this time fingerprinting an image and using the\n[absolute_url][JekyllLiquidFilters] Liquid filter of Jekyll to render\nthe absolute URL of the image in the `src` attribute:\n\n``` liquid\n\u003cimg src=\"{{ \"/\" | absolute_url }}{% ministamp _assets/dog.jpg assets/dog.jpg %}\" alt=\"My dog smiling to the camera\" title=\"A photo of my dog\" width=\"195\" height=\"258\" /\u003e\n```\n\nThis feature can be combined with asset generation tools external to\nJekyll. For example, you can configure [Sass] to take input files from\n`_assets/styles/*.scss` and to produce output to `_tmp/site.css`. Then,\nyou use the `ministamp` tag to copy the file with a fingerprint to\nJekyll's site destination directory:\n\n``` liquid\n\u003clink rel=\"stylesheet\" href=\"{{ site.baseurl }}/{% ministamp _tmp/site.css assets/site.css %}\"\u003e\n```\n\n#### `ministamp` call syntax\n\nThe argument for the `ministamp` tag must be in [YAML] syntax, and\nparsing the argument as YAML must result either in a String or a\nHash. What you saw previously was the argument being parsed as a String;\nit's effectively a shorthand version of passing the argument as a Hash\nwith certain keys. That is, in the following call:\n\n``` liquid\n{% ministamp _tmp/site.css assets/site.css %}\n```\n\nthe argument is a String: `\"_tmp/site.css assets/site.css\"`. The call is\nequivalent to the following call with a Hash argument:\n\n``` liquid\n{% ministamp { source_path: _tmp/site.css, destination_path: assets/site.css } %}\n```\n\nThe Hash argument allows expressing more options and quoting\n`source_path` and `destination_path` values, if needed.\n\nThe supported keys for the Hash argument are:\n\n| Key | Required? | Value type | Value example | Default value | Description |\n| --- | --- | --- | --- | --- | --- |\n| `source_path` | yes | string | `'_tmp/site.css'` | - | The source path of the asset file, relative to the site directory. |\n| `destination_path` | yes | string | `'assets/site.css'` | - | The destination path of the asset file, relative to Jekyll's site destination directory. If the value begins with `/` and `render_basename_only` is `false`, `ministamp`'s output will begin with `/`. |\n| `render_basename_only` | no | boolean | `true` | `false` | If `true`, `ministamp`'s rendered URL will be the basename of the asset destination path. See [Separating asset destination path from generated URL](#separating-asset-destination-path-from-generated-url) for more. |\n\nWith a Hash argument, the plugin processes `source_path` and\n`destination_path` values through a tiny template engine. This allows\nyou to use Liquid's variables as input to `ministamp` tag. An example\nwith Liquid's [`assign`][LiquidAssignTag] tag:\n\n``` liquid\n{% assign asset_dir = 'assets' %}\n\u003clink rel=\"stylesheet\" href=\"{% ministamp { source_path: _tmp/site.css, destination_path: '{{ asset_dir }}/site.css' } %}\"\u003e\n```\n\nThe above would use `assets/site.css` as the destination path.\n\nNote that you must quote `destination_path`'s value, otherwise YAML does\nnot recognize it as a proper string.\n\nTo refer to Jekyll's configuration options ([`_config.yml`][JekyllConf])\nin the template, prefix the variable name with `site.`. For example, to\nrefer to `baseurl` option, use syntax `{{ site.baseurl }}` in the\ntemplate.\n\nSee [Variable templating](#variable-templating) for details about the\ntemplate syntax.\n\n### Asset bundling\n\nThis is a straightforward way to bundle assets with any minification\ntool that supports reading input from stdin and writing the output to\nstdout. You write the configuration for input sources directly into the\ncontent file where you want the markup tag for the bundle file to\nappear. The markup tag contains the path to the bundle file, and the\nJekyll's site destination directory will have the bundle file at that\npath. The path will contain an MD5 fingerprint.\n\nPlace the `minibundle` [Liquid] block into the Liquid template file\nwhere you want the block's generated markup to appear. Write bundling\nconfiguration inside the block in [YAML] syntax. For example, to bundle\na set of JavaScript sources:\n\n``` text\n{% minibundle js %}\nsource_dir: _assets/scripts\ndestination_path: assets/site\nbaseurl: '{{ site.baseurl }}/'\nassets:\n  - dependency\n  - app\nattributes:\n  id: my-scripts\n  async:\n{% endminibundle %}\n```\n\nThen, specify the command for launching your favorite minifier in\n`_config.yml`:\n\n``` yaml\nbaseurl: ''\n\nminibundle:\n  minifier_commands:\n    js: node_modules/.bin/uglifyjs\n```\n\nWhen it's time to render the `minibundle` block, the plugin launches the\nminifier and connects to it with a Unix pipe. The plugin feeds the\ncontents of the asset files in `source_dir` directory as input to the\nminifier (stdin). The feeding order is the order of the files in the\n`assets` key in the block configuration. The plugin expects the minifier\nto produce output (stdout) and writes it to the file at\n`destination_path` in Jekyll's site destination directory. The filename\nwill contain a fingerprint.\n\nThe block outputs `\u003clink\u003e` (for `css` type) or `\u003cscript\u003e` (for `js`\ntype) HTML element into Liquid's template rendering outcome. Continuing\nthe example above, the block's output will be:\n\n``` html\n\u003cscript src=\"/assets/site-8e764372a0dbd296033cb2a416f064b5.js\" type=\"text/javascript\" id=\"my-scripts\" async\u003e\u003c/script\u003e\n```\n\nYou can pass custom attributes, like `id=\"my-scripts\"` and `async`\nabove, to the generated markup with `attributes` map inside the\n`minibundle` block.\n\nAs shown above for the `baseurl` key, you can use Liquid template syntax\ninside the contents of the block. Liquid renders block contents before\nthe `minibundle` block gets the turn to render itself. Just ensure that\nblock contents will result in valid YAML.\n\nFor bundling CSS assets, use `css` as the argument to the `minibundle`\nblock:\n\n``` text\n{% minibundle css %}\nsource_dir: _assets/styles\ndestination_path: assets/site\nbaseurl: '{{ site.baseurl }}/'\nassets:\n  - reset\n  - common\nattributes:\n  media: screen\n{% endminibundle %}\n```\n\nAnd then specify the minifier command in `_config.yml`:\n\n``` yaml\nminibundle:\n  minifier_commands:\n    css: _bin/remove_whitespace\n    js: node_modules/.bin/uglifyjs\n```\n\n#### `minibundle` call syntax\n\nUse `css` or `js` as the argument to the opening tag, for example `{% minibundle css %}`.\n\nThe block contents must be in [YAML] syntax. The supported keys are:\n\n| Key | Value type | Value example | Default value | Description |\n| --- | --- | --- | --- | --- |\n| `source_dir` | string | - | `'_assets'` | The source directory of `assets`, relative to the site directory. You can use period (`.`) to select the site directory itself. |\n| `assets` | array of strings | `['deps/one', 'deps/two', 'app']` | `[]` | Array of assets relative to `source_dir` directory, without type extension. These are the asset files to be bundled, in order, into one bundle destination file. |\n| `destination_path` | string | - | `'assets/site'` | The destination path of the bundle file, without type extension, relative to Jekyll's site destination directory. If the value begins with `/` and `baseurl` is empty, `baseurl` will be set to `'/'` implicitly. |\n| `baseurl` | string | `'{{ site.baseurl }}/'` | `''` | If nonempty, the bundle destination URL inside `minibundle`'s rendered HTML element will be this value prepended to the destination path of the bundle file. Ignored if `destination_baseurl` is nonempty. |\n| `destination_baseurl` | string | `'{{ site.cdn_baseurl }}/'` | `''` | If nonempty, the bundle destination URL inside `minibundle`'s rendered HTML element will be this value prepended to the basename of the bundle destination path. See [Separating asset destination path from generated URL](#separating-asset-destination-path-from-generated-url) for more. |\n| `attributes` | map of keys to string values | `{id: my-link, media: screen}` | `{}` | Custom HTML element attributes to be added to `minibundle`'s rendered HTML element. |\n| `minifier_cmd` | string | `'node_modules/.bin/uglifyjs'` | - | Minifier command specific to this bundle. See [Minifier command specification](#minifier-command-specification) for more. |\n\n### Minifier command specification\n\nYou can specify minifier commands in three places:\n\n1. In `_config.yml` (as shown earlier):\n\n   ``` yaml\n   minibundle:\n     minifier_commands:\n       css: _bin/remove_whitespace\n       js: node_modules/.bin/uglifyjs\n   ```\n\n2. As environment variables:\n\n   ``` bash\n   export JEKYLL_MINIBUNDLE_CMD_CSS=_bin/remove_whitespace\n   export JEKYLL_MINIBUNDLE_CMD_JS=\"node_modules/.bin/uglifyjs\"\n   ```\n\n3. Inside the `minibundle` block with `minifier_cmd` option, allowing\n   blocks to have different commands from each other:\n\n   ``` text\n   {% minibundle js %}\n   source_dir: _assets/scripts\n   destination_path: assets/site\n   minifier_cmd: node_modules/.bin/uglifyjs\n   assets:\n     - dependency\n     - app\n   attributes:\n     id: my-scripts\n   {% endminibundle %}\n   ```\n\nThese ways of specification are listed in increasing order of\nspecificity. Should multiple commands apply to a block, the most\nspecific one wins. For example, the `minifier_cmd` option inside the `{%\nminibundle js }%` block overrides the setting in the\n`$JEKYLL_MINIBUNDLE_CMD_JS` environment variable.\n\n### Recommended directory layout\n\nIt's recommended that you exclude the files you use as asset sources\nfrom Jekyll itself. Otherwise, you end up with duplicate files in the\nsite destination directory.\n\nFor example, in the following snippet we're using `assets/src.css` as\nasset source to `ministamp` tag:\n\n``` liquid\n\u003c!-- BAD: unless assets dir is excluded, both src.css and dest.css will be copied to site destination directory --\u003e\n\u003clink rel=\"stylesheet\" href=\"{{ site.baseurl }}/{% ministamp assets/src.css assets/dest.css %}\" media=\"screen, projection\"\u003e\n```\n\nBy default, Jekyll includes this file to the site destination\ndirectory. As a result, there will be both `src.css` and\n`dest-\u003cmd5\u003e.css` files in `_site/assets/` directory, which you probably\ndo not want.\n\nIn order to avoid this, exclude the asset source file from Jekyll.\nBecause Jekyll's site generation excludes underscore directories (that\nis, directories whose name begins with underscore character), consider\nusing the following directory layout:\n\n* `_assets/` for JavaScript and CSS assets handled by the plugin that\n  are in version control\n* `_tmp/` for temporary JavaScript and CSS assets handled by the plugin\n  that are not in version control (for example, Sass output files)\n* `assets/` for images and other assets handled by Jekyll directly\n\nHowever, Jekyll's watch mode (auto-regeneration) does monitor files\ninside underscore directories. If such a file is modified, the watch\nmode triggers site generation. For Minibundle's functionality, this is\nbeneficial: it allows the plugin to check if assets need to be updated\nto the site destination directory.\n\nThe `exclude` [Jekyll configuration][JekyllConf] option affects Jekyll's\nwatch mode. Given the recommended directory layout above, if you set the\nfollowing in `_config.yml`:\n\n``` yaml\nexclude:\n  - _assets\n  - _tmp\n```\n\nThen Jekyll won't see if files inside those directories have changed and\nthe plugin won't get the chance to update assets to the site destination\ndirectory. So, don't explicitly exclude the `_assets` and `_tmp`\ndirectories.\n\nSee [Jekyll configuration][JekyllConf] for more about excluding files\nand directories.\n\n### Development mode\n\nIf you set the `$JEKYLL_MINIBUNDLE_MODE` environment variable to\n`development`, then the plugin will copy asset files as is to Jekyll's\nsite destination directory and omit fingerprinting.\n\nThe development mode changes `minibundle` block's `destination_path`\noption to be the base directory for files mentioned in the `assets`\noption. This is useful in development workflow, where you need the\nfilenames and line numbers of the original asset sources.\n\n``` bash\n$ JEKYLL_MINIBUNDLE_MODE=development jekyll serve --watch\n```\n\nAlternatively, you can enable development mode from `_config.yml`:\n\n``` yaml\nminibundle:\n  mode: development\n```\n\nShould both be defined, the setting from the environment variable wins.\n\n### Variable templating\n\nThe template engine used by `ministamp` tag's Hash argument has syntax\nresembling the ones of [Liquid] and [Mustache], with `{{` and `}}` tags\nsurrounding the variable to be substituted into the output string. For\nexample, given Liquid variable `var = 'foo'`, the template `begin{{ var\n}}end` results in `beginfooend`.\n\nThe engine supports variable substitution only. It does not support\nother expressions. If you need to, you can write complex expressions in\nLiquid, store the result to a variable, and use the variable in the\ntemplate.\n\nIf you need literal `{` or `}` characters in the template, you can\nescape them with backslash. For example, `\\{` results in `{` in the\noutput. To output backslash character itself, write it twice: `\\\\`\nresults in `\\` in the output.\n\nInside variable subsitution (between `{{` and `}}`), anything before the\nclosing `}}` tag is interpreted as part of the variable name, except\nthat the engine removes any leading and trailing whitespace from the\nname. For example, in the template `{{ var } }}`, `var }` is treated as\nthe name of the variable.\n\nA reference to undefined variable results in empty string. For example,\n`begin{{ nosuch }}end` will output `beginend` if there's no variable\nnamed `nosuch`.\n\n### Separating asset destination path from generated URL\n\nUse the `render_basename_only: true` option of the `ministamp` tag and\nthe `destination_baseurl` option of the `minibundle` block to separate\nthe destination path of the asset file from the generated URL of the\nasset. This allows you to serve the asset from a separate domain, for\nexample.\n\nExample usage, with the following content in `_config.yml`:\n\n``` yaml\ncdn_baseurl: 'https://cdn.example.com'\n```\n\nFor the `ministamp` tag:\n\n``` liquid\n\u003clink rel=\"stylesheet\" href=\"{{ site.cdn_baseurl }}/css/{% ministamp { source_path: '_tmp/site.css', destination_path: assets/site.css, render_basename_only: true } %}\"\u003e\n```\n\nThe asset file will be in Jekyll's site destination directory with path\n`assets/site-ff9c63f843b11f9c3666fe46caaddea8.css`, and Liquid's\nrendering will result in:\n\n``` html\n\u003clink rel=\"stylesheet\" href=\"https://cdn.example.com/css/site-ff9c63f843b11f9c3666fe46caaddea8.css\"\u003e\n```\n\nFor the `minibundle` block:\n\n``` liquid\n{% minibundle js %}\nsource_dir: _assets/scripts\ndestination_path: assets/site\ndestination_baseurl: '{{ site.cdn_baseurl }}/js/'\nassets:\n  - dependency\n  - app\n{% endminibundle %}\n```\n\nThe bundle file will be in Jekyll's site destination directory with path\n`assets/site-4782a1f67803038d4f8351051e67deb8.js`, and Liquid's\nrendering will result in:\n\n``` html\n\u003cscript type=\"text/javascript\" src=\"https://cdn.example.com/js/site-4782a1f67803038d4f8351051e67deb8.js\"\u003e\u003c/script\u003e\n```\n\n### Capturing Liquid output\n\nUse Liquid's [`capture`][LiquidCaptureBlock] block to store output\nrendered inside the block to a variable, as a string. Then you can\nprocess the string as you like.\n\nFor example:\n\n``` liquid\n{% capture site_css %}{% ministamp _assets/site.css assets/site.css %}{% endcapture %}\n\u003clink rel=\"stylesheet\" href=\"{{ site_css | remove_first: \"assets/\" }}\"\u003e\n```\n\nLiquid's rendering outcome:\n\n``` html\n\u003clink rel=\"stylesheet\" href=\"site-390be921ee0eff063817bb5ef2954300.css\"\u003e\n```\n\n## Example site\n\nSee the sources of [an example site][JekyllMinibundleExampleSite].\n\n## Known caveats\n\nThe plugin does not work with Jekyll's incremental rebuild feature\n(Jekyll option `--incremental`).\n\n## License\n\nMIT. See [LICENSE.txt].\n\n[Gemfile]: https://bundler.io/gemfile.html\n[GoogleWebDevHttpCache]: https://web.dev/http-cache/\n[JekyllBuiltInAssets]: https://jekyllrb.com/docs/assets/\n[JekyllConf]: https://jekyllrb.com/docs/configuration/\n[JekyllLiquidFilters]: https://jekyllrb.com/docs/liquid/filters/\n[JekyllMinibundleExampleSite]: https://github.com/tkareine/jekyll-minibundle-example\n[Jekyll]: https://jekyllrb.com/\n[LICENSE.txt]: https://raw.githubusercontent.com/tkareine/jekyll-minibundle/master/LICENSE.txt\n[LiquidAssignTag]: https://shopify.github.io/liquid/tags/variable/#assign\n[LiquidCaptureBlock]: https://shopify.github.io/liquid/tags/variable/#capture\n[Liquid]: https://shopify.github.io/liquid/\n[MD5]: https://en.wikipedia.org/wiki/MD5\n[MinibundleCI]: https://github.com/tkareine/jekyll-minibundle/actions/workflows/ci.yml\n[MinibundleGem]: https://rubygems.org/gems/jekyll-minibundle\n[Mustache]: https://mustache.github.io/\n[Sass]: https://sass-lang.com/\n[UglifyJS2]: https://github.com/mishoo/UglifyJS2\n[YAML]: https://yaml.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkareine%2Fjekyll-minibundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkareine%2Fjekyll-minibundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkareine%2Fjekyll-minibundle/lists"}