# hexo: what changed from 7 to 8 - Product: hexo (https://whatsnew.fyi/product/hexo) - Vendor: hexojs - Range: changelog entries numbered after v7.3.0 up to and including v8.1.2, stable releases only - Entries below: 4 releases (newest first) - Resolved: 7 is v7.3.0 and 8 is v8.1.2, the newest stable release of each major we track - Carrying security changes: 1 · CVEs mentioned: 0 · Mentioning breaking changes: 1 · Removing or deprecating something: 1 - Page: https://whatsnew.fyi/product/hexo/compare/7...8 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (36 changes, grouped by kind) ### Added #### v8.1.0 (2025-10-26) - Support skipping heading level in TOC #### v8.0.0 (2025-09-15) - Bind hexo context to helper function callback - Add url config validation - Add permalink variable `timestamp` - Support additional options for Backtick Code Block - Enforce stricter extension checks in load_config ### Changed #### v8.1.2 (2026-05-06) - Improve externalLink regexp performance - Remove node internal api usage in loadPlugin #### v8.1.0 (2025-10-26) - Fix potential cache miss issues with moize - Reduce ObjectAssign overhead - Improve archy performance - Reduce the number of match calls in metaGenerator - Improve escapeAllSwigTags performance #### v8.0.0 (2025-09-15) - Optimize external link filter for performance - Add binary relation index for PostCategory/PostTag for performance - Add cache for posts in listArchives - Reduce GC overhead in escapeAllSwigTags - Skip tag render when there is no swigTags - Implement faster text-table ### Fixed #### v8.1.2 (2026-05-06) - Fix noopener attribute in external_link (was incorrectly spelled as noopenner) - Fix incorrectly ignores single-line code blocks when escaping Swig and HTML comments #### v8.1.1 (2025-10-31) - Handle comment nesting in code fence and nunjucks #### v8.1.0 (2025-10-26) - Incorrect TOC anchor generation - Missing tags and categories when running hexo s with cache existed - Overly strict invalid tag format check in Swig parser - Updated post assets not being copied in hot processing when post_asset_folder is enabled - Nunjucks and code blocks in HTML comments were incorrectly converted #### v8.0.0 (2025-09-15) - Change the judgement of whether it has been injected - Backtrack when tag is incomplete in escapeAllSwigTags - `hexo.locals.get('posts')` now shows all posts - Fix parsing error for code blocks in list items - Sort the tags in open_graph - Escape HTML in title of `code` and `include_code` tags ### Removed #### v8.0.0 (2025-09-15) - Drop support for Node.js 16 - Drop support for Node.js 18 ### Security #### v8.1.2 (2026-05-06) - Add dependency-review action for vulnerability scanning ## Release notes ### v8.1.2 - Date: 2026-05-06 - Version: v8.1.2 - Original notes: https://github.com/hexojs/hexo/releases/tag/v8.1.2 - Permalink: https://whatsnew.fyi/product/hexo/releases/v8.1.2 - **fixed** — Fix noopener attribute in external_link (was incorrectly spelled as noopenner) - **fixed** — Fix incorrectly ignores single-line code blocks when escaping Swig and HTML comments - **changed** — Improve externalLink regexp performance - **changed** — Remove node internal api usage in loadPlugin - **security** — Add dependency-review action for vulnerability scanning ##### Fixes * fix(external_link): noopenner should be noopener by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5729 * fix: Incorrectly ignores single-line code blocks when escaping Swig and HTML comments by @D-Sketon in https://github.com/hexojs/hexo/pull/5722 ##### Performances * perf: faster externalLink regexp by @D-Sketon in https://github.com/hexojs/hexo/pull/5706 ##### Refactor * refactor: remove node internal api usage in loadPlugin by @renbaoshuo in https://github.com/hexojs/hexo/pull/5769 ##### CI/CD * ci: add dependency-review action for vulnerability scanning by @yoshinorin in https://github.com/hexojs/hexo/pull/5734 * ci: enable trusted publishing by @yoshinorin in https://github.com/hexojs/hexo/pull/5735 ##### Test * fix(test): add missing await to unlink in save_database test by @KentarouTakeda in https://github.com/hexojs/hexo/pull/5753 ##### Dependencies * chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5724 * chore(deps): bump actions/download-artifact from 6 to 7 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5726 * chore(deps): bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5727 * chore(deps): bump actions/dependency-review-action from 4.8.2 to 4.8.3 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5741 * chore(deps): bump actions/dependency-review-action from 4.8.3 to 4.9.0 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5744 * chore(deps): bump marocchino/sticky-pull-request-comment from 2 to 3 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5746 * chore(deps): bump actions/download-artifact from 7 to 8 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5742 * chore(deps): bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5743 * chore(deps): add lockfile by @yoshinorin in https://github.com/hexojs/hexo/pull/5739 ##### Misc * fix: update ESLint test configuration by @D-Sketon in https://github.com/hexojs/hexo/pull/5725 **Full Changelog**: https://github.com/hexojs/hexo/compare/v8.1.1...v8.1.2 ### v8.1.1 - Date: 2025-10-31 - Version: v8.1.1 - Original notes: https://github.com/hexojs/hexo/releases/tag/v8.1.1 - Permalink: https://whatsnew.fyi/product/hexo/releases/v8.1.1 - **fixed** — Handle comment nesting in code fence and nunjucks ##### Fixes * fix(regression): handle comment nesting in code fence and nunjucks by @D-Sketon in https://github.com/hexojs/hexo/pull/5717 ##### Misc * chore: use object format for repository field in `package.json` by @yoshinorin in https://github.com/hexojs/hexo/pull/5714 **Full Changelog**: https://github.com/hexojs/hexo/compare/v8.1.0...v8.1.1 ### v8.1.0 - Date: 2025-10-26 - Version: v8.1.0 - Original notes: https://github.com/hexojs/hexo/releases/tag/v8.1.0 - Permalink: https://whatsnew.fyi/product/hexo/releases/v8.1.0 - **fixed** — Incorrect TOC anchor generation - **fixed** — Missing tags and categories when running hexo s with cache existed - **fixed** — Overly strict invalid tag format check in Swig parser - **fixed** — Updated post assets not being copied in hot processing when post_asset_folder is enabled - **fixed** — Nunjucks and code blocks in HTML comments were incorrectly converted - **changed** — Fix potential cache miss issues with moize - **changed** — Reduce ObjectAssign overhead - **changed** — Improve archy performance - **changed** — Reduce the number of match calls in metaGenerator - **changed** — Improve escapeAllSwigTags performance - **added** — Support skipping heading level in TOC ##### Performances * perf: fix potential cache miss issues with moize by @D-Sketon in https://github.com/hexojs/hexo/pull/5694 * perf: reduce ObjectAssign overhead by @D-Sketon in https://github.com/hexojs/hexo/pull/5698 * perf: faster archy by @D-Sketon in https://github.com/hexojs/hexo/pull/5700 * perf: reduce the number of match calls in metaGenerator by @D-Sketon in https://github.com/hexojs/hexo/pull/5707 * perf: faster `escapeAllSwigTags` by @D-Sketon in https://github.com/hexojs/hexo/pull/5699 ##### Fixes * fix/perf: Incorrect TOC anchor generation by @D-Sketon in https://github.com/hexojs/hexo/pull/5696 * fix(regression): missing tags and categories when running `hexo s` with cache existed by @D-Sketon in https://github.com/hexojs/hexo/pull/5697 * fix: fix ts error in test by @D-Sketon in https://github.com/hexojs/hexo/pull/5709 * fix(regression): remove overly strict invalid tag format check in Swig parser by @D-Sketon in https://github.com/hexojs/hexo/pull/5691 * fix(processor/post): updated post assets not being copied in hot processing when `post_asset_folder` is enabled by @yoshinorin in https://github.com/hexojs/hexo/pull/5704 * fix: nunjucks/code blocks in HTML comments were incorrectly converted by @D-Sketon in https://github.com/hexojs/hexo/pull/5616 ##### Refactor * refactor(toc): support skipping heading level by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5653 ##### Dependencies * chore: bump actions/setup-node from 5 to 6 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5708 * chore(deps): bump actions/download-artifact from 4 to 5 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5682 * chore(deps): bump actions/download-artifact from 5 to 6 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5710 * chore(deps): bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5711 * chore(deps): bump hexo-util from 3 to 4 by @D-Sketon in https://github.com/hexojs/hexo/pull/5712 **Full Changelog**: https://github.com/hexojs/hexo/compare/v8.0.0...v8.1.0 ### v8.0.0 - Date: 2025-09-15 - Version: v8.0.0 - Original notes: https://github.com/hexojs/hexo/releases/tag/v8.0.0 - Permalink: https://whatsnew.fyi/product/hexo/releases/v8.0.0 - **removed** — Drop support for Node.js 16 - **removed** — Drop support for Node.js 18 - **added** — Bind hexo context to helper function callback - **added** — Add url config validation - **added** — Add permalink variable `timestamp` - **added** — Support additional options for Backtick Code Block - **added** — Enforce stricter extension checks in load_config - **fixed** — Change the judgement of whether it has been injected - **fixed** — Backtrack when tag is incomplete in escapeAllSwigTags - **fixed** — `hexo.locals.get('posts')` now shows all posts - **fixed** — Fix parsing error for code blocks in list items - **fixed** — Sort the tags in open_graph - **fixed** — Escape HTML in title of `code` and `include_code` tags - **changed** — Optimize external link filter for performance - **changed** — Add binary relation index for PostCategory/PostTag for performance - **changed** — Add cache for posts in listArchives - **changed** — Reduce GC overhead in escapeAllSwigTags - **changed** — Skip tag render when there is no swigTags - **changed** — Implement faster text-table ##### Breaking Changes * chore: drop Node.js 16 by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5592 * chore: drop Node.js 18 by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5674 ##### New Features * feat: bind hexo context to helper function callback by @dimaslanjaka in https://github.com/hexojs/hexo/pull/5555 * feat: add url config validation by @ShaytonXu in https://github.com/hexojs/hexo/pull/5578 * feat: add permalink variable `timestamp` by @uiolee in https://github.com/hexojs/hexo/pull/5611 * feat: Support additional options for Backtick Code Block by @D-Sketon in https://github.com/hexojs/hexo/pull/5625 * feat(load_config): enforce stricter extension checks by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5591 ##### Fixes * fix:changed the judgement of whether it has been injected by @mRNA16 in https://github.com/hexojs/hexo/pull/5573 * fix(escapeAllSwigTags): backtrack when tag is incomplete by @D-Sketon in https://github.com/hexojs/hexo/pull/5618 * fix: `hexo.locals.get('posts')` doesn't show all posts by @D-Sketon in https://github.com/hexojs/hexo/pull/5612 * fix: Parsing error for code blocks in list items by @D-Sketon in https://github.com/hexojs/hexo/pull/5617 * fix(open_graph): sort the tags by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5656 * Escape HTML in title of `code` and `include_code` tags by @tommy351 in https://github.com/hexojs/hexo/pull/5688 ##### Performances * perf(external_link): optimize external link filter by @D-Sketon in https://github.com/hexojs/hexo/pull/5598 * perf(PostCategory/PostTag): add binary relation index for performance by @D-Sketon in https://github.com/hexojs/hexo/pull/5605 * perf(listArchives): add cache for posts by @D-Sketon in https://github.com/hexojs/hexo/pull/5624 * perf(escapeAllSwigTags): reducing GC overhead by @D-Sketon in https://github.com/hexojs/hexo/pull/5620 * perf: skip tag render when there is no swigTags by @D-Sketon in https://github.com/hexojs/hexo/pull/5650 * perf: faster text-table by @D-Sketon in https://github.com/hexojs/hexo/pull/5665 * warehouse6 * perf(model): add caching for data keys by @D-Sketon in [#271](https://github.com/hexojs/warehouse/pull/271) ##### Refactor * refactor(common): delete unused function `ignoreTmpAndHiddenFile` by @yoshinorin in https://github.com/hexojs/hexo/pull/5600 * delete scripts `pretest` by @uiolee in https://github.com/hexojs/hexo/pull/5610 * refactor(moment): remove unused timezone setting by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5654 ##### Test * test(box/file): extend the mocha timeout to prevent the async file read test from failing by @yoshinorin in https://github.com/hexojs/hexo/pull/5601 * test: improve coverage by @D-Sketon in https://github.com/hexojs/hexo/pull/5638 ##### Depenrencies * chore(deps-dev): bump @types/node to ^20.16.10 by @uiolee in https://github.com/hexojs/hexo/pull/5558 * chore(deps): remove resolve by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5594 * chore(deps): update dependencies by @yoshinorin in https://github.com/hexojs/hexo/pull/5597 * chore(deps): update `cheerio` from `0.22` to `1.0.0` by @yoshinorin in https://github.com/hexojs/hexo/pull/5603 * chore(deps): migrate `husky` from `8.x` to `9.x` by @yoshinorin in https://github.com/hexojs/hexo/pull/5602 * chore(deps): update eslint by @stevenjoezhang in https://github.com/hexojs/hexo/pull/5599 * chore(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5684 * chore(deps): bump strip-ansi from 6.0.1 to 7.1.0 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5218 * chore: bump actions/setup-node from 4 to 5 by @dependabot[bot] in https://github.com/hexojs/hexo/pull/5687 ##### Misc * chore(lint): apply eslint to test files by @yoshinorin in https://github.com/hexojs/hexo/pull/5655 ##### New Contributors * @mRNA16 made their first contrib _[Truncated at 4000 characters — full notes: https://github.com/hexojs/hexo/releases/tag/v8.0.0]_