Skip to content

Releases: stamat/poops

v1.5.3

Choose a tag to compare

@stamat stamat released this 16 Jul 15:29

incremental watch rebuilds - render only affected pages

v1.5.2

Choose a tag to compare

@stamat stamat released this 16 Jul 11:37

Huge performance overhaul

v1.5.1

Choose a tag to compare

@stamat stamat released this 15 Jul 23:25

Markdown caching done properly

v1.5.0

Choose a tag to compare

@stamat stamat released this 15 Jul 13:57
  • Support for named resizes which poops-images 1.2.1 brings. Now you can pass a name to the image filter and it will create a srcset from the named resizes. Useful for creating galleries
  • Support for GFM footnotes in markdown. Via a custom built marked-github-footnote with the aim of the exact behaviour as the ones here on GitHub.

Full Changelog: v1.4.1...v1.5.0

v1.4.1

Choose a tag to compare

@stamat stamat released this 11 Jul 13:33

page.content variable exposed so toc filter can generate toc on demand

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@stamat stamat released this 11 Jul 12:25

Added

  • Glob and array inputs for styles. styles.in now accepts an array of
    entry points and/or glob patterns — the same interface scripts have had all
    along. Globs must use / separators (even on Windows), matches are sorted
    for deterministic build order, and sass partials (_*.scss) are skipped
    automatically since they're imports, not entry points. Multiple resolved
    entries require a directory out — pointing several inputs at a single
    output file is an error.
  • watch: true. Set watch to true and poops derives the watch list
    from every task's in path — scripts, styles, reactor, markup, copy and
    images (including reactor component and design-token tokenPaths). File
    entries watch their parent directory so sibling imports still retrigger a
    rebuild. Imports reaching outside a task's own directory aren't covered —
    use an explicit watch array for that. includePaths is deliberately
    excluded (it defaults to node_modules).
  • GFM emoji shortcodes in markdown — :shipit: and friends render as
    emoji in both template engines. ✨
  • GFM alerts in markdown — > [!NOTE], > [!TIP], > [!IMPORTANT],
    > [!WARNING] and > [!CAUTION] blockquotes render as styled alert
    callouts, plus a custom [!INFO] variant.

Changed

  • README and docs expanded: transpiling CSS/JS guides now cover glob inputs,
    and the config reference documents watch: true.
  • Dependency refresh via npm update.

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@stamat stamat released this 10 Jul 22:38

Added

  • Custom markup engines. engine now accepts a module specifier — an npm
    package name or a project-relative path — in addition to "nunjucks" /
    "liquid". The module's default export is an engine class implementing a
    small contract (render, renderString, registerFilters, registerTags,
    indexableExtensions, markupExtensions, and optional
    replaceOutExtensions). Extend a built-in as the easy path — deep imports
    like poops/lib/markup/engines/liquid.js are supported. This is what powers
    the separate poops-shopify plugin.
  • Navigation tree (nav). Generates your page hierarchy as sidebar-ready
    data, exposed both as the nav template global (built in a pre-pass, always
    reflecting the current build) and as a nested nav.json. Subpages nest from
    URL structure. Options: output, root, collections
    (true | false | allowlist | "index"), home. Front matter:
    order, nav: false, navTitle.
  • pagination shorthand tag{% raw %}{% pagination page.pagination %}{% endraw %} renders
    prev/next links in one line, in both engines.
  • toc filter — build a table of contents from rendered HTML headings.
    Headings now also get slug ids plus permalink anchors (.heading-anchor).
  • --base-url / -u CLI flag — override the markup base URL prefix at
    build time (overrides config). The Pages workflow now passes the repo name
    automatically, so project sites deploy under the correct subpath.

Changed

  • Engine resolution is now async/lazy and resolves against your project's
    node_modules, so a file:-linked poops still finds a custom engine.
  • _url / page.url is now output-relative (getPageUrlRelativeToOutput) so
    it matches the URLs in nav.json — sidebar active-state checks
    (item.url == page.url) now fire correctly.
  • Markdown rendering moved to one shared renderer so both engines produce
    identical output (highlighting + heading anchors).

Fixed

  • Watch loop guard — compiler output landing inside a watched directory
    (e.g. a Shopify theme's assets/) no longer retriggers its own compiler
    forever. Only the compiler's own extensions are skipped in its output zone.
  • path.joinpath.resolve across the markup pipeline — fixes
    absolute/cross-drive output paths (Windows-friendliness).

Full Changelog: v1.2.4...v1.3.0

v1.2.4

Choose a tag to compare

@stamat stamat released this 09 Jul 18:00

Added

  • Optional images runner via poops-images (images config).
  • Cache-backed image helpers: better {% raw %}{% image %}{% endraw %} output plus new exif and images filters.
  • Multiple script entry files via arrays/globs.
  • LiveReload watched-extension controls (extraExts, exts).
  • Windows CI workflow coverage.

Image usage + gallery sample

Single image with EXIF caption:

{% raw %}{% set meta = 'static/photo.jpeg' | exif %}
<figure>
  {% image 'static/photo.jpeg', alt='Sendai at dusk' %}
  {% if meta %}
    <figcaption>
      {{ meta.dateTime | date("MMMM D, YYYY") }}
      {% if meta.gps %}
        — <a href="{{ meta.gps.googleMapsUrl }}">{{ meta.gps.latitude.formatted }}, {{ meta.gps.longitude.formatted }}</a>
      {% endif %}
    </figcaption>
  {% endif %}
</figure>{% endraw %}

Gallery from the image cache:

{% raw %}{% for group in 'images' | images | sort(reverse=true, attribute='date') | groupby("date", "year") %}
  <h2>{{ group.key }}</h2>
  <div class="grid">
    {% for img in group.items %}
      <figure>
        {% image img.path, alt='', sizes='(max-width: 640px) 50vw, 25vw' %}
      </figure>
    {% endfor %}
  </div>
{% endfor %}{% endraw %}

Changed

  • Image processing now runs before markup so templates read a fresh .poops-images-cache.json.
  • Collections/pagination behavior tightened:
    • Pagination pages generate only when a collection index exists.
    • Stale pagination directories are pruned when page counts shrink.
  • Missing collection dates now fall back to file mtime with a warning.
  • poops-images logging defaults to verbose: false (set true for per-file logs).
  • Docs expanded for collections, images, filters, and config examples.

Fixed

  • Correct non-zero exit code for failing build-only runs.
  • Better watch-mode behavior for atomic saves, data reloads, and deleted source cleanup.
  • Safer <img> attribute escaping.
  • Correct script output paths for multi-directory entries.
  • Removed redundant minify flow.
  • Cross-platform path/glob fixes (especially Windows).

Full Changelog: v1.2.3...v1.2.4

v1.2.3

Choose a tag to compare

@stamat stamat released this 07 Jul 01:20

groupby filter and wordcount featues for blogging

Full Changelog: v1.2.2...v1.2.3

v1.2.2

Choose a tag to compare

@stamat stamat released this 08 Mar 14:43

relativePathPrefix updated for root dirctory, or optional baseURL that overrides it

Full Changelog: v1.2.1...v1.2.2