gatsby, hexo, and vuepress are all static site generators (SSGs) designed to build fast, secure, and SEO-friendly websites from source content. They transform markdown, data, and components into pre-rendered HTML at build time. gatsby is a React-based SSG with a rich plugin ecosystem and GraphQL data layer, optimized for performance and scalability. hexo is a lightweight, Node.js-based generator focused on speed and simplicity, commonly used for blogs and personal sites. vuepress is built on Vue.js and tailored specifically for technical documentation, offering Markdown-centric authoring with Vue-powered customizations.
All three tools — gatsby, hexo, and vuepress — generate static HTML from source files, but they target different workflows, architectures, and developer preferences. Let’s compare them through real engineering lenses.
gatsby is deeply integrated with React and uses GraphQL as its central data orchestration layer. Every piece of content — whether from Markdown, a CMS, or an API — must be queried via GraphQL in your components.
// gatsby: Querying Markdown data with GraphQL
import { graphql } from "gatsby";
export const query = graphql`
query {
allMarkdownRemark {
edges {
node {
frontmatter { title }
html
}
}
}
}
`;
export default function Blog({ data }) {
return (
<div>
{data.allMarkdownRemark.edges.map(({ node }) => (
<article key={node.frontmatter.title} dangerouslySetInnerHTML={{ __html: node.html }} />
))}
</div>
);
}
hexo uses a template engine (like EJS, Pug, or Swig) and treats Markdown as standalone content. There’s no centralized data layer — instead, you access post metadata directly in templates via global variables like page or site.
<!-- hexo: Using EJS template with post data -->
<% page.posts.each(function(post){ %>
<article>
<h2><%- post.title %></h2>
<%- post.content %>
</article>
<% }) %>
vuepress blends Vue components directly into Markdown files. You write .md files that can include Vue single-file components, and the entire site is rendered using Vue’s reactivity system during build.
<!-- vuepress: Markdown with embedded Vue component -->
# My Docs
Here's a live demo:
<MyComponent :count="5" />
<script setup>
import MyComponent from './components/MyComponent.vue'
</script>
gatsby uses a gatsby-config.js file to declare plugins and options. Its structure is flexible but can become complex as plugins multiply.
// gatsby-config.js
module.exports = {
plugins: [
`gatsby-plugin-react-helmet`,
{
resolve: `gatsby-source-filesystem`,
options: { path: `${__dirname}/src/posts`, name: "posts" }
},
`gatsby-transformer-remark`
]
};
hexo relies on _config.yml (or .yml) for global settings. Themes and plugins are configured separately, often requiring manual file overrides.
# _config.yml
theme: landscape
plugins:
- hexo-generator-feed
- hexo-prism-plugin
vuepress uses a docs/.vuepress/config.js (or .ts) file. It supports TypeScript out of the box and organizes theme customization under .vuepress/theme/.
// docs/.vuepress/config.js
export default {
title: 'My Docs',
themeConfig: {
nav: [{ text: 'Guide', link: '/guide/' }],
sidebar: ['/guide/']
}
}
gatsby offers incremental builds (via Gatsby Cloud or premium features) and image optimization out of the box, but full builds can slow down with large content sets due to GraphQL schema generation.
// gatsby: Optimized image
import { GatsbyImage, getImage } from "gatsby-plugin-image";
function Hero({ data }) {
const image = getImage(data.file);
return <GatsbyImage image={image} alt="Hero" />;
}
hexo is extremely fast for small to medium sites because it avoids heavy transformation layers. However, it lacks built-in asset optimization — you must add plugins manually.
# hexo: Install image optimization plugin
npm install hexo-asset-image --save
vuepress rebuilds only changed pages in dev mode (HMR), but production builds process all Markdown. It doesn’t include image optimization by default, though you can extend the Webpack config.
// .vuepress/config.js: Extend Webpack for image handling
export default {
configureWebpack: {
module: {
rules: [
{
test: /\.(png|jpe?g|gif)$/i,
use: ['file-loader']
}
]
}
}
}
gatsby has the richest plugin ecosystem (e.g., gatsby-source-contentful, gatsby-plugin-mdx). Plugins can hook into every stage of the build lifecycle.
// gatsby: Using MDX for JSX in Markdown
{
resolve: `gatsby-plugin-mdx`,
options: {
extensions: [`.mdx`, `.md`]
}
}
hexo uses npm packages as plugins, but the ecosystem is smaller and less standardized. Many themes require manual tweaking.
// hexo: Custom plugin example (in scripts/)
hexo.extend.filter.register('after_post_render', function(data) {
// Modify post content
});
vuepress allows you to write custom Vue components, theme enhancements, and Webpack extensions. Plugins are less common than in Gatsby, but Vue composables offer powerful logic reuse.
// .vuepress/components/Counter.vue
<template>
<button @click="count++">{{ count }}</button>
</template>
<script setup>
import { ref } from 'vue';
const count = ref(0);
</script>
gatsby: Enterprise marketing sites, hybrid apps needing SSR fallbacks, content hubs pulling from multiple sources (CMS + GitHub + APIs).hexo: Personal blogs, simple project pages, legacy documentation sites where minimal setup is critical.vuepress: Open-source library docs, internal developer portals, any technical guide needing live examples powered by Vue.As of 2024, all three projects are actively maintained:
gatsby continues major releases with focus on performance and cloud integration.hexo receives regular updates, though its core hasn’t changed significantly in years.vuepress v2 (based on Vue 3) is stable and recommended; avoid v1 for new projects.None are deprecated, but evaluate based on team expertise and long-term needs.
| Aspect | gatsby | hexo | vuepress |
|---|---|---|---|
| Framework | React + GraphQL | Template engines (EJS, etc.) | Vue 3 |
| Data Layer | Centralized GraphQL | Global template vars | Vue reactivity + frontmatter |
| Markdown Handling | Via plugins (remark, mdx) | Built-in | First-class + Vue components |
| Build Speed | Slower on large sites | Very fast | Moderate |
| Best For | Complex, data-rich sites | Simple blogs | Technical documentation |
gatsby.hexo gets you there fastest.vuepress gives you the smoothest blend of content and code.Choose not just by features, but by how well the tool aligns with your team’s daily workflow and long-term maintenance strategy.
Choose gatsby when you need a highly extensible, performance-optimized static site with complex data sourcing (e.g., CMS, APIs, databases), dynamic routing, or advanced features like image optimization and incremental builds. It’s ideal for marketing sites, e-commerce landing pages, and content-rich applications where developer experience and ecosystem maturity matter. Be prepared to manage a heavier build pipeline and learn GraphQL for data queries.
Choose hexo when you prioritize build speed, minimal configuration, and simplicity—especially for personal blogs, portfolios, or small documentation sites. It’s well-suited for developers who want a straightforward Markdown-to-HTML workflow without heavy dependencies or complex tooling. Avoid it if you need deep interactivity, component-driven layouts, or integration with modern frontend frameworks beyond basic templating.
Choose vuepress when building technical documentation that requires tight integration between Markdown content and Vue components—for example, live code demos, interactive API references, or theming with Vue single-file components. It shines in developer-focused projects where the team already uses Vue and values a clean, opinionated structure with built-in features like search, sidebar navigation, and versioning. Not ideal for non-documentation use cases like blogs or marketing sites.
The future of web development is here.
Gatsby is a free and open source framework based on React that helps developers build blazing fast websites and apps.
It combines the control and scalability of dynamically rendered sites with the speed of static-site generation, creating a whole new web of possibilities.
Gatsby helps professional developers efficiently create maintainable, highly-performant, content-rich websites.
Load Data From Anywhere. Gatsby pulls in data from any data source, whether it’s Markdown files, a headless CMS like Contentful or WordPress, or a REST or GraphQL API. Use source plugins to load your data, then develop using Gatsby’s uniform GraphQL interface.
Go Beyond Static Websites. Get all the benefits of static websites with none of the limitations. Gatsby sites are fully functional React apps, so you can create high-quality, dynamic web apps, from blogs to e-commerce sites to user dashboards.
Choose your Rendering Options. You can choose alternative rendering options, namely Deferred Static Generation (DSG) and Server-Side Rendering (SSR), in addition to Static Site Generation (SSG) — on a per-page basis. This type of granular control allows you to optimize for performance and productivity without sacrificing one for the other.
Performance Is Baked In. Ace your performance audits by default. Gatsby automates code splitting, image optimization, inlining critical styles, lazy-loading, prefetching resources, and more to ensure your site is fast — no manual tuning required.
Use a Modern Stack for Every Site. No matter where the data comes from, Gatsby sites are built using React and GraphQL. Build a uniform workflow for you and your team, regardless of whether the data is coming from the same backend.
Host at Scale for Pennies. Gatsby sites don’t require servers, so you can host your entire site on a CDN for a fraction of the cost of a server-rendered site. Many Gatsby sites can be hosted entirely free on Gatsby Cloud and other similar services.
Use Gatsby's Centralized Data Layer Everywhere. With Gatsby's Valhalla Content Hub you can bring Gatsby's data layer to any project. Making it accessible via a unified GraphQL API for building content sites, eCommerce platforms, and both native and web applications.
Learn how to use Gatsby for your next project.
Click the link below to quickly try the workflow of developing, building, and deploying websites with Gatsby and Gatsby Cloud.
At the end of this process, you'll have
You can get a new Gatsby site up and running on your local dev environment in 5 minutes with these four steps:
Initialize a new project.
npm init gatsby
Give it the name "My Gatsby Site".
Start the site in develop mode.
Next, move into your new site’s directory and start it up:
cd my-gatsby-site/
npm run develop
Open the source code and start editing!
Your site is now running at http://localhost:8000. Open the my-gatsby-site directory in your code editor of choice and edit src/pages/index.js. Save your changes, and the browser will update in real time!
At this point, you’ve got a fully functional Gatsby website. For additional information on how you can customize your Gatsby site, see our plugins and the official tutorial.
Full documentation for Gatsby lives on the website.
For most developers, we recommend starting with our in-depth tutorial for creating a site with Gatsby. It starts with zero assumptions about your level of ability and walks through every step of the process.
To dive straight into code samples head to our documentation. In particular, check out the “How-to Guides”, “Reference”, and “Conceptual Guides” sections in the sidebar.
We welcome suggestions for improving our docs. See the “how to contribute” documentation for more details.
Start Learning Gatsby: Follow the Tutorial · Read the Docs
Wondering what we've shipped recently? Check out our release notes for key highlights, performance improvements, new features, and notable bugfixes.
Also, read our documentation on version support to understand our plans for each version of Gatsby.
Already have a Gatsby site? These handy guides will help you add the improvements of Gatsby v5 to your site without starting from scratch!
Gatsby is dedicated to building a welcoming, diverse, safe community. We expect everyone participating in the Gatsby community to abide by our Code of Conduct. Please read it. Please follow it. In the Gatsby community, we work hard to build each other up and create amazing things together. 💪💜
Whether you're helping us fix bugs, improve the docs, or spread the word, we'd love to have you as part of the Gatsby community!
Check out our Contributing Guide for ideas on contributing and setup steps for getting our repositories up and running on your local machine.
This repository is a monorepo managed using Lerna. This means there are multiple packages managed in this codebase, even though we publish them to NPM as separate packages.
Licensed under the MIT License.
Thanks go out to all our many contributors creating plugins, starters, videos, and blog posts. And a special appreciation for our community members helping with issues and PRs, or answering questions on GitHub Discussions.
A big part of what makes Gatsby great is each and every one of you in the community. Your contributions enrich the Gatsby experience and make it better every day.