Covers the complete setup process from rails new to deployment in step-by-step documentation
vuejs-rails-starterkit — Vue Starter Template
By jetthoughts
A starter template based on Rails 6 and Vue.js 2 that provides step-by-step instructions for building a hybrid application foundation with Webpacker, Turbolinks, PWA, AdminLTE, and Jest.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Integrates Rails 6, Vue.js 2, Webpacker 5, and Webpack 4 for frontend and backend
Includes example configurations for Webpacker SplitChunks and lazy loading
Provides Jest + Vue Test Utils component unit testing and coverage configuration
Preconfigures GitHub, Heroku, CircleCI, Codecov, Dependabot, and tools such as Rubocop and ESLint
Includes steps for integrating PWA, Turbolinks, and the AdminLTE theme
Template Details
This is a GitHub template repository for building a Rails 6 + Vue.js 2 project from scratch. The README documents the complete setup process in steps: first generate a Rails project with Vue using rails new, then configure the development environment, add a sample page hosting Vue components, enable Webpacker's SplitChunks assets, integrate Jest for component unit testing, deploy to Heroku, configure a basic PWA, enable Turbolinks, install the AdminLTE interface theme, and finally set up continuous integration and static code analysis.
The technology stack covered by the template includes: Rails 6, Vue.js 2 (with Vue Test Utils), Webpacker 5 and Webpack 4, Bootstrap 4 and the AdminLTE theme, and Babel 7. System dependencies are Ruby 3.0, Node.js 14, Yarn, PostgreSQL 12, and the Heroku CLI. The repository also includes preconfigured settings for GitHub, Heroku (including Review Apps), CircleCI, Codecov/Simplecov, Dependabot, and static analysis tools such as Pronto, Rubocop, ESLint, and EditorConfig.
The README explicitly states that the Rails 5.2 version is on the rails-5-latest branch, while the current main branch targets Rails 6. The repository description positions it as a starter kit for developing hybrid mobile applications, but the README body mainly covers web-side setup steps. The code is MIT licensed and can be used, modified, commercialized, and distributed for free, provided the copyright and license notice are retained when distributing. Third-party assets such as demo images, fonts, and icons, as well as external services like domains, hosting, and databases, require separate verification of their licenses or fees.
Is it right for your project?
Use Cases
- Starting a new project that combines Rails and Vue from scratch
- Referencing engineering configurations for Webpacker SplitChunks and asset tag usage
- Adding Jest unit tests and coverage for Vue components
- Planning to deploy a Rails + Vue application to Heroku and integrate CI
Suitable For
- Development teams familiar with Ruby on Rails and preparing to introduce Vue
- Those needing a reusable Rails + Vue project scaffold as a starting point
- Developers looking for reference steps to integrate PWA, Turbolinks, and AdminLTE
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
System dependencies are Ruby 3.0, Node.js 14, Yarn, PostgreSQL 12, and the Heroku CLI
- 2
Follow the README steps in order; Rails 5.2 users must switch to the rails-5-latest branch
- 3
Before deploying to Heroku, complete production asset precompilation verification
- 4
Licenses and fees for third-party assets and external services (domains, hosting, databases, etc.) must be confirmed separately
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license from the public repository; the free scope applies to that version's code and does not imply that external services or third-party assets are free.
Must comply with when using
- The code of this version may be used, modified, commercialized, and distributed for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The main branch targets Rails 6; for the Rails 5.2 version, you must switch to the rails-5-latest branch and cannot directly use the current main branch code.
- Deployment steps depend on the Heroku CLI and a Heroku account; operations such as creating an app and adding a Postgres add-on must be done on the Heroku platform and may incur external service fees.
- The deployment example uses the Heroku Postgres add-on (hobby-dev tier), which must be provisioned on Heroku and is an external hosting/database dependency.
- The PWA step depends on the serviceworker-rails gem imported directly from GitHub, requiring access to that external repository; its own license and maintenance status must be confirmed separately.
- Frontend dependencies such as the AdminLTE theme, Bootstrap, jQuery, and Font Awesome are third-party packages; their respective licenses and commercial terms must be checked separately and are not granted together with this project's MIT license.
- Layout code must be obtained from the AdminLTE official website; the license and usage conditions for that theme and its assets are determined by the AdminLTE project and must be confirmed separately.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
For Rails 5.2, please check https://github.com/jetthoughts/vuejs-rails-starterkit/tree/rails-5-latest
Original README
Requirements: [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install).
Original README
heroku addons:create heroku-postgresql:hobby-dev
Original README
gem 'serviceworker-rails', github: 'rossta/serviceworker-rails'
Original README
yarn add admin-lte bootstrap jquery popover @fortawesome/fontawesome-free
Original README
https://github.com/jetthoughts/vuejs-rails-starterkit/blob/master/LICENSEhttps://github.com/jetthoughts/vuejs-rails-starterkit/blob/master/README.mdCode for layout you can find [here](https://adminlte.io/themes/v3/starter.html).
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-01. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 81 / 100
- Technologies
- Vue · Rails
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2023-01-19
- Screenshot last checked
- 2026-10-01
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Vue as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: 93530faeedfda922a571c6d48eb41e9eeef724eaf08b48e0a5e67b2d7f7250f1
2026-10-01T02:54:35.720Z
Source file / repository# Rails 6 + Vue.js 2 Starter Kit GitHub Template.
**NOTE:** For Rails 5.2, please check
https://github.com/jetthoughts/vuejs-rails-starterkit/tree/rails-5-latest
[](https://heroku.com/deploy)

[](https://circleci.com/gh/jetthoughts/vuejs-rails-starterkit)
[](https://codecov.io/gh/jetthoughts/vuejs-rails-starterkit)
A quick and easy way to setup Rails + PWA + Turbolinks + Webpacker + Bootstrap with AdminLTE theme + Vue + Jest.
If your team is considering or has already decided to use Vue, this is the right for you.
As an additional review of how to setup PWA, Turbolinks, CSS frameworks, Storybook.
### Preview of all steps
[](https://asciinema.org/a/ArqvGrc6JK6pKzlRTMV3Jotwr)
### Expected Final Screen

## Table of Contents
- [Step 1. Generate Ruby on Rails Project with Vue.js](#generate-ruby-on-rails-project-with-vuejs-no-turbolinks-included-on-this-stage)
- [Step 2. Setup development environment](#setup-development-environment)
- [Step 3. Add sample page to host Vue.js component](#add-sample-page-to-host-vuejs-component)
- [Step 4. Use Webpacker assets in the application](#use-webpacker-assets-in-the-application)
- [Step 5. Install Jest for Component Unit Tests](#install-jest-for-component-unit-tests)
- [Step 6. Setup Heroku and Deploy](#setup-heroku-and-deploy)
- [Step 7. Setup basic PWA](#setup-basic-pwa)
- [Step 8. Setup Turbolinks](#setup-turbolinks)
- [Step 9. Installs UI Kit - AdminLTE](#setup-adminlte)
- [Step 10. Configure continuous integration and other services for static code
analysis](#configure-continuous-integration-and-other-services-for-static-code-analysis)
#### Things you may want to cover:
#### Features:
* Optimized for peformance Webpacker with Vue.js: Lazy Load, Split Chunks
* Turbolinks
* PWA
* Backend Unit and System Tests with coverage
* Vue.js Unit Tests with coverage
* Deployable to Heroku
* Pre-setup for services:
- GitHub
- Heroku (Heroku Reviews Apps)
- CircleCI
- Codecov and Simplecov
- Dependabot
* Static Code Analyzers:
- Pronto
- Rubocop
- ESLint
- EditorConfig
#### Dependencies:
* [Ruby on Rails](https://rubyonrails.org/) version 6
* [Vue.js](https://vuejs.org) version 2 with [Vue Test Utils](https://vue-test-utils.vuejs.org/)
* [Webpacker](https://github.com/rails/webpacker) 5 with [Webpack](https://webpack.js.org/) 4
* [Bootstrap](https://getbootstrap.com/) 4 with [AdminLTE Template](https://adminlte.io/)
* [Babel](https://babeljs.io/) 7
#### System Dependencies:
* [Ruby](https://www.ruby-lang.org/en/) 3.0
* [Node.js](https://nodejs.org/en/) 14
* [Yarn](https://yarnpkg.com/en/)
* [PostgreSQL](https://www.postgresql.org/) 12
* [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)
## Generate Ruby on Rails Project with Vue.js (No Turbolinks included on this stage)
```bash
gem install rails
rails new vuejs-rails-starterkit --force --database=postgresql \
--skip-action-mailer --skip-action-cable --skip-sprockets --skip-turbolinks \
--webpack=vue
cd ./vuejs-rails-starterkit
bin/rails db:create db:migrate
```
This generates Rails project with:
- Vue component in `app/javascript/app.vue`
- Example entry file `app/javascript/packs/hello_vue.js`
### Setup development environment:
1. Uncomment `system('bin/yarn')` in `bin/setup` and `bin/update` to
install new node modules.
2. Install dependencies:
```bash
bin/setup
```
3. Enable *content_security_policy* in the `config/initializers/content_security_policy.rb`
with the following configuration:
```ruby
Rails.application.config.content_security_policy do |policy|
policy.script_src :self, :https
if Rails.env.development? || Rails.env.test?
policy.connect_src :self, :https, 'http://localhost:3035', 'ws://localhost:3035'
end
end
```
4. Verify that we have not broken anything
```bash
bin/webpack
bin/rails runner "exit"
```
### Add sample page to host Vue.js component
1. Generate controller and view:
```bash
bin/rails generate controller Landing index --no-javascripts --no-stylesheets --no-helper --no-assets --no-fixture
```
2. Update `app/views/landing/index.html.erb` to:
```erb
<h1>Landing#index</h1>
<p>Find me in app/views/landing/index.html.erb</p>
<div id='hello_vue_app'></div>
```
3. Change `app/javascript/packs/hello_vue.js` to:
```javascript
import Vue from 'vue'
import App from '../app.vue'
document.addEventListener('DOMContentLoaded', () => {
const app = new Vue({
render: h => h(App),
el: '#hello_vue_app'
}).$mount()
})
```
4. Setup a sample page as a home page by updating `config/routes.rb`:
```ruby
root 'landing#index'
```
### Use Webpacker assets in the application
1. Enable Webpacker with `SplitChunks`:
* Enable `SplitChunks` with default config by adding to `config/webpack/environment.js`:
```js
environment.splitChunks()
```
* Enable Webpacker by updating `app/views/layouts/application.html.erb`:
Change:
```erb
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_pack_tag 'application' %>
```
to:
```erb
<%= stylesheet_packs_with_chunks_tag 'application', 'hello_vue', media: 'all' %>
<%= javascript_packs_with_chunks_tag 'application', 'hello_vue' %>
```
2. Verify locally that vue.js is working and `SplitChunks` is enabled
```bash
bin/rails s
open "http://localhost:3000/"
```
Expect to see

The `javascript_packs_with_chunks_tag` and `stylesheet_packs_with_chunks_tag` helpers split assets
into small size chunks and create html tags for them:
```html
<script src="/packs/js/runtime~hello_vue-818eba5af0151079cb6c.js"></script>
<script src="/packs/js/1-7b962b4481d6abff6c2b.chunk.js"></script>
<script src="/packs/js/hello_vue-bc0218ac204eff3ff742.chunk.js"></script>
```
## Install Jest for Component Unit Tests
1. Add Jest with required dependencies
```bash
yarn add --dev jest @vue/test-utils vue-jest babel-core@^7.0.0-bridge.0 babel-jest jest-serializer-vue
```
2. Configure Jest in `package.json` (including the Coverage enabling):
```json
"scripts": {
"test": "jest"
},
"jest": {
"verbose": true,
"testURL": "http://localhost/",
"roots": [
"test/javascript"
],
"moduleDirectories": [
"node_modules",
"app/javascript"
],
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/app/javascript/$1"
},
"moduleFileExtensions": [
"js",
"json",
"vue"
],
"transform": {
".+\\.js$": "babel-jest",
".+\\.vue$": "vue-jest"
},
"testPathIgnorePatterns": [
"<rootDir>/config/webpack/"
],
"snapshotSerializers": [
"jest-serializer-vue"
],
"collectCoverage": true,
"collectCoverageFrom": [
"**/*.{js,vue}",
"!**/node_modules/**"
]
},
```
3. Add `test/javascript/test.test.js`:
```js
test('there is no I in team', () => {
expect('team').not.toMatch(/I/);
});
```
4. Verify installation
```bash
yarn test
```
Expect to see 
6. Add component test for App in `test/javascript/app.test.js`:
```js
import { mount, shallowMount } from '@vue/test-utils'
import App from 'app';
describe('App', () => {
test('is a Vue instance', () => {
const wrapper = mount(App)
expect(wrapper.vm).toBeTruthy()
})
test('matches snapshot', () => {
const wrapper = shallowMount(App)
expect(wrapper.html()).toMatchSnapshot()
})
});
```
7. Verify by
```bash
yarn test
```
You should see all tests passed
## Setup Heroku and Deploy
1. Confirm compilation is working:
```bash
RAILS_ENV=production \
NODE_ENV=production \
RAILS_SERVE_STATIC_FILES=true \
SECRET_KEY_BASE="7aa51097e982f34be02abe83528c3308768dff3837b405e0907028c750d22d067367fb79e2b223e3f223fea50ddf2d5dc9b3c933cf5bc8c7f2a3d3d75f73c4a7" \
bin/rails assets:precompile
```
2. Create a Heroku App and provision it
Requirements: [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install).
**NOTE:** Do not forget to commit all your changes: `git add . && git
commit -m "Generates Ruby on Rails application with Vue.js onboard"`
```bash
heroku create
heroku addons:create heroku-postgresql:hobby-dev
heroku buildpacks:add heroku/ruby
heroku config:set RAILS_ENV=production NODE_ENV=production YARN_PRODUCTION=true MALLOC_ARENA_MAX=2
```
3. Setup Node.js for Heroku
```bash
heroku buildpacks:add --index 1 heroku/nodejs
```
Use the `engines` section of the `package.json` to specify the version of Node.js to use on Heroku.
Drop the ‘v’ to save only the version number:
```json
{
"engines": {
"node": ">= 12.x"
}
}
```
4. Deploy and verify that vue.js is working on Heroku
```bash
git push heroku master
heroku apps:open
```
## Setup basic PWA
1. Install `serviceworker-rails` by adding into `Gemfile`:
```ruby
gem 'serviceworker-rails', github: 'rossta/serviceworker-rails'
```
2. Following the guide: https://github.com/rossta/serviceworker-rails
you should get something like: https://gist.github.com/pftg/786b147eff85a6fc98bd8dc1c3c9778e
3. There'll be an issue with service worker registration on the page saying:
`Uncaught ReferenceError: window is not defined` and
`Failed to register a ServiceWorker...`.
To fix that add following line to `config/webpack/environment.js`
as suggested [here](https://github.com/webpack/webpack/issues/6642#issuecomment-371087342):
```javascript
environment.config.set('output.globalObject', 'this')
```
## Setup Turbolinks
1. Add node dependencies
```bash
yarn add vue-turbolinks turbolinks
```
2. Load Turbolinks by adding to
`app/javascript/initializers/turbolinks.js`:
```javascript
import Turbolinks from 'turbolinks'
Turbolinks.start()
```
3. Add to `app/javascript/packs/application.js`:
```javascript
import 'initializers/turbolinks.js'
```
4. Change `app/javascript/packs/hello_vue.js` to:
```javascript
import TurbolinksAdapter from 'vue-turbolinks'
import Vue from 'vue'
import App from '../app.vue'
Vue.use(TurbolinksAdapter)
document.addEventListener('turbolinks:load', () => {
const app = new Vue({
render: h => h(App),
el: '#hello_vue_app'
}).$mount()
})
```
5. Update layout `app/views/layouts/application.html.erb`:
```erb
<%= javascript_packs_with_chunks_tag 'hello_vue', 'application', 'data-turbolinks-track': 'reload' %>
```
6. Run tests and server to verify:
```bash
bin/rails t
bin/rails s
```
## Setup AdminLTE
1. Add node dependencies
```bash
yarn add admin-lte bootstrap jquery popover @fortawesome/fontawesome-free
```
2. Add `app/javascript/initializers/adminlte.js` initializer:
```javascript
import '../assets/adminlte.scss'
import('./plugins') // () needed for async loading
```
3. Add `app/javascript/initializers/plugins.js` file with plugin importing:
```javascript
import '@fortawesome/fontawesome-free'
import 'jquery/src/jquery.js'
import 'popper.js'
import 'bootstrap'
import 'admin-lte/build/js/AdminLTE'
```
4. Import admin lte initializer in `app/javascript/packs/application.js` pack:
```javascript
import 'initializers/adminlte'
```
5. Next step is updating main layout `app/views/layouts/application.html.erb`. Code for layout you can find [here](https://adminlte.io/themes/v3/starter.html).
Also don't forget to add `yield` in div with `content` class:
```html
<div class="content">
<%= yield %>
</div>
```
6. Add styles to `app/javascript/assets/adminlte.scss`:
```css
$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import '~@fortawesome/fontawesome-free/scss/fontawesome';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/brands';
@import "~admin-lte/build/scss/adminlte";
```
7. Run tests and server to verify:
```bash
yarn test
bin/rails test
bin/rails test:system
bin/rails s
```
Expect to see:

## Configure continuous integration and other services for static code analysis.
To be able to automatically analyze the quality of the code, let's install the [jt_tools](https://github.com/jetthoughts/jt_tools) gem.
1. Add this line to your application's Gemfile:
```ruby
gem 'jt_tools', groups: [:development]
```
2. Next step is running bundle install and generator:
```bash
bin/bundle
bin/rails jt_tools:install
```
3. Run linters to verify
```bash
bin/lint-pr
```
You should see a list of the linters that were running.
Explore similar templates
Compare previews and descriptions within the same stack and category.

vitesse
Vitesse is an opinionated Vite + Vue 3 starter template maintained by antfu-collective, offering file-based routing, component and API auto-import, Pinia, UnoCSS, PWA, i18n, Markdown, vite-ssg, TypeScript, Vitest, and Cypress.
Vue · Starter

vitesse-webext
vitesse-webext is a Vite-powered WebExtension starter template using Vue 3 and TypeScript, with built-in popup, options, and content script examples. It targets Chrome and Firefox, integrates webextension-polyfill, webext-bridge, UnoCSS, VueUse, and unplugin tools, and supports hot reload during development.
Vue · Starter

laravel-vue-spa
A Laravel + Vue SPA starter kit for quickly building a decoupled web application skeleton. It includes login, registration, email verification, and password reset flows, uses JWT for authentication, and integrates Laravel Socialite with GitHub as an example provider.
Vue · Starter

vue3-h5-template
A mobile H5 starter template built on Vue3, Vite, and Vant4, with TypeScript by default and JavaScript and i18n branches.
Vue · Starter

tov-template
tov-template is an MIT-licensed Vite + Vue 3 + TypeScript starter maintained by dishait. It bundles file-based routing, layouts, Mock, auto-imports, UnoCSS, Pinia, vue-request, Vitest, i18n, dark mode, Dockerfile, and engineering scripts.
Vue · Starter

shadcn-vue-landing-page
A Vue + Shadcn-Vue + TypeScript + Tailwind landing page template with sections like Navbar, Hero, Pricing, FAQ, Team, and Contact, plus dark mode and responsive layout.
Vue · Corporate Website
