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 support HTML and markdown 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

Not Found

As is a common convention with most hosting providers 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