File-Based Routing

Greenwood supports file-based routing, which means that filenames in the pages/ directory of your project's workspace will be mapped to URLs that you can visit in your browser.

Static Pages

For static content, Greenwood supports HTML and markdown (with a plugin) as page formats.

For example, given the following folder structure:

src/
  pages/
    blog/
      first-post.md
      second-post.md
    index.html
    about.md

The following routes will be accessible from the browser:

SSR

Greenwood supports the intermingling of static pages with dynamic pages. Taking the example above, if we wanted a server rendered route, like a "Products" page, we can simply create a JavaScript file following the same naming convention.

src/
  pages/
    blog/
      first-post.md
      second-post.md
    index.html
    about.md
    products.js

Now the route /products/ will be available and will re-run on each request.

See our section on server-rendering to learn about using SSR in Greenwood.

APIs

Within a dedicated /pages/api/ directory, backend only routes can be created that can be called from the client.

src/
  pages/
    api/
      search.js

Now the route /api/search will be available to return a Web API Response.

See our section on API Routes to learn about using SSR in Greenwood.

SPA

You can opt-out of all file-based routing, like for a Single Page Application (SPA), and go full client-side only mode by just putting an index.html at the root of your workspace. (e.g. no pages/ directory).

Below is an example project structure for a typical SPA:

src/
  components/
    footer.js
    header.js
  routes/
    products.js
    home.js
  styles.css
  index.js
  index.html

SPA based projects do not support layouts or (active) frontmatter.

Not Found

As is a common convention with most hosting providers (opens in a new window) and web servers, you can create a 404 page in your pages/ directory which will be used as the default Not Found page for your site.

src/
  pages/
    404.html