Nuxt is a progressive framework based on Vue.js to create modern web applications. It is based on Vue.js official libraries (vue, vue-router and vuex) and powerful development tools (webpack, Babel and PostCSS). Nuxt's goal is to make web development powerful and performant with a great developer experience in mind.
What is NuxtJS?
Nuxt is a framework designed to give you a strong architecture following official Vue guidelines. Incrementally adoptable, it can be used to create from static landing pages to complex enterprise ready web applications.
Versatile by nature, it supports different targets (server, serverless or static) and server side rendering is switchable.
Extendable with a strong module ecosystem, it makes it easy to connect your REST or GraphQL endpoints, favorite CMS, CSS frameworks and more. PWA and AMP support is only a module away from your Nuxt project.
NuxtJS is the backbone of your Vue.js project, giving structure to build your project with confidence while being flexible.
- Write Vue Files (
- Automatic Code Splitting
- Server-Side Rendering
- Powerful Routing System with Asynchronous Data
- Static File Serving
- ES2015+ Transpilation
- Bundling and minifying of your JS & CSS
- Hot module replacement in Development
- Pre-processor: Sass, Less, Stylus, etc.
- HTTP/2 push headers ready
- Extending with Modular architecture
How it Works
Nuxt.js includes the following to create a rich web application development:
- Vue 2
- Vue Router
- Vuex (included only when using the store option)
- Vue Server Renderer (excluded when using
- Vue Meta
A total of only 57kB min+gzip (60kB with Vuex).
This schema shows what is called by Nuxt.js when the server is called or when the user navigates through the app via
Server Rendered (Universal SSR)
You can use Nuxt.js as a framework to handle all the UI rendering of your project.
nuxt, it will start a development server with hot-reloading and Vue Server Renderer configured to automatically server-render your application.
Single Page Applications (SPA)
If, for any reason, you prefer not to use server side rendering or need static hosting for your applications, you can simply use SPA mode using
nuxt --spa. In combination with the generate feature, it gives you a powerful SPA deployment mechanism without the need to use a Node.js runtime or any special server handling.
Take a look at the commands to learn more about usage.
If you already have a server, you can plug in Nuxt.js by using it as a middleware. There is no restriction at all when using Nuxt.js for developing your Universal Web Applications. See the Using Nuxt.js Programmatically guide.
Static Generated (Pre Rendering)
The big innovation of Nuxt.js comes with the
nuxt generate command.
When building your application, it will generate the HTML for every one of your routes and store it in a file.
Static Site Generation with Nuxt.js
Learn how to generate static websites (pre rendering) to improve both performance and SEO while eliminating hosting costs.
Video courses made by VueSchool to support Nuxt.js development.
For example, the following file structure:
-| pages/ ----| about.vue ----| index.vue
-| dist/ ----| about/ ------| index.html ----| index.html
With this, you can host your generated web application on any static hosting!
We don't want to manually generate the application every time we update the docs repository, it triggers a hook to Netlify which:
- Clones the nuxtjs.org repository
- Installs the dependencies via
npm run generate
- Serves the
We now have an automated Static Generated Web Application :)
We can go further by thinking of an e-commerce web application made with
nuxt generate and hosted on a CDN. Every time a product is out of stock or back in stock, we regenerate the web app. But if the user navigates through the web app in the meantime, it will be up to date thanks to the API calls made to the e-commerce API. No need to have multiple instances of a server + a cache any more!
See How to deploy on Netlify? for more details on how to deploy to Netlify.
Caught a mistake or want to contribute to the documentation? Edit this page on GitHub!