Connect to any CMS or data source

Use any CMS or data source for content. Pull data from WordPress, Contentful, local Markdown, or any other headless CMS or APIs and access it with GraphQL in your pages and components.

Enjoy a modern development stack

Build websites with modern tools like Vue.js, Webpack and Node.js. Get hot-reloading and access to any packages from npm and write CSS in your favorite preprocessor.

PWA Mobile-first architecture

Only critical HTML, CSS, and JavaScript get loaded first. The next pages are then prefetched so users can click around incredibly fast without page reloads, even when offline.

Get perfect page
speed scores

Gridsome automatically optimises your frontend to load and perform blazing fast. You get code-splitting, image optimisation, lazy-loading, and almost perfect lighthouse scores out-of-the-box.

Build future ready websites

The future of the web is JavaScript, API's, and Markup - the JAMstack. Gridsome uses the power of blazing-fast static site generator or server-side rendering, JavaScript and APIs to create stunning dynamic web experiences.

Ready for global domination

Gridsome sites are usually not connected to any database and can be hosted entirely on a global CDN. It can handle thousands to millions of hits without breaking - and no expensive server costs.

How Gridsome works

Data sources

CMSs

WordPress, Contentful, Drupal, Prismic, GraphCMS, etc.

Files

Markdown, YAML, CSV, JSON, Image folders, etc

APIs

AirTable, Google Spreadsheet, MongoDB, Prisma, etc.

Develop

GraphQL
data layer
Vue.js
Webpack
Hot-reloading
Deploy

Static site generation

Generate static files and deploy to any CDN service. For example, Netlify, Zeit Now, GitHub Pages, GitLab Pages, Surge.sh, Now.sh and many more.

- Or -

Server-side rendering

Deploy Gridsome and the in-memory GraphQL database to any Node.js server.

Connect to any CMS, APIs or local files, like Markdown, and access it from a GraphQL layer. Insert data to any .vue file with only the fields you need.

<template>
  <div>
    <h2>Latest blog posts</h2>
    <ul>
      <li v-for="edge in $page.allWordPressPost.edges" :key="edge.node._id">
        {{ edge.node.title }}
      </li>
    </ul>
  </div>
</template>

<page-query>
query Blog {
  allWordPressPost (limit: 5) {
    edges {
      node {
        _id
        title
      }
    }
  }
}
</page-query>