PackageTrack
Sign in Get early access

wp-php-toolkit/bytestream

ByteStream component for WordPress.

v0.9.0 298K downloads/mo #2990 most downloaded on Packagist wp-php-toolkit/bytestream

What this package is like to depend on

Last release 3 months ago

14 May 2026

Release timing varies

gaps range from 2 weeks to 7 months

Rarely documented

notes for 9 of 40 stable releases

Nothing withdrawn

no release was ever pulled

1 years old

49 releases · first in 2025

13 releases in the last 12 months

see the full history below

Release timeline

15 releases · May 2025 to May 2026
2026
Release Pre-release

Releases

latest 49
  1. v0.9.0 14 May 2026
    Release notes

    Fix documentation accuracy issues

    Open source →
  2. v0.8.1 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  3. v0.8.0 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  4. v0.7.9 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  5. v0.7.8 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  6. v0.7.7 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  7. v0.7.6 no date
    Release notes

    Fix documentation accuracy issues

    Open source →
  8. v0.7.5 03 May 2026
    Release notes

    Summary

    The toolkit now documents itself using only its own runtime and its
    own structured-data parsers. No Python in CI; no hand-rolled regex over
    markdown or HTML.

    What changed

    Was Now
    bin/_docs_components.py (200 lines, dead-code dicts) deleted
    bin/_load_catalog.py (370 lines: hand-rolled YAML-subset parser,
    regex section splitter, regex snippet extractor) replaced with proper
    parsers
    bin/build-reference.py (220 lines) bin/build-reference.php
    bin/run-snippets.py (230 lines) bin/run-snippets.php
    bin/serve-docs.py (50 lines) bin/serve-docs.php (uses php -S
    with router)

    Parsers

    Surface Parser
    README YAML frontmatter (slug, title, install, credit_*,
    see_also) Webuni\FrontMatter\FrontMatter::parse() — already
    vendored under components/Markdown/vendor-patched/ for the Markdown
    component. Single-line, multi-line `key: `, and YAML lists all behave
    correctly. The same parser GitHub uses for the README's frontmatter
    table.
    Markdown body → AST League\CommonMark\Parser\MarkdownParser +
    walking the document. Section boundaries = Heading nodes at level 2.
    Snippets = HtmlBlock (<!-- snippet: -->) → FencedCode (info=php)
    tuples. Expected-output = HtmlBlock (<!-- expected-output -->) →
    FencedCode pair. Body content rendered via
    HtmlRenderer::renderNodes() so raw HTML round-trips verbatim.
    Pitfall callouts (HtmlBlocks of the form <p>Footgun: …</p>)
    WP_HTML_Tag_Processor — walks tokens, confirms a <p> opener,
    finds the first inner #text node, classifies, strips the Footgun: /
    Gotcha: prefix via set_modifiable_text(), then slices off the outer
    <p>...</p> by length (no regex).
    Lede paragraph → inline HTML (no outer <p>) Render the lede
    Paragraph node's inline children directly via
    HtmlRenderer::renderNodes() instead of slicing afterward.
    Snippet metadata comment (`<!-- snippet: filename: x.php\nrunnable:
    true\n-->`) String slicing of literal <!-- / --> delimiters — no
    regex.
    --update writing captured stdout back into a README **CommonMark
    AST** locates the snippet's exact line range; line-by-line splice. No
    regex over the README.

    Behavioural parity

    • 87/87 snippets match their captured stdout. The PHP normalizer
      mirrors the Python regex set 1:1, so existing expected-output blocks
      stay valid.
    • docs/reference/*.html render correctly: 9 <php-snippet> + 9
      fallback + 9 expected-output triples on html.html, 4 pitfall callouts
      (the bold-lead pattern is preserved), see-also list intact.
    • --update verified end-to-end:
    • When an expected-output block has drifted, the rewritten content is
      byte-for-byte the original.
    • When no expected-output exists for a snippet, --update inserts a
      fresh block in the right place; resulting README is byte-identical to
      one with the block authored manually.

    Frontmatter format change: see_also is a proper YAML list

    # Before (repeated keys — not standard YAML)
    see_also: a | A | reason
    see_also: b | B | reason
    
    # After
    see_also:
      - a | A | reason
      - b | B | reason

    Webuni\FrontMatter\FrontMatter correctly types it as a sequence; any
    frontmatter-aware tool reading the README sees the same shape. All 18
    component READMEs migrated.

    Workflows simplified

    • snippet-tests.yml drops the actions/setup-python step.
    • docs.yml swaps python3 bin/build-reference.py for php bin/build-reference.php.

    Remaining preg_* calls (all on plain text, not HTML)

    • slugify() — heading text → URL-safe slug.
    • normalize() — scrubs noise from snippet stdout (tempfile paths, git
      hashes, timestamps).
    • One pattern in run-snippets that matches the require '...autoload.php'; line in the snippet's PHP source to inject the
      local-prelude polyfill.

    These operate on plain strings, not HTML, so they're not what the "no
    regex over HTML" rule was about.

    Test plan

    • Verify docs snippets workflow passes (87/87).
    • Deploy docs to GitHub Pages runs cleanly on push to trunk.
    • Local preview: bash bin/build-docs-bundle.sh && php bin/serve-docs.phphttp://localhost:8787 renders all reference pages
      with snippets.
    • php bin/run-snippets.php --update (no-op, no drift) leaves all
      READMEs untouched.
    Open source →
  9. v0.7.4 no date
    Release notes

    Summary

    The toolkit now documents itself using only its own runtime and its
    own structured-data parsers. No Python in CI; no hand-rolled regex over
    markdown or HTML.

    What changed

    Was Now
    bin/_docs_components.py (200 lines, dead-code dicts) deleted
    bin/_load_catalog.py (370 lines: hand-rolled YAML-subset parser,
    regex section splitter, regex snippet extractor) replaced with proper
    parsers
    bin/build-reference.py (220 lines) bin/build-reference.php
    bin/run-snippets.py (230 lines) bin/run-snippets.php
    bin/serve-docs.py (50 lines) bin/serve-docs.php (uses php -S
    with router)

    Parsers

    Surface Parser
    README YAML frontmatter (slug, title, install, credit_*,
    see_also) Webuni\FrontMatter\FrontMatter::parse() — already
    vendored under components/Markdown/vendor-patched/ for the Markdown
    component. Single-line, multi-line `key: `, and YAML lists all behave
    correctly. The same parser GitHub uses for the README's frontmatter
    table.
    Markdown body → AST League\CommonMark\Parser\MarkdownParser +
    walking the document. Section boundaries = Heading nodes at level 2.
    Snippets = HtmlBlock (<!-- snippet: -->) → FencedCode (info=php)
    tuples. Expected-output = HtmlBlock (<!-- expected-output -->) →
    FencedCode pair. Body content rendered via
    HtmlRenderer::renderNodes() so raw HTML round-trips verbatim.
    Pitfall callouts (HtmlBlocks of the form <p>Footgun: …</p>)
    WP_HTML_Tag_Processor — walks tokens, confirms a <p> opener,
    finds the first inner #text node, classifies, strips the Footgun: /
    Gotcha: prefix via set_modifiable_text(), then slices off the outer
    <p>...</p> by length (no regex).
    Lede paragraph → inline HTML (no outer <p>) Render the lede
    Paragraph node's inline children directly via
    HtmlRenderer::renderNodes() instead of slicing afterward.
    Snippet metadata comment (`<!-- snippet: filename: x.php\nrunnable:
    true\n-->`) String slicing of literal <!-- / --> delimiters — no
    regex.
    --update writing captured stdout back into a README **CommonMark
    AST** locates the snippet's exact line range; line-by-line splice. No
    regex over the README.

    Behavioural parity

    • 87/87 snippets match their captured stdout. The PHP normalizer
      mirrors the Python regex set 1:1, so existing expected-output blocks
      stay valid.
    • docs/reference/*.html render correctly: 9 <php-snippet> + 9
      fallback + 9 expected-output triples on html.html, 4 pitfall callouts
      (the bold-lead pattern is preserved), see-also list intact.
    • --update verified end-to-end:
    • When an expected-output block has drifted, the rewritten content is
      byte-for-byte the original.
    • When no expected-output exists for a snippet, --update inserts a
      fresh block in the right place; resulting README is byte-identical to
      one with the block authored manually.

    Frontmatter format change: see_also is a proper YAML list

    # Before (repeated keys — not standard YAML)
    see_also: a | A | reason
    see_also: b | B | reason
    
    # After
    see_also:
      - a | A | reason
      - b | B | reason

    Webuni\FrontMatter\FrontMatter correctly types it as a sequence; any
    frontmatter-aware tool reading the README sees the same shape. All 18
    component READMEs migrated.

    Workflows simplified

    • snippet-tests.yml drops the actions/setup-python step.
    • docs.yml swaps python3 bin/build-reference.py for php bin/build-reference.php.

    Remaining preg_* calls (all on plain text, not HTML)

    • slugify() — heading text → URL-safe slug.
    • normalize() — scrubs noise from snippet stdout (tempfile paths, git
      hashes, timestamps).
    • One pattern in run-snippets that matches the require '...autoload.php'; line in the snippet's PHP source to inject the
      local-prelude polyfill.

    These operate on plain strings, not HTML, so they're not what the "no
    regex over HTML" rule was about.

    Test plan

    • Verify docs snippets workflow passes (87/87).
    • Deploy docs to GitHub Pages runs cleanly on push to trunk.
    • Local preview: bash bin/build-docs-bundle.sh && php bin/serve-docs.phphttp://localhost:8787 renders all reference pages
      with snippets.
    • php bin/run-snippets.php --update (no-op, no drift) leaves all
      READMEs untouched.
    Open source →
  10. v0.7.3 no date

    Nothing published for this version

  11. v0.7.2 29 Apr 2026

    Nothing published for this version

  12. v0.7.1 no date

    Nothing published for this version

  13. v0.7.0 no date

    Nothing published for this version

  14. v0.6.2 10 Apr 2026

    Nothing published for this version

  15. v0.6.1 no date

    Nothing published for this version

  16. v0.6.0 no date

    Nothing published for this version

  17. v0.5.1 11 Sep 2025

    Nothing published for this version

  18. v0.5.0 no date

    Nothing published for this version

  19. v0.4.1 no date

    Nothing published for this version

  20. v0.4.0 no date

    Nothing published for this version

  21. v0.3.1 no date

    Nothing published for this version

  22. v0.3.0 no date

    Nothing published for this version

  23. v0.2.0 no date

    Nothing published for this version

  24. v0.1.5 no date

    Nothing published for this version

  25. v0.1.4 no date

    Nothing published for this version

  26. v0.1.3 08 Sep 2025

    Nothing published for this version

  27. v0.1.2 08 Sep 2025

    Nothing published for this version

  28. v0.1.1 no date

    Nothing published for this version

  29. v0.1.0 no date

    Nothing published for this version

  30. 0.0.19 no date

    Nothing published for this version

  31. 0.0.18 no date

    Nothing published for this version

  32. 0.0.17 no date

    Nothing published for this version

  33. 0.0.16 no date

    Nothing published for this version

  34. 0.0.15 no date

    Nothing published for this version

  35. v0.0.15-alpha no date pre-release

    Nothing published for this version

  36. 0.0.14 no date

    Nothing published for this version

  37. 0.0.13 no date

    Nothing published for this version

  38. 0.0.12 no date

    Nothing published for this version

  39. 0.0.11 06 Sep 2025

    Nothing published for this version

  40. v0.0.8-alpha 08 Sep 2025 pre-release

    Nothing published for this version

  41. 0.0.7 06 Sep 2025

    Nothing published for this version

  42. v0.0.7-alpha 08 Sep 2025 pre-release

    Nothing published for this version

  43. 0.0.6 06 Sep 2025

    Nothing published for this version

  44. v0.0.6-alpha 08 Sep 2025 pre-release

    Nothing published for this version

  45. v0.0.5-alpha 04 Jun 2025 pre-release

    Nothing published for this version

  46. v0.0.4-alpha no date pre-release

    Nothing published for this version

  47. v0.0.3-alpha no date pre-release

    Nothing published for this version

  48. v0.0.2-alpha 20 May 2025 pre-release

    Nothing published for this version

  49. v0.0.1-alpha no date pre-release

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive