not really known
Go to file
2021-07-30 14:29:23 -07:00
.github/workflows Change test project for cypress tests. 2021-07-29 12:30:50 -07:00
cypress Comment out test case for now - need to figure out how to get multiple dev servers running for cypress GH actions run. 2021-07-29 12:32:09 -07:00
docs Update 2.0-beta.md 2021-06-14 16:19:41 -07:00
examples Fix order of ToC. 2021-07-30 10:43:32 -07:00
generator Dev server was mixing up requests after serving a compiler error. This makes it resilient to that so it doesn't get into that state. 2021-07-30 09:58:59 -07:00
plugins Get description from first paragraph when there is no description frontmatter field. 2021-07-30 10:43:14 -07:00
review Ignore temporarily unused module in review config. 2021-07-29 14:22:09 -07:00
src Update docs. 2021-07-30 14:29:23 -07:00
tests Update docs and move HTTP body functions out of DataSource and into DataSource.Http. 2021-07-29 15:57:44 -07:00
.all-contributorsrc docs: update .all-contributorsrc [skip ci] 2020-07-19 18:23:51 +00:00
.gitignore Add cypress setup for dev server. 2021-06-04 18:06:39 -07:00
.prettierrc Add prettier config. 2021-07-10 07:53:14 -07:00
CHANGELOG-ELM.md Update CHANGELOG-ELM.md 2020-10-26 13:16:05 -07:00
CHANGELOG-NPM.md Update CHANGELOG-NPM.md 2021-02-16 10:59:35 -08:00
CONTRIBUTING.md Add webpack performance profiling instructions 2020-08-18 14:41:26 -07:00
cypress.json Add cypress config base url. 2021-07-21 13:29:54 -07:00
docs.json Update docs. 2021-07-30 10:16:40 -07:00
elm-tooling.json Update elm-format. 2021-04-14 15:56:10 -07:00
elm.json Remove serverless/on-demand helpers temporarily since they're not going to be in the initial 2.0 release. 2021-07-29 14:13:22 -07:00
jsconfig.json Set up proof of concept for webpack-free build. 2020-10-10 18:07:36 -07:00
LICENSE Add LICENSE file. 2019-09-20 13:58:20 -07:00
netlify.toml Remove duplicate netlify.toml key. 2021-06-03 16:15:19 -07:00
package-lock.json Update cypress. 2021-07-26 08:48:55 -07:00
package.json Change npm start command for cypress tests. 2021-07-29 12:35:55 -07:00
README.md docs: update README.md [skip ci] 2020-07-19 18:23:50 +00:00

elm-pages Netlify Status Build Status npm Elm package

All Contributors

Deploy to Netlify

A statically typed site generator, written with pure Elm.

Getting Started Resources

Key features

SEO made easy

With elm-pages, SEO is as easy as calling a type-safe, high-level Elm API and passing in data from your content's metadata.

The metadata is just Elm data that you define however you want, using a Json Decoder to grab data out of your markdown frontmatter.

import MyMetadata exposing (MyMetadata)

head : BlogMetadata -> List (Head.Tag Pages.PathKey)
head meta =
  Seo.summaryLarge
    { canonicalUrlOverride = Nothing
    , siteName = "elm-pages"
    , image =
      { url = PagesNew.images.icon
      , alt = meta.description
      , dimensions = Nothing
      , mimeType = Nothing
      }
    , description = meta.description
    , locale = Nothing
    , title = meta.title
    }
    |> Seo.article
      { tags = []
      , section = Nothing
      , publishedTime = Just (Date.toIsoString meta.published)
      , modifiedTime = Nothing
      , expirationTime = Nothing
      }

Optimized for performance

elm-pages has a set of features built-in to make sure your page is blazing fast on any device.

  • Automatic page pre-rendering
  • Page content is split up per-page so page content downloads and parses just-in-time
  • Page pre-fetching on link hover

Try out elm-pages, open up Lighthouse, and see for yourself! Or check out https://elm-pages.com (find the source code in the examples/docs/ folder).

Built-in type-safety

elm-pages generates static Elm data for you to make sure you don't have any broken links or images. The SEO API even uses it to make sure you are only pointing to valid images and pages so you have valid metadata!

For example, if you have a content folder like this:

- content
  - blog
    - index.md
    - hello-world.md
    - second-post.md

Then you will be able to access those pages in a type-safe way like this from Elm:

-- this is a generated module
-- it is re-run whenever your `content` folder changes
-- just run `elm-pages develop` to start the watcher
import Pages exposing (pages)
import Pages.PagePath as PagePath exposing (PagePath)


indexPage : PagePath Pages.PathKey
indexPage =
  pages.blog.index


helloPostPage : PagePath Pages.PathKey
helloPostPage =
  pages.blog.helloWorld


secondPost : PagePath Pages.PathKey
secondPost =
  pages.blog.secondPost

Offline Support

elm-pages uses pure elm configuration to setup your progressive web app settings. This includes a "source icon" which is used to generate your favicons and icons for the images following best practices for a progressive web app. The image is even a type-safe ImagePath that guarantees you are using an available image!

manifest : Manifest.Config Pages.PathKey
manifest =
    { backgroundColor = Just Color.white
    , categories = [ Pages.Manifest.Category.education ]
    , displayMode = Manifest.Standalone
    , orientation = Manifest.Portrait
    , description = "elm-pages - A statically typed site generator."
    , iarcRatingId = Nothing
    , name = "elm-pages docs"
    , themeColor = Just Color.white
    , startUrl = pages.index
    , shortName = Just "elm-pages"
    , sourceIcon = images.icon
    }

It will also take care of setting up a service worker which will automatically cache the basic shell for your application's compiled Elm code and HTML container. The page content is currently cached as it is loaded, but in the future there will be an API to choose some pages to "warm up" in the cache.

What's next?

Take a look at the current projects to see the current priorities!

https://github.com/dillonkearns/elm-pages/projects

Contributors

Thanks goes to these wonderful people (emoji key):


Daniel Marín

💻

Steven Vandevelde

💻

Johannes Maas

📓 💻

Wiktor Toporek

💻

Luke Westby

💻

This project follows the all-contributors specification. Contributions of any kind welcome!