Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.0 roadmap #419

Closed
KyleAMathews opened this issue Sep 3, 2016 · 36 comments
Closed

1.0 roadmap #419

KyleAMathews opened this issue Sep 3, 2016 · 36 comments
Milestone

Comments

@KyleAMathews
Copy link
Contributor

KyleAMathews commented Sep 3, 2016

Hi folks, Gatsby is now 1.25 years old — seems high time we push for a 1.0 :-)

Below is a high-level description for the Gatsby 1.0 goals. Some pieces are already working in the current version of Gatsby and others are in process of being developed. See the current status of work on the Github project page.

Goals for Gatsby 1.0

Make building high-performance websites fun.

High performance by default

Performance is king. Gatsby gives you the fastest possible frontend performance by default, no compromises.

  • Statically render everything.
  • Provide a very fast initial render by loading only the critical HTML, CSS and JS.
  • Prefetch data and code for the remainder of the site so subsequent routes changes render instantly.
  • Use service workers to intelligently cache assets and make site work offline.

I love Facebook engineering's "pit of success" slogan. Incredibly fast websites should be the default not a monumental engineering feat.

Study after study has shown that faster websites improve user experience and improve business metrics.

Anything that prevents Gatsby from generating the fastest possible website is a bug.

Issues

Rich webapp-like feel

  • The line between web apps and web sites has become blurry.
  • Javascript enhancements have gone from a nice-to-have to a must-have for many sites.
  • Adding rich web-app functionality is an awkward tack-on for older web tools.
  • With Gatsby, adding any sort of JS-driven experience is trivial as it uses React.js for its view layer.
  • With React & Webpack you have instant access to 1000s of open source React components and modern Javascript and CSS technologies.

Source all the data

A site's value ultimately comes from its data. Whether that's copy, images, or numerical data — if your site building tool can't get the right data in the right format into your site... then it's not very useful.

I'm working on a new data layer for Gatsby based on GraphQL. Using this and the coming plugin system, you'll be able to add "source plugins" that will let you easily pull in data from any number of sources e.g. a directory of markdown files or an external hosted CMS such as Contentful, DatoCMS, or Prismic.

The GraphQL data layer will let you treat your markdown files as a database.

Each route component can query your site's schema for just the data it needs. This gives you complete flexibility to turn your data into whatever type of web experience you'd like.

Issues

Current status / how to help

Note: the following three sections will be kept up to date as we move towards a 1.0.

Steps on road to 1.0

See the changelog

  • 4/24 — alpha 13 is released https://github.com/gatsbyjs/gatsby/releases/tag/v1.0.0-alpha13
  • 3/9 — Gatsbygram case study https://www.gatsbyjs.org/blog/gatsbygram-case-study/
  • 2/20 — alpha 12 released (CHANGELOG is out of date).
    ...
  • 10/07 — alpha 4 released.
  • 10/05 — alpha 3 released. Extract webpack manifest for improved cachability, add extension API to programatically add components to , upgraded React Hot Loader to 3.0-beta5, bug fixes.
  • 9/21 — alpha 2 released. New pattern for layouts, helper components for rendering styles/scripts in your html.js, runtime validation for user supplying code, started on new plugin system.
  • 9/1 — alpha 1 released. Code/data splitting, PPRL pattern, new GraphQL layer are prototyped and more-or-less working. POC release. Check out Bricolage.io for a live site.

How you can help

Many of you have asked how to help! Here's some ideas.

  • Feedback! Read through this page and other issues and ask questions, point out potential problems, bring up all your website unicorns you hope Gatsby can give you.
  • Try building a site — report back what was 💯 and what's missing or awkward.
  • If you're in bay area — I'd love to pair program a site — let's hang out and build a site together.
  • If you're not in the bay area — I'd love for you to pay me to come fly to wherever you live and code a site together :-)
  • Directly sponsor Gatsby's development — fund me or someone on your team or in the community to work on Gatsby. If you have R&D budget or open source sponsorship budget, anything would be helpful. Code ain't cheap and more people that are working on code, documentation, examples, and tutorials the faster we can move.

Many of the changes in 1.0 are intended to make it easier for people to contribute to Gatsby. The plugin system (and post-1.0, the theme system) will mean you can create and publish additional behaviors for Gatsby through plugins. Let's make the core smaller to increase the surface area where people can contribute.

How you can test

Alpha 13 is out which is kinda usable!

There's four sites I've upgraded to alpha 13 that you can clone and play with.

Clone and then run npm install then run gatsby develop as normal.

Things to try:

  • Poke around Graphiql: after running gatsby develop open http://localhost:8000/graphql to see the query explorer.
  • Modify a pageQuery and then the corresponding view code and see how both data and view hot reload.
  • look around /.intermediate-representation e.g. the child-routes.js and split-child-routes.js files and the outputted queries in the json directory.
@KyleAMathews KyleAMathews added this to the 1.0 milestone Sep 3, 2016
@KyleAMathews KyleAMathews changed the title 1.0 roadmap RFC 1.0 roadmap Sep 7, 2016
@rossthedevigner
Copy link

rossthedevigner commented Sep 14, 2016

@KyleAMathews This roadmap has some really great features lined up. I'm curious though how you'll handle loading critical CSS. Will it be based on routes or just the chrome of the page; header, footer, and basic site structure?

@KyleAMathews
Copy link
Contributor Author

@rossthedevigner thanks! I discuss options for loading critical styles in the issue discussing code/data/styles splitting #431

@chiedo
Copy link

chiedo commented Sep 16, 2016

Hey @KyleAMathews,
I've been reading through issues and am not sure where to post this.

But would it be possible to have something like a .leave-these-files-alone file where we could specify files that shouldn't be put through the Gatsby build process other than copying?

For example, I have a google webmaster tools verification file called blahblah.html and I want that to simply be copied from my pages directory into my public directory in the build process instead of it being converted to a folder named blahblah with an index.html file in it and I want to add a runprettify.js file to my pages directory and have it be simply copied upon build instead of Gatsby trying to process the file resulting in freakouts from window not being available.

I hope what I'm asking is making sense. I know with a lot of these things, doing things the React way solves the issue. But it would be nice to be able to add files or directories to the .leave-these-files-alone file and have those files/directories just copied instead of being processed.

@chiedo
Copy link

chiedo commented Sep 16, 2016

I could implement if you're in favor of the idea and pull request it

@KyleAMathews
Copy link
Contributor Author

@chiedo want to move this to a new issue? I agree this would be a good idea.

@chiedo
Copy link

chiedo commented Sep 17, 2016

Will do @KyleAMathews :) I'll work on it after I finish migrating a WordPress site over to Gatsby.

@stereobooster
Copy link

You are doing super cool project)

As of offline support: jeffposnick/create-react-pwa@starting-point...pwa

@KyleAMathews
Copy link
Contributor Author

Alpha 2 is out! See the updated "how to help" "how to test" sections above. Also added a new CHANGELOG.md.

screen shot 2016-09-21 at 2 31 59 pm

@KyleAMathews
Copy link
Contributor Author

I'll be filling the "Alpha 3" column on our project roadmap in the next day or two — https://github.com/gatsbyjs/gatsby/projects/1

@KyleAMathews
Copy link
Contributor Author

Also click the "Subscribe" button to the right if you want to get future updates :-)

@kdorsel
Copy link

kdorsel commented Oct 16, 2016

I'm having some issues with Alpha5. I've tried both the updated Gravatar and Starter sites. When running gatsby develop I get the following error in both:

[ { path: '/2015-05-28-hi-folks/',
    component: '/Users/kaass/Downloads/gatsby-starter-blog-1.0/page-templates/blog-post.js' },
  { path: '/2015-05-06-my-second-post/',
    component: '/Users/kaass/Downloads/gatsby-starter-blog-1.0/page-templates/blog-post.js' },
  { path: '/2015-05-01-hello-world/',
    component: '/Users/kaass/Downloads/gatsby-starter-blog-1.0/page-templates/blog-post.js' } ]
rewrote JSON for queries for /Users/kaass/Downloads/gatsby-starter-blog-1.0/page-templates/blog-post.js
graphql query time: 8.908ms
rewrote JSON for queries for /Users/kaass/Downloads/gatsby-starter-blog-1.0/pages/index.js
graphql query time: 3.008ms
rewrote JSON for queries for /Users/kaass/Downloads/gatsby-starter-blog-1.0/page-templates/blog-post.js
graphql query time: 7.675ms
rewrote JSON for queries for /Users/kaass/Downloads/gatsby-starter-blog-1.0/pages/index.js
graphql query time: 1.125ms
There were errors with your webpack config:
[1]
resolveLoader.root.1
path.absolute , "1" "/Users/kaass/Downloads/gatsby-starter-blog-1.0/node_modules/gatsby/node_modules" should be an existing absolute path, but I found the following problems: The supplied path does not exist on the file system.

@KyleAMathews
Copy link
Contributor Author

@kdorsel hmmm yeah, I saw that last Friday too — as a workaround, you can just create an empty directory at node_modules/gatsby/node_modules. I added this resolveLoader to get my local environment working while developing Gatsby with npm link but it clearly shouldn't be there in production so let me see if there's another workaround for local dev or just remove it when publishing.

@KyleAMathews
Copy link
Contributor Author

Also, feel free everyone to create 1.0 specific issues! Just prefix the title with [1.0].

@ninjasort
Copy link

Love this direction!

I was working on a static site generator (metalpress) as well that I planned on integrating with React at some point. There's also a CLI which will soon be using yarn, ava, and coverage with codecov. I'd love to see if there's a way to integrate some of the design/features with Gatsby.

Love the idea of using GraphQL and potentially accessibility features that support bundle splitting, offline caching. A CLI would be a great add-on to get up and running quickly. The metalpress-cli is modeled off of the redux-cli which could also be super powerful to blend in and try to have a fully static web app with state and routing built in!

@KyleAMathews
Copy link
Contributor Author

@cameronroe hey! Thanks for the thoughts! Gatsby has a CLI already with a few of the features from redux-cli e.g. it lets you create new sites from "starters" — https://github.com/gatsbyjs/gatsby#gatsby-starters

There's plans afoot to support much more powerful "themes" in the future #447

Would love to make themes/starters/plugins/etc searchable/installable from the CLI see #56 and https://github.com/drjekyllthemes/drjekyll

Would love your and @SpencerCDixon's help here!

@SpencerCDixon
Copy link
Contributor

How exactly can I help? do you want an integration with redux-cli or your own version of it built into gatsby? (btw redux-cli needs a name change it really has nothing to do with redux)

@KyleAMathews
Copy link
Contributor Author

How would an integration with redux-cli work? I think it should "just work" with Gatsby as you can add Redux to Gatsby if you want.

The main way I see you could help is exploring what ways that generators, installers, theme searching, etc. would work with the Gatsby CLI and eventually helping design/build them (if this is of interest to you).

@ninjasort
Copy link

ninjasort commented Nov 19, 2016

I just built a quick demo from the gatsby-starter-default and took a closer look at the gatsby docs. Here are a few thoughts:

  • /pages - All pages go here." <- This is Monolithic. I think there should be some structure to a project. I actually have a pretty nice one with metalpress here. Disregard the liquid templates. The idea is that most projects (using local files) will have some sort of assets (img, sass/less, fonts) along with site-related data/collections (projects, authors, etc.) and text-based files (pages, posts). If there are local files in a gatsby project, ideally it would be organized in a familiar structure. This could also be completely avoided with services like Contentful. If that is the case, there should be some way to manage the content/data that's exposed to the gatsby site in order to assign it to the correct components/etc.
  • Overall, there doesn't seem to be an API to gatsby yet. Thoughts on extending redux to create a high-level wrapper similar to the duck pattern. That way you could group everything (actions, reducers, component, markdown).

@KyleAMathews
Copy link
Contributor Author

Hey folks — just put up an example site built with 1.0.0-alpha11

https://gatsbygram.netlify.com/

source code: https://github.com/gatsbyjs/gatsby/tree/1.0/examples/gatsbygram

@KyleAMathews
Copy link
Contributor Author

This site and the in-progress GatsbyJS website (https://gatsbyjs.netlify.com/) are rebuilt on every push to the 1.0 branch! Nice high-level integration tests. The idea is we'll use every core plugin in one of the sites so regressions will be quickly caught.

@jdsimcoe
Copy link
Contributor

jdsimcoe commented Feb 9, 2017

@KyleAMathews I really hope this is the new GatsbyJS logo:

screen shot 2017-02-09 at 10 09 19 am

I dig the art nouveau vibe. Spot on!

@KyleAMathews
Copy link
Contributor Author

@jdsimcoe yup! @SachaG added it on our logo/branding thread #408 (comment)

Been really happy with it.

re: design feel — we've been going for art deco but art nouveau is close enough! ;-)

@jdsimcoe
Copy link
Contributor

jdsimcoe commented Feb 9, 2017 via email

@KyleAMathews
Copy link
Contributor Author

KyleAMathews commented Feb 9, 2017 via email

@KyleAMathews
Copy link
Contributor Author

Hey folks, just published a blog post on 1.0. A case study on building Gatsbygram. Lots of details on the new stuff in 1.0 — check it out! Please share!

https://www.gatsbyjs.org/blog/gatsbygram-case-study/

@KyleAMathews
Copy link
Contributor Author

This was referenced Apr 12, 2017
@KyleAMathews
Copy link
Contributor Author

I gave a talk last week on Gatsby and what's coming in v1 https://www.youtube.com/watch?v=hbjR5N6IhDU&list=PLHSBYD3ClyvN-eN1X8q7tdbY5K6b5236l&index=3

@KyleAMathews
Copy link
Contributor Author

Alpha 13 is out https://github.com/gatsbyjs/gatsby/releases/tag/v1.0.0-alpha13

@ndelangen
Copy link

Storybooks is using gatsby in our docs: storybooks.js.org

We would like to migrate to 1.0 and help you out by testing, but we could use some help migrating.
Could someone give us some assistance?

@SachaG
Copy link
Contributor

SachaG commented May 21, 2017

@ndelangen maybe me and @shilman could help with this? I haven't tried 1.0 yet but it's on my to-do list anyway :)

@KyleAMathews
Copy link
Contributor Author

@ndelangen @SachaG @shilman awesome! Excited to help you migrate and looking forward to your help. It's past time to get an upgrade guide started so lemme get a quick version of that up to get things going.

Also there's three open source docs sites (that I know of) built with 1.0 that you could look at: Gatsby's website, Expo, and Keystone.

@shilman
Copy link
Contributor

shilman commented May 22, 2017

@KyleAMathews Nice! Let me know when there's a quickie upgrade guide and I'll give it a whirl and rope @SachaG in if he's interested 😸

@KyleAMathews
Copy link
Contributor Author

@shilman yeah didn't quite get to it today :-) will start it first thing in my morning here in London (~9 hours)

@KyleAMathews
Copy link
Contributor Author

@shilman @SachaG @ndelangen PR with upgrade guide is up! #1032

I'll be giving it another look over a bit later than merging it. It's pretty rough and I'm sure is missing things so please point out areas that are confusing and I'll update them post-haste.

@priyaclerisy
Copy link

Hi
I have started a project in Gatsby. I want to pass dynamic parameters in url for a particular page like
localhost:8000/docs/param1, localhost:8000/docs/param2
where docs is a folder in pages folder and param1, param2 are the dynamic parameters.
I want to send these dynamic parameter to a index.md file created and called as default while calling above url. but these urls are not working as according to Gatsby these parameters should be pages in docs folder. So, is there any way to modify routing or sending parameters to a common page in Gatsby.
Please help me.
Thanks

@KyleAMathews
Copy link
Contributor Author

We shipped v1!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests