A fast, simple & powerful blog framework, powered by Node.js.

Overview

Hexo logo

Hexo

A fast, simple & powerful blog framework, powered by Node.js.

Website | Documentation | Installation Guide | Contribution Guide | Code of Conduct | API | Twitter

NPM version Required Node version Build Status dependencies Status Coverage Status Gitter Discord Chat Telegram Chat FOSSA Status Contributor Covenant

Features

  • Blazing fast generating
  • Support for GitHub Flavored Markdown and most Octopress plugins
  • One-command deploy to GitHub Pages, Heroku, etc.
  • Powerful API for limitless extensibility
  • Hundreds of themes & plugins

Quick Start

Install Hexo

$ npm install hexo-cli -g

Setup your blog

$ hexo init blog
$ cd blog

Start the server

$ hexo server

Create a new post

$ hexo new "Hello Hexo"

Generate static files

$ hexo generate

More Information

Contributing

We welcome you to join the development of Hexo. Please see contributing document. 🤗

Also, we welcome PR or issue to official-plugins.

Contributors

Backers

Backers

Sponsors

JetBrains

License

FOSSA Status

Issues
  • 3.0为什么运行hexo deploy没有反应啊?(Hexo Deploy hanging in 3.0)

    3.0为什么运行hexo deploy没有反应啊?(Hexo Deploy hanging in 3.0)

    3.0为什么运行hexo deploy没有反应啊? 能不能详细介绍一下发布到github以及教程什么的?

    opened by chenhongbinjs 63
  • Replace default swig engine with nunjucks

    Replace default swig engine with nunjucks

    It feels reasonable to remove swig due to its deprecation and various issues reporting it: #2895, #1593, #1625, #1915, #2295

    This PR aims to:

    What do you think?

    enhancement Breaking Change 
    opened by oncletom 55
  • 上传内容以后页面一直是404?

    上传内容以后页面一直是404?

    我改好了设置 hexo generate hexo deploy 传到github上的只有.deploy文件夹里的内容,这样是对的吗? 在localhost显示是正常的,传上去就一直404,有人帮我看下吗?谢谢! https://github.com/JackieLuo/JackieLuo

    opened by JackieLuo 46
  • ERROR Local hexo not found

    ERROR Local hexo not found

    I am unable to run the hexo command inside a hexo blog directory.

    [email protected]:/home/dsaltares/hexo_blog: hexo
    ERROR Local hexo not found in ~/hexo_blog
    ERROR Try running: 'npm install hexo --save'
    

    The --save option does nothing really.

    However I did install hero-cli and hero-server using npm install -g.

    I am using nvm to manage node versions.

    [email protected]:/home/dsaltares/hexo_blog: nvm --version
    0.31.4
    
    [email protected]:/home/dsaltares/hexo_blog: node -v
    v6.3.1
    
    [email protected]:/home/dsaltares/hexo_blog: npm --v
    3.10.3
    

    The same also happens with node 4 and node 5.

    opened by dsaltares 46
  • ERROR Deployer not found: github

    ERROR Deployer not found: github

    I just download install Hexo version 3.0.0-rc.2

    Now I've setup the deploy section in the _config.yml:

    # Deployment
    ## Docs: http://hexo.io/docs/deployment.html
    deploy:
      type: github
      repo: https://github.com/scaljeri/website.git
      branch: gh-pages
      message: hexo deploy
    

    However, when I run the deploy command I get the following:

    % hexo deploy
    ERROR Deployer not found: github
    

    According to the documentation it should work this way. Any suggestions ?

    opened by scaljeri 44
  • 升级到hexo 3.0后deploy type: github选项无效

    升级到hexo 3.0后deploy type: github选项无效

    必须要将config.yml中的github修改为git才能正常deploy。 这个不算BUG,无伤大雅,在wiki里面提一句就好,除了修改type之外别的不需要修改。

    opened by Xuanwo 42
  • Hexo installed on Mac, throw error

    Hexo installed on Mac, throw error "Cannot find module './build/Release/DTraceProviderBindings'"

    全局已经安装hexo,当前项目下也装了
    blog git:(master) ✗ hexo { [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } { [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } { [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } { [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } { [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } { [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } ERROR Local hexo not found in ~/Documents/DATA/github/blog ERROR Try running: 'npm install hexo --save'

    opened by liushaohua 37
  • win10系统hexo s以后http://localhost:4000打不开本地服务器

    win10系统hexo s以后http://localhost:4000打不开本地服务器

    不知道为啥

    状态图 hexo版本 打不开 打不开 打不开 系统版本

    need-verify 
    opened by luodaoyi 37
  • mac 安装hexo问题

    mac 安装hexo问题

    系统版本:osx 10.10

    已经安装了Xcode,Xcode命令行工具

    sudo npm install -g hexo

    在命令行中抛如下警告信息:

    [email protected] install /usr/local/lib/node_modules/hexo/node_modules/chokidar/node_modules/fsevents node-gyp rebuild

    gyp WARN EACCES user "root" does not have permission to access the dev dir >"/Users/xiangwenwen/.node-gyp/0.10.33" gyp WARN EACCES attempting to reinstall using temporary dev dir >"/usr/local/lib/node_modules/hexo/node_modules/chokidar/node_modules/fsevents/.node-gyp"

    网上找了下资料,说是没有g++,我能确定自己安装了。

    question 
    opened by icepy 34
Releases(5.4.0)
  • 5.4.0(Feb 21, 2021)

    New features

    • feat: handle config.root is not exist @jiangtj [#4616]

    Breaking change

    • fix(excerpt): use span instead of anchor element for better SEO performance @stevenjoezhang [#4627]

    Fixes

    • fix(box): set property awaitWriteFinish for chokidar filewatcher @stevenjoezhang [#4633]
    • fix(codeblock): match whitespace but not newlines @stevenjoezhang [#4625]
    • fix(i18n): page.lang is undefined when using the key language in front-matter @stevenjoezhang [#4614]

    Misc

    • github: update actions/setup-node action to v2 @stevenjoezhang [#4604]
    • chore/ci: migrate from probot/stale to GitHub Actions @stevenjoezhang [#4598]

    Dependencies

    • chore(deps): bump js-yaml from 3.14.1 to 4.0.0 @dependabot-preview [#4607]
    Source code(tar.gz)
    Source code(zip)
  • 5.3.0(Dec 17, 2020)

    New features

    • expose escape_html helper method for string manipulation to templates @awwong1 [#4581]
    • list_tags: span element & custom class for label @noraj [#4578]

    Fixes

    • fix(load_plugins): ignore plugin whose name is started with "hexo-theme" @stevenjoezhang [#4592]
    • fix(codeblock): closing code fence may be followed only by spaces @stevenjoezhang [#4574]

    Refactor

    • Replace process.mainModule with require.main @stevenjoezhang [#4583]

    Docs

    • docs(badge): replace david-dm with more reliable shields.io @curbengh [#4538]
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0(Sep 17, 2020)

    Changes

    • perf(external_link): faster regexp @SukkaW [#4536]
      • prioritise http(s):// over //
    • feat: support 'disableNunjucks' in front-matter @curbengh [#4518]
      • Enable this option to disable tag plugin
      • Setting this option in front-matter will override the same option set by the renderer (e.g. hexo-renderer-marked)
      ---
      title: foo
      date: 2020-01-02 03:04:05
      disableNunjucks: true|false
      ---
      
    • fix: avoid escaping front-matter if unnecessary @curbengh [#4522]
      • using variable (e.g. {{ title }}) with special characters no longer result in double-quote wrap
    • fix: validate value of config.url @curbengh [#4520]
      • config.url should starts with "http://" or "https://"
    • fix(router): convert string to buffer in route stream @ppoffice [#4517]
      • fix crash in hexo generate --bail
    • fix(disableNunjucks): query both async and sync versions of renderer @curbengh [#4498]
      • disableNunjucks option should now works reliably with synchronous renderer
    • feat(load_plugin): ignore pkg name endswith theme name @SukkaW [#4497]
      • An initial effort to support scoped package

    Housekeeping

    • chore/ci: move benchmark & profiling to Actions @SukkaW [#4525] [#4514] [#4335]
      • Travis is now completely replaced by Actions (in this repo)
    • chore: use example.com for example domain @YoshinoriN [#4512]
    Source code(tar.gz)
    Source code(zip)
  • 5.1.1(Aug 23, 2020)

    Changes

    • fix(filter/highlight): avoid escaping curly bracket when highlight & prismjs disabled @curbengh [#4489]
      • When both highlight.js and prismjs are disabled:
      # _config.yml
      highlight:
        enable: false
      
      prismjs
        enable: false
      
      • there was an issue that curly brackets { } are escaped { } mistakenly in the backtick_code_block.js filter. The fix is to avoid running that filter when code highlight is disabled.
      • Some users disable Hexo's default code highlight as they prefer to their own method.
    Source code(tar.gz)
    Source code(zip)
  • 5.1.0(Aug 21, 2020)

    Features

    • feat(highlight): parse 'caption' option to prismHighlight @curbengh [#4476]

      • caption is now available in prismjs:
      # _config.yml
      highlight:
        enable: false
      prismjs:
        enable: true
      
      • It can be used in triple backtick codeblock:
      ``` js caption
      console.log('foo')
      ```
      • above codeblock will be rendered as: (class attributes are omitted for brevity)
      <pre><div class="caption"><span>caption</span></div><code>console...</code></pre>
      
      • you can style the caption by:
      pre div.caption {
        font-size: 0.9em;
        color: #888;
      }
      
      pre div.caption a {
        float: right;
      }
      
    • fix: refactor post escape @SukkaW [#4472]

      • fixed issue with prismjs that, in some cases, did not remove hexo's processing tag properly
    • Remove plugins option in config @stevenjoezhang [#4475]

      # _config.yml
      plugins:
      
      • plugins option has been deprecated long ago and it's now completely dropped
      • plugins should be saved in scripts/ folder or installed via npm package.json.

    Performance

    • perf(backtick_code): avoid duplicated escaping @SukkaW [#4478]
    Source code(tar.gz)
    Source code(zip)
  • 5.0.2(Aug 10, 2020)

  • 5.0.1(Aug 10, 2020)

  • 4.2.1(May 14, 2020)

  • 5.0.0(Jul 28, 2020)

    Breaking change

    • refactor(external_link): migrate config during load_config @SukkaW [#4414] [#4371]

      • See Writing section for new options (introduced back in v4)
      # _config.yml
      external_link: true|false # deprecated
      
      # New option
      external_link:
        enable: true|false
      
      # _config.yml
      # https://hexo.io/docs/configuration#Date-Time-format
      use_date_for_updated: true # deprecated
      
      # New option
      updated_option: date
      
      • If you check external_link for truthy value, since it's now automatically converted to object, it will be always truthy:
      <% if (config.external_link) { %>
      
      • If you wish to maintain backward compatibility with older Hexo versions:
      <% if ((typeof config.external_link === 'boolean' && config.external_link === true) || (typeof config.external_link === 'object' && config.external_link.enable === true)) { %>
      
    • refactor(box): remove Bluebird.asCallback @SukkaW [#4379]

      • Callback syntax for Box is never documented nor utilized in Hexo's internal.
      • This is also a reminder that we might drop callbacks from all Hexo API in future. [#3328]
    • feat: bring up config.updated_option @SukkaW [#4278]

      • This can be useful for a theme that prefers to display Updated: only when it's set in the article's front-matter.
    • feat(open_graph): drop 'keywords' option from front-matter @curbengh [#4174]

      • Search engines no longer support keywords.
    • fix(#3464): override permalink use the front-matter @SukkaW [#4359]

      • User config:
      # _config.yml
      permalink: :year/:month/:day/:title/
      
      • Front-matter
      ---
      title: foo bar
      permalink: breaking-news/
      ---
      
      • That post will be available on http://yourhexo.com/breaking-news/
      • A reminder that permalink must have a trailing .html or /
      permalink: :year/:month/:day/:title/ # default
      # or
      permalink: :year/:month/:day/:title.html
      
    • Remove lodash from global variable @SukkaW [#4266]

      • Lodash _ is no longer available on Hexo API.
      // Dropped
      <% const arrayB = _.uniq(arrayA) %>
      
      • We encourage the use over native JS API over Lodash, we find this guide to be helpful.
      • If you prefer to use Lodash, you can always install it and make it available via Helper API
    • chore/ci: drop Node.js 8 and add Node.js 14 @SukkaW [#4255]

      • Node 8 has reached EOL on 31 Dec 2019.
      • Hexo now requires Node 10+; although Node 10.x is still supported, but it's going to be officially deprecated in less than a year (April 2021), so we recommend Node 12+.
    • refactor: remove site config from theme config @SukkaW [#4145]

      • Previously hexo.theme.config is merged into hexo.config, they are now separated to avoid possible conflict in configuration.

    New feature

    • feat(tag): show source of the error & beautify @SukkaW [#4420]
    • feat(post_link): better error message when a post could not be located [#4426]
      • The error message is now clearer when there is an incorrect filename.
    • skip assets of unpublished posts and delete them if exist @DaemondShu [#3489]
      • When there is an unpublished post:
      ---
      title: Still a draft....
      published: false
      ---
      
      • That post including its assets will not be generated into the public/ folder.
    • feat(extend/injector): bring up new extend Injector @SukkaW [#4049]
    • feat: add prism highlight support @SukkaW [#4119]
    • feat(tagcloud): new option class & level @stevenjoezhang [#4370]
      • Ability to add class name for CSS styling.
    • feat(config): validate config before processing posts @SukkaW [#4381]
    • feat(post_permalink): add :second attribute option for post permalink @kkocdko [#4185]
      • Example:
      permalink: :year/:month/:day/:hour/:minute/:second/:title.html
      
    • feat(youtube_tag): add cookie option @curbengh [#4155]
      • When disabled, cookie is not set/sent in the youtube video embed.
    • feat(youtube_tag): support playlist @SukkaW [#4139]
      • Ability to embed a playlist.
    • feat(load_theme_config): support alternate theme config @SukkaW [#4120]
      • Theme can be configured in a file _config.[name].yml, e.g. _config.landscape.yml for hexo-theme-landscape.
      • Placed the file in the root folder, same as the current _config.yml.
      • Refer to the documentation for configuration priority.
    • feat(feed_tag): support parsing config.feed @curbengh [#4029]
    • feat(tag): add unregister() method @SukkaW [#4046]
      • This means you can now unregister existing tag plugins and replace it with your own with the same name.
    • feat(filter): add _after_html_render filter @jiangtj [#4051]
      • perf(filter): set after_render:html as alias of _after_html_render @curbengh [#4073]
      • Existing after_render:html filter plugins automatically benefit from this improvement.
    • feat(load_config): support theme_dir in node_modules @SukkaW [#4112]
    • fix(list_tags): custom class for each element @noraj [#4059]
      • Customize the class name for each element <ul>, <li>, <a>, <span> for list_tags plugin.

    Performance

    • perf(tag): rendering optimization @SukkaW [#4418]
    • perf(external_link): faster regexp & condition shorthand @SukkaW [#4436]
    • perf(external_link): optimize regex @SukkaW [#4008]
    • perf(filter): shorthand syntax @SukkaW [#4377]
    • perf(backtick_code): shorthand @SukkaW [#4369]
    • perf: avoid running irrelevant plugins in 'clean' command @curbengh [#4386]
      • To maintain compatibility with third-party console plugins, this only applies to hexo clean, not hexo c alias.
    • perf(titlecase): lazy require @SukkaW [#4417]
    • perf(tag/code): performance improvements @SukkaW [#4416]
    • perf(post): simplify codeblock escape @SukkaW [#4254]
    • perf(meta_generator): avoid unnecessary check @SukkaW [#4208]
    • perf(external_link): cache config @SukkaW [#4134]
    • perf(open_graph): avoid using htmlTag() and enhance cache @SukkaW [#4125]
    • refactor(list_archives): reduce calls to date.format() @dailyrandomphoto [#4011]
    • fix(moment.locale): avoid lookup repeatedly with the wrong names @dailyrandomphoto [#4007]

    Fix

    • fix(box): ignore .git and node modules in the theme folder @jiangtj [#4306]
    • fix: allow empty title @stevenjoezhang [#4344]
    • fix(#4236): don't create "/index" directories when post_asset_folder is true @jiangtj [#4258]
    • fix(#4317): non-greedy regexp for tag escape @SukkaW [#4358]
    • fix(post): use non-greedy regular expressions @stevenjoezhang [#4161]
    • fix(post): properly escape swig tag inside post @SukkaW [#4352]
      • swig tag inside a single backtick is now interpreted as code embed.
      • `{% foo %}{{ bar }}{% endfoo %}`
    • fix(logging): log database only in relevant commands @curbengh [#4387]
      • Writing database to ${dbPath}/db.json message shouldn't show up in hexo clean and hexo version.
    • fix(server-cache): must match exact alias @curbengh [#4388]
      • Improve compatibility with 3rd-party console plugins that may have a name that starts with an 's'.
    • fix(tag-code): parse 'wrap' option @curbengh [#4391]
    • fix: remove unused type check @Himself65 [#4398]
    • fix: access error code from error object directly @SukkaW [#4280]
      • Improve compatibility with native JS API
    • fix: load_plugin with extra line EOF @SukkaW [#4256]
    • fix: parsing code error in backticks @seaoak [#4229]
    • fix(toc_helper): escape class name and handle null id @curbengh [#4009]
    • fix(meta_generator): match existing <meta> with different order @SukkaW [#4017]
    • fix(excerpt): stricter regex @curbengh [#4443]
      • Now only the following variants of excerpt tag are valid.
      1. <!--more-->
      2. <!-- more-->
      3. <!--more -->
      4. <!-- more -->

    Refactor

    • refactor(meta_generator): no longer ignore empty @SukkaW [#4442]
    • refactor(external_link): migrate config during load_config @SukkaW [#4414]
    • Reduce array#reduce @segayuu [#4299]
    • Correct using createSha1Hash() with pipe() @seaoak [#4323]
    • refactor(post): reduce promise @SukkaW [#4337]
    • refactor: simplify code @2997ms [#4408]
    • refactor(external_link): filter regexp @segayuu [#4412]
    • refactor(hexo): merge theme_config before generation @SukkaW [#4360]
    • refactor(nunjucks): dedicated nunjucks renderer @SukkaW [#4356]
    • refactor: drop hexo-util#HashStream @SukkaW [#4279]
    • refactor(toc): avoid using htmlTag @SukkaW [#4183]
    • refactor(hexo_index): remove unused parameter @curbengh [#4153]
    • Refactor(class): Replace prototype to class syntax @segayuu [#4151]
    • refactor: copy object with spread operator @SukkaW [#4140]
    • refactor: simplify code @Himself65 [#4138]
    • refactor: utilize Object.entries @SukkaW [#4118]
    • refactor: utilize hexo-util pr-169 @SukkaW [#4045]
    • refactor(hexo/index): use Set @SukkaW [#4013]
    • refactor: Class syntax @SukkaW [#4100]
    • refactor(helper): minor changes @SukkaW [#4061]
    • style: space for asyncArrow @SukkaW [#4102]
    • Reduce stream @segayuu [#4333]

    Dependencies

    • chore(deps): update hexo-front-matter from 1.0.0 to 2.0.0 @SukkaW [#4439]
    • chore(deps): update hexo-util from 1.9.0 to 2.2.0 [#4276] [#4438]
    • chore(deps): bump hexo-log from 1.0.0 to 2.0.0 [#4392]
    • chore(deps-dev): bump hexo-renderer-marked from 2.0.0 to 3.0.0 [#4390]
    • chore(deps-dev): bump mocha from 6.2.2 to 8.0.1 [#4060] [#4354]
    • Update tester node version @segayuu [#4324]
    • chore(deps-dev): bump eslint from 6.8.0 to 7.0.0 [#4301]
    • chore(deps): bump warehouse from 3.0.1 to 4.0.0 [#4077] [#4322]
    • chore(deps-dev): bump lint-staged from 9.5.0 to 10.2.0 [#4283]
    • chore(deps): bump hexo-fs from 2.0.0 to 3.0.1 [#4277]
    • chore(deps-dev): bump sinon from 7.5.0 to 9.0.2 [#4005] [#4232]
    • chore(deps-dev): bump husky from 3.1.0 to 4.2.5 [#4235]
    • chore(deps): bump chalk from 3.0.0 to 4.0.0 [#4215]
    • chore(deps-dev): bump nyc from 14.1.1 to 15.0.0 [#4003]

    Misc

    • refactor: port shell script to javascript @Himself65 [#4405]
    • refactor(console/generate): class & destructure assign @SukkaW [#4338]
    • Fix not to pass callback to hexo-fs @segayuu [#4339]
    • style: es6 string extensions & destructure @SukkaW [#4357]
    • Migrate Travis and Appveyor tp GitHub Actions
      • ci(appveyor): drop appveyor @SukkaW [#4402]
      • chore: add release release-drafter (#3858) @YoshinoriN [#4165]
      • ci: add GitHub Actions to run linter @Himself65 [#4143]
      • ci(travis): remove Windows @curbengh [#4076]
      • ci(github_actions): Create tester job @segayuu [#4169]
      • Move coveralls from travis to github actions @segayuu [#4326]
    • ci(benchmark): generate flamegraph @SukkaW [#4000]
    • ci(flamegraph): fix 0x @SukkaW [#4116]
    • Fix issues found by lgtm.com
      • fix(console_generate): remove unnecessary boolean-to-object conversion @curbengh [#4152]
      • fix: remove useless conditions @curbengh [#4147]
      • fix: return callback if called @curbengh [#4178]
    • refactor(benchmark): minor changes @SukkaW [#4411]
    • github(issue_template): add special notice @SukkaW [#4348]
      • add mandarin issue template

    Test

    • test(benchmark): optimize for local & render post support @SukkaW [#4428]
    • perf(mocha): run tests in parallel @curbengh [#4374]
    • refactor(test): async hexo/load_config.js @segayuu [#4340]
    • test(#4087): add related cases @SukkaW [#4364]
    • test(post): add test cases for [#3543] & [#3459] @SukkaW [#4361]
    • test(generate): add a small delay before clean up @SukkaW [#4393]
    • test(#4385): no double escape in code block @SukkaW [#4395]
    • test(generate): add a longer delay after fs#unlink @SukkaW [#4400]
    • test: coverage improvements @SukkaW [#4270] [#4421] [#4422]
    • test(box): fix test cases for macOS @stevenjoezhang [#4269]
    • test(load_plugins): make sure file is created @SukkaW [#4265]
    • test(post): adding extra test cases @SukkaW [#4238]
    • test(load_plugins): minor changes @SukkaW [#4212]
    • test(post): fix cases added in #4161 @SukkaW [#4162]
    • test(tags-plugins/helper): improve test coverage @SukkaW [#4014]
    • style(test-helper-is): asyncArrow space @SukkaW [#4015]
    • test: improve coverage @SukkaW [#4050]
    • test(load-database): fix EPERM error in windows @curbengh [#4069]
    • test: useful sinon.assert @segayuu [#4164]
    • test: replace from rewire to sinon.stub() @segayuu [#4157]
    • refactor test @segayuu [#4115]
      • simplify unit test
    Source code(tar.gz)
    Source code(zip)
  • 4.2.0(Dec 22, 2019)

    Features

    • Caching is disabled by default in hexo-server [#3963]
      • It's disabled so that any changes (particularly to the theme's layout) can be previewed in real-time.
      • If you use hexo-server in production environment to serve your website, it can be enabled by,
      _config.yml
      server:
        cache: true
      
    • Add min_depth: option to toc() helper [#3997]
      • Example usage:
      <%- toc(page.content, { min_depth: 2 }) %>
      // table of content would only include <h2>, <h3> and above
      

    Fixes

    • Merges similar theme configs in main config and theme's config [#3967]
      • For example:
      _config.yml
      theme_config:
        a:
          b: 'foo'
      
      • Plus,
      _config.yml of theme
      a:
        c: 'bar'
      
      • theme variable should have,
      a: {
        b: 'foo',
        c: 'bar'
      }
      
    • Fixes some caching issue [#3985]
    • Open Graph now applies all pretty_urls options to og:url tag [#3983]

    Refactor

    • No longer uses lodash [#3969], [#3987], [#3753]

      • Lodash _ is still available as a global variable, usually utilized in theme layout.
      • However, we plan to completely drop it in the coming Hexo 5.0.0
      • This project page includes all the relevant pull requests which you may find useful
    • Completely drops cheerio [#3850], [#3677]

      • This means Hexo no longer includes cheerio as part of its production dependencies (it's still a development dependency)
      • This also means the following initialization methods no longer work,
      const cheerio = require('./node_modules/hexo/node_modules/cheerio/index')
      const cheerio = require('./node_modules/cheerio/index')
      
      • To use cheerio,
      $ npm install --save cheerio
      
      const cheerio = require('cheerio')
      
    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Dec 12, 2019)

    Feature

    • Add trailing_html: to pretty_urls: option to remove ".html" from url [#3917]
      • Use the following config to remove the trailing ".html" from permalink variables
      _config.yml
      pretty_urls:
        trailing_html: false
      
      • Example: https://yoursite.com/page/about.html -> https://yoursite.com/page/about

    Fixes

    • Set default locales (in "language_TERRITORY" format) for og:locale Open Graph tag [#3921]
      • Previously og:locale was inserted only if language: is configured in "language-TERRITORY" format
      • With this fix, if the language is "en", og:locale will default to "en_US". Refer to the pull request for the full list.
    • meta_generator() helper should output the correct Hexo version [#3925]
    • permalink_defaults: option should be parsed, not replaced [#3926]
    • "node_modules/" and ".git/" folders in themes/ are now always ignored [#3918]

    Refactor

    • Further reduces lodash usage [#3880]
    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Dec 8, 2019)

    Breaking change

    • Requires Node 8.10 or above [#3778]
      • Node 8 is going to be deprecated in less than a month, we strongly urge to upgrade to Node 10 or newer
    • og:locale Open Graph tag won't be inserted if language: (in config, front-matter of post/page or open_graph() helper) is not in language-TERRITORY format [#3808]
      • en is invalid
      • en-GB is valid
      • Not all locales are supported (e.g. en-AU is not valid), see official list
      • Dash (e.g. "en-GB") must be used for multilingual support, dash is automatically transformed to underscore (e.g. "en_GB") in og:locale
      • Verify the corresponding file exists in the languages/ folder of installed theme before changing the language: config

    Features

    • Support adding hour and minute to post permalink [#3629]
      • Example usage:
      _config.yml
      permalink: :year/:month/:day/:hour/:minute/:title/
      
      • Results in https://yoursite.com/2019/12/09/23/59/a-post/
    • Insert article:published_time [#3674] article:author [#3805] Open Graph tags
    • Enable lazyload in iframe-related tag plugins [#3798]
    • meta_generator helper to insert metadata element tag [#3782]
      • Example usage:
      • Insert the following snippet (if EJS is used) inside <head> element of your theme layout,
      <%- meta_generator() %>
      
      • would output <meta name="generator" content="Hexo 4.1.0">
      • Hexo 3.9.0+ inserts the tag automatically; to get the performance benefit (of the meta_generator helper), meta_generator: option should be disabled,
      _config.yml
      meta_generator: false
      
    • Support custom attributes in js() [#3681] and css() [#3690] helpers
      • Example usage:
      <%- js({ src: 'script.js', integrity: 'foo', async: true }) %>
      // <script src="/script.js" integrity="foo" async></script>
      
      <%- css({ href: 'style.css', integrity: 'foo' }) %>
      // <link rel="stylesheet" href="/style.css" integrity="foo">
      
    • Support wrap: option to enable/disable wrapping backtick codeblock in <table> element [#3827]
      • Enabled by default, enabling line_number also enables it
      • Configure in highlight:
      _config.yml
      highlight:
        line_number: false # must be disabled to disable wrap:
        wrap: false
      
      • This option also can be passed to codeblock() tag plugin [#3848]
      {% codeblock lang:js wrap:false %}
      const foo = (bar) => {
        return bar;
      };
      {% endcodeblock %}
      

    Fixes

    • Retain blank lines in a codeblock attached in blockquote [#3770]
    • Replaced deprecated og_updated_time Open Graph tag with article:modified_time [#3674]
    • Replaced deprecated keywords Open Graph tag with article:tag [#3805]
    • meta_generator tag should be inserted into <head> that spans multiple lines [#3778]
    • No longer clear database db.json when running hexo new or hexo --help [#3793]
    • Completely ignore files/folders specified in ignore: option [#3797]
      • If you're using Webpack or related tools in your theme, the node_modules folder could cause some issues
      • A temporary workaround is to configure Hexo to ignore that folder,
      _config.yml
      ignore: '**/themes/*/node_modules/**'
      
      • The workaround will no longer be necessary in future version
    • jsfiddle, vimeo and youtube tag plugins now use https only [#3806]
    • external_link filter should not process data URLs (e.g. mailto: & javascript:) [#3812] and <article> element [#3895]
    • Prevent unnecessary insertion of front-matter when using alias in Hexo CLI [#3830]
      • -p is alias of --path
      • -s is alias of --slug
      • -r is alias of --replace
    • Applies include: and exclude: options to post's asset folder [#3882]
    • ignore: option should work for files, in addition to folders [#3878]

    Housekeeping

    • Add FOSSA license analyzer for open-source software license compliance [#3779]
    • Run benchmark in CI to catch regression [#3776]
    • Further reduces lodash usage [#3786], [#3788], [#3790], [#3785], [#3809], [#3791], [#3810], [#3826], [#3867], [#3845]
    • Remove unnecessary file at the end of unit test [#3792]
    • Add funding source to npm [#3851]
    • Update bump strip-ansi from 5.2.0 to 6.0.0 [#3852]
    • Update chalk from 2.4.2 to 3.0.0 [#3853]
    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Oct 15, 2019)

    Breaking change

    • chore: drop Node 6 #3598
    • fix post_link, asset_link when title contains unescaped html charaters #3704
      • Affects asset_link, post_link tag plugins
      • If you want to retain unescaped characters, set false to the final argument {% asset_link 'filename 'title' 'false' %}
    • fix: encode permalink by default #3708
      • If you currently use encodeURI(post.permalink) (including permalink of page, tag & category variables), there are three options:
        1. Use encodeURI(decodeURI(post.permalink)) for backward-compatibility with hexo v3.9 (and older)
        2. Use encodeURL() function provided by hexo-util, it is backward-compatible
        3. Drop encodeURI() function, this breaks backward-compatibility
      • If you want to use the variables in decoded form,
      • This change does not apply to this.url variable.
    • fix(paginator): add escape option for compatibility with [email protected] #3728
      • Theme devs, if you customize prev_text/next_text with html (e.g. to insert icons), you need to set escape: false in the parameter.

    Feature

    • feat(filter): use existing excerpt if possible #3612

    • switch minimatch to micromatch #3538

    • feat: add option to disable meta generator tag #3653

      • Add meta_generator: false to config to disable
    • feat(generator): allow limit parallel generation #3665

      • If you experience "Out of memory" issue, try lowering the value in hexo g --concurrency <number>
    • Option to use date instead of file mtime for updated date #3235

      • If you prefer not to use file modification time in the post.updated variable, set use_date_for_updated: true in config
    • feat(list_tags): add Schema "keywords" and Microdata "tag" #3678

    • feat(permalink_variable): add pretty_urls option to remove index.html from url #3691

      • Use the following config to remove the trailing index.html from permalink variables
      pretty_urls:
        trailing_index: false
      
      • Does not apply to this.url variable (see #3661).
      • Should be compatible with existing canonical-related plugins, recommend plugin and theme devs to test
    • feat: add full_url_for helper #3701

      • use this helper full_url_for(page.path) instead of config.url + page.path
    • fix: external_link should use after_render #3675

      • added field and exclude options, see #3675 for guide.

    Performance

    • perf(meta_generator): drop cheerio #3671
    • perf(open_graph): drop cheerio and use regex #3680
    • perf(external_link): drop cheerio and use regex #3685
    • perf(cache): enforce caching across modes #3756

    Fix

    • fix: set english as default #3654
    • Use filename when title is not specified in the front-matter #3672
    • fix: ignore categories / tags with zero posts #3624
    • fix(open_graph): remove index.html from url #3661
    • fix(open_graph): remove duplicate twitter card tags #3668
    • fix(helpers, tag plugins): encode url by default #3710
      • Refer to #3708 for guide on decoding.
    • fix(open_graph): percent-encode url, not html escape #3686
    • fix: Allow backtick code block in "blockquote" tag plugin #2321
    • fix: Correct processing of backtick code block on blockquote #3765
    • fix: prevent inserting extra new line character into the end of backtick code block #3768

    Dependency

    • chore(deps): update tildify requirement from ^1.2.0 to ^2.0.0 #3541
    • chore(deps): update strip-indent requirement from ^2.0.0 to ^3.0.0 #3534
    • chore(deps-dev): update husky requirement from ^1.1.3 to ^3.0.0 #3608
    • chore(deps-dev): update eslint requirement from ^5.9.0 to ^6.0.1 #3606
    • chore(deps-dev): update lint-staged requirement from ^8.1.0 to ^9.1.0 #3615
    • chore: update to [email protected] and [email protected] #3646
    • chore(deps): update hexo-i18n requirement from ^0.2.1 to ^1.0.0 #3698
    • chore(deps): update hexo-fs requirement from ^1.0.0 to ^2.0.0 #3699
    • chore(deps): update hexo-front-matter requirement from ^0.2.3 to ^1.0.0 #3700
    • chore(deps): update hexo-log requirement from ^0.2.0 to ^1.0.0 #3730
    • chore(deps): update warehouse requirement from ^2.2.0 to ^3.0.0 #3736
    • chore(deps): bump hexo-cli from 2.0.0 to 3.0.0 #3743
    Source code(tar.gz)
    Source code(zip)
  • 3.9.0(Jun 16, 2019)

    New Features

    • Updated hexo-renderer-marked to 1.0.1 (#3571)
    • Updated hexo-fs to 1.0.0 (#3301)
    • TOC: Seek anchor id from parent nodes when target is not available (#3404)
    • tag/include_code now can include ranged code lines (#3393)

    Bug Fixes

    • DisableNunjucks: true should render markdown code block (#3573)
    • Changing source config should generate assets (#3399)

    Refactor

    • Spread function: Hexo built-in plugin blockquote (#3291)
    • ES6 block scoping refactor (#3294)
    • Use spread syntax (#3333)

    Housekeeping

    • #3326 #3324 #3315 #3300 #3329 #3359 #3369 #3368 #3367 #3569

    It is a great release and thanks for hardworking from all contributors. 🤗

    Source code(tar.gz)
    Source code(zip)
  • 3.8.0(Oct 19, 2018)

    New Features

    • Supported absolute config path (#3118)
    • Added command line option --output to write db.json and _multiconfig to different paths (#3122)
    • Added meta generator injection filter (#3129)

    Housekeeping

    • #3124, #3117, #3102, #3276, #3284, #3285, #3290, #3293
    Source code(tar.gz)
    Source code(zip)
  • 3.7.1(Apr 10, 2018)

    Fixes

    • Use old language file selection when no default file exists (#3110)
    • invalidate filters when return undefined (#3090)
    • Post.render callback should be triggered (#3051)

    Housekeeping

    • remove jscs from contribution docs (#3111)
    Source code(tar.gz)
    Source code(zip)
  • 3.7.0(Mar 29, 2018)

    New Features

    • add after_clean filter (#2886)

    Fixes

    • use default language when no language is set (#3069)

    Housekeeping

    • Update dependencies (#3065, #3085, #3084, #3083 )
    Source code(tar.gz)
    Source code(zip)
  • 3.6.0(Feb 28, 2018)

  • 3.5.0(Jan 25, 2018)

    New Features

    • Add --bail option on hexo generate (#2886)
    • Add hljs config to pass extra configuration to hexo-util/highlight (#2901)

    Refactors

    • Replace swig by swig-templates (#2949)
    • Replace deep-assign by _.merge (#2967)

    Fixes

    • housekeeping: #2948, #2946, #2968, #2901
    Source code(tar.gz)
    Source code(zip)
  • 3.4.4(Dec 20, 2017)

  • 3.4.3(Dec 4, 2017)

    Fixes

    • Revert "Limit meta description length to 160 characters" (#2883)
    • post-asset: strip /.html?$/ extensions on permalink (#2881)
    • post.permalink error when config.relative_link is true (#2760)
    • toc: title does not escape html entities (#2875)
    Source code(tar.gz)
    Source code(zip)
  • 3.4.2(Nov 22, 2017)

    Fixes

    • Add defaults to console command generate (#2862)
    • Fix wrong pagination when end_size = 0 (#2858)
    • Fix warning: zone.offset has been deprecated in favor of zone.utcOffset (#2865)
    Source code(tar.gz)
    Source code(zip)
  • 3.4.1(Nov 15, 2017)

    Fixes

    • external_link: rel=external switched to rel=noopener (#2820)
    • remove duplicated root path when using asset_img tag (#2824)
    • limit meta description length to 160 (#2810)
    Source code(tar.gz)
    Source code(zip)
  • 3.4.0(Oct 28, 2017)

    New Features

    • Actually allow plugins to be stored as devDependencies (#2680)
    • Support custom js types on yaml (#2788)

    Fixes

    • Reuse img plugin in asset_img (#2790)

    Miscellaneous

    • Test: Fix broken file stat test on appveyor (#2815)
    Source code(tar.gz)
    Source code(zip)
  • 3.3.9(Sep 5, 2017)

    New Features

    • Hierarchical categories (#2734)
    • Support sel code block line number (#2612)

    Fixes

    • Fix relative_url reference (#2668)
    • Fix: opens external anchor using rel=noopener (#2728)
    • Change plugins loading order (#2736)

    Miscellaneous

    • Test: remove \u180e on excerpt test case (#2729)
    Source code(tar.gz)
    Source code(zip)
  • 3.3.8(Jul 18, 2017)

    New Features

    • Disable Nunjucks when the renderer spcify that (#2593)
    • Ignore files from processing that are not required. (#2631)
    • Include og:locale (#2630)

    Fixes

    • Fix typo. Removed => Remove (#2609)
    • Enable async tags to have more nested async tags (#2602)
    • Update hexo-fs to version 0.2.0 (#2643)

    Miscellaneous

    • Add probot-stale configuration (#2640)
    Source code(tar.gz)
    Source code(zip)
  • 3.3.7(May 23, 2017)

    Hotfix

    • Revert the change #2563 and #2461, as the generating process would fail due to the 3.3.6 release. The 3.3.6 already deprecated and will unpublish after this fix released.

    Sorry for the inconvenience.

    Source code(tar.gz)
    Source code(zip)
  • 3.3.6(May 17, 2017)

    UNPUBLISHED FROM NPM DUE TO CRITICAL ISSUE, PLEASE GET 3.3.7 INSTEAD

    New Features

    • Allow plugins to be stored as devDependencies too. (#2558)

    Fixes

    • Fix parsing error about <code> tag (Issue #2563) (#2568)
    Source code(tar.gz)
    Source code(zip)
  • 3.3.5(Apr 28, 2017)

    Fixes

    • Revert "#2262 Post Sort Fix" Changes (#2526)
    • Allow open_graph generates meta tag "keywords" by page.keywords, page.tags or config.keywords (#2535)
    • Fix multiple config issue #2518 (#2520)
    • Fix the issue "#2538 excerpt and more cam differ from content" (#2539)
    • Fix error when tag.render <code> (#2461)
    • Fix windows line end (version 3.3.1)

    Miscellaneous

    • Convert test js to es6 (#2488)
    Source code(tar.gz)
    Source code(zip)
  • 3.3.0(Apr 3, 2017)

    New features:

    • Access data files from source folder #1969
    • Support for multiple config files (#2210) #2211
    • Support for npm scoped packages as plugins #2022

    Fixes:

    • Fix the wrong share link when the site is in subdirectory #1912
    • Remove results attribute in search form #2001
    • Add support for suffix in list_categorise & list_tags, fix #2021
    • Increased unit test coverage #2205
    • Fix the jsfiddle tag plugin warning under https #2086
    • Fix not generated #2278
    • Post sort fix #2262
    • Fix css and js helper to prevent adding .css/.js when the path already has parameter #2274
    • Fix issue og:url incorrect when site is put under subdirectory #942 #2348
    • Replace new lines by spaces in description #2354

    Miscellaneous:

    • Add ISSUE_TEMPLATE #1779
    • Add .editorconfig to keep fit in different editor
    • Update scaffold.js to use the latest style of yaml
    • Test cases updated
    • Appveyor: add node.js 7 testing environment #2302
    Source code(tar.gz)
    Source code(zip)
Owner
Hexo
A fast, simple & powerful blog framework, powered by Node.js.
Hexo
Static Site Server/Generator with built-in preprocessing

Harp zero-configuration web server with built in pre-processing What is Harp? Harp is a static web server that also serves Jade, Markdown, EJS, Less,

Brock Whitten 4.9k Sep 17, 2021
A static website and blog generator

Nikola, a Static Site and Blog Generator In goes content, out comes a website, ready to deploy. Why Static Websites? Static websites are safer, use fe

Nikola, a static site generator 2.2k Sep 16, 2021
Static site generator that supports Markdown and reST syntax. Powered by Python.

Pelican Pelican is a static site generator, written in Python. Write content in reStructuredText or Markdown using your editor of choice Includes a si

Pelican dev team 10.5k Sep 15, 2021
🔥🔪 A blazing-fast static site generator using Laravel's Blade templating engine

Cleaver ?? A blazing-fast static site generator that uses Laravel's Blade templating engine and leverages JSON or Markdown files for super-extensible

Andrew Schmelyun 162 Sep 22, 2021
The world’s fastest framework for building websites.

A Fast and Flexible Static Site Generator built with love by bep, spf13 and friends in Go. Website | Forum | Documentation | Installation Guide | Cont

GoHugo.io 54.3k Sep 21, 2021
Octopress is an obsessively designed framework for Jekyll blogging. It’s easy to configure and easy to deploy. Sweet huh?

Octopress 3.0 Note: Octopress 3.0 is in development at https://github.com/octopress/octopress What is Octopress? Octopress is Jekyll blogging at its f

Brandon Mathis 9.4k Sep 22, 2021
:globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby

Jekyll Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS,

Jekyll 43.3k Sep 19, 2021
A fast and lightweight site for viewing files

See more screenshots at https://imgur.com/a/15Gq67X A fast and lightweight site for viewing files. Great for documentation, wiki, examples, notes, doc

null 37 Jul 29, 2021
:fork_and_knife: Web applications made easy. Since 2011.

Brunch Web applications made easy. Since 2011. Fast front-end web app build tool with simple declarative config and seamless incremental compilation f

Brunch 6.8k Sep 10, 2021
Java based open source static site/blog generator for developers & designers.

JBake JBake JBake is a Java based open source static site/blog generator for developers. Documentation Full documentation is available on jbake.org. C

JBake 950 Sep 22, 2021
A simple static site generator for photoessays

Exposé A simple static site generator for photoessays Intro If you're into photography, you probably have folders of images and videos like this: Expo

Jack Qiao 4.2k Sep 23, 2021
Hand-crafted frontend development

Middleman - Makes developing websites simple Middleman is a static site generator using all the shortcuts and tools in modern web development. Check o

Middleman 6.8k Sep 16, 2021
The lektor static file content management system

Lektor Lektor is a static website generator. It builds out an entire project from static files into many individual HTML pages and has a built-in admi

Lektor CMS 3.5k Sep 10, 2021
Build and deploy beautiful documentation sites that grow with you

Build and deploy beautiful documentation sites that grow with you Quick-Start • Documentation • Tutorials • Showcase • Support Quick-Start Documentati

Orchid 443 Aug 27, 2021