Log in to GraphQL EditorGet started
GraphQL Static Site Generator (SSG)
Tomek

Tomek Poniatowicz

5/20/2021

GraphQL Static Site Generator (SSG)

Since its release, GraphQL has become increasingly popular and is being used by an ever growing number of development teams. Why? It's simple, GraphQL makes it easy to describe complex data relationships and can be utilized with any programming language. The growing popularity has generated a supply of tools to harness the power of GraphQL in many aspects of modern software development. One of the exmaples is GraphQL Static Site Generator

GraphQL SSG

GraphQL Static Site Generator (GraphQL SSG) is a simple bundler for GraphQL-based website using ES Modules. What makes it unique is that it uses browser instead of Node for bundling.

How to use it

Install GraphQL SSG globally using npm i -g graphql-ssg then initilaize the new project with graphql-ssg --init. which would create graphql-ssg.json in current directory. The package.json is not required but if you need type completions feel free to add one.

Next you need to setup a congfig which will hold:

- a valid schema url

- IN and OUT direcrotries

{
  "url": "https://graphql-pokemon2.vercel.app/",
  "in": "./pages",
  "out": "./out",
  "websocketPort": 1414,
  "port": 8080
}

Config file is injected. It is available only inside export default and export const head function to prevent leaking of secrets.

const graphQLClient = Chain(ssg.config.HOST, {
  headers: {
    Authorization: `Bearer ${ssg.config.TOKEN}`,
  },
});

How it works

String returned by export default is generated by SSG phase. If you want to have your preffered syntax coloring you will need to install the right LitElement extenstion for your IDE.

import { html } from './ssg/basic.js';
export default () => {
  return html`
    <div>Hello world</div>
  `;
};

Built-in code syntax functions

GraphQL SSG comes with generated library storing injected usefull code syntax fuctions like:

Chain

Function which is a soft of equivalent to fetch in GraphQL, where you need to provide host and/or options to receive fully autocompleted client for schema url defined in your config:

import { Chain } from './ssg/index.js';
const graphQLClient = Chain(ssg.config.host);

const response = await graphQLClient.query({ people: true });

head

import { html } from './ssg/basic.js';
export const head = () => html`<title>Hello world!</div>`;

html

A function that provideds a basic syntax coloring:

import { html } from './ssg/basic.js';
const ADiv = html`
  <div>Hello world</div>
`;

md

md is a function that uses remarkable renderer to render your markdown:

import { md } from './ssg/md.js';
const MarkdownContent = md`


# H1

Some nice text

## H2

Even nicet text

`;

Still an early Alpha version

It's an ealry Alpha version so feedback and suggestions from the community are more than welcome! If you find a bug, have a feature request, or just want to contribute to this awesome project, feel free to an open issue and don't foget to leave a GitHub star :)

Check out our other blogposts

State of GraphQL 2022 survey
Michał Tyszkiewicz
Michał Tyszkiewicz
State of GraphQL 2022 survey
6 min read
about 2 years ago
Open-source GraphQL framework for Spring Boot by Netflix
Tomek Poniatowicz
Tomek Poniatowicz
Open-source GraphQL framework for Spring Boot by Netflix
3 min read
over 3 years ago
What's new in Node.js v14
Tomek Poniatowicz
Tomek Poniatowicz
What's new in Node.js v14
3 min read
over 4 years ago

Ready for take-off?

Elevate your work with our editor that combines world-class visual graph, documentation and API console

Get Started with GraphQL Editor