π Devkit Vue 3
A Vue 3 / Vuetify 3 / Vite / JWT stack that can be run as a standalone frontend or in a fullstack setup with another repo (ex: Node, Swift).
Designed to be cloned into downstream projects and kept up-to-date via git merge from the stack repo.
| Subject | Informations |
|---|---|
| Architecture | Layered Architecture : everything is separated in layers, and the upper layers are abstractions of the lower ones, that's why every layer should only reference the immediate lower layer (vertical modules architecture) |
| Security | JWT Stateless + CASL abilities (@casl/ability, @casl/vue) - take a look at the Node stack for more information |
| CI | GitHub Actions |
| Linter | ESLint ecmaVersion 10 (2019) |
| Developer | Dependabot - Snyk semantic-release - commitlint - commitizen |
| Dependencies | npm |
| Deliver | Docker & Docker-compose |
- User : classic register / auth
- Organizations : create, manage members, invite, switch context (optional β controlled by backend config)
- CASL Abilities : route guards + navigation + template helpers powered by
@casl/abilityand@casl/vue
- Tasks : list - add - edit - delete
- Mails Subscriptions : add
- Git - Download & Install Git
- Node.js (22.x or 24.x) - Download & Install Node.js
- Recommended: Use nvm for Node version management
git clone https://github.com/pierreb-devkit/Vue.git && cd Vue
npm installnpm run dev # or: npm startRuns dev server with hot-reload at http://localhost:8080/
CORS Note: When connecting to the Node stack, ensure CORS is configured:
WAOS_NODE_cors_origin=['http://localhost:8080'] npm startnpm run build # Build for production
npm run preview # Preview production build locallynpm test # Run tests in watch mode
npm run test:watch # Run tests in watch mode (explicit alias)
npm run test:unit # Run unit tests once (one-shot)
npm run test:coverage # Generate coverage reportTests are organized per module in src/modules/*/tests/
npm run lint # Check code quality
npm run lint:fix # Auto-fix linting issues
npm run format # Format code with Prettiernpm run commit # Commit with commitizen
npm run release -- --first-release # First release (standard-version)
npm run release -- --release-as 1.1.1 # Release specific version
GITHUB_TOKEN=xxx npm run release:auto # Semantic release (CI)Configuration is split between a global file and per-module files, then merged at build time into a single src/config/index.js.
Config files follow the module.env.kind.js naming convention.
src/config/defaults/
development.config.js β infra only (app, port, api, cookie, analytics)
production.config.js β production overrides (optional)
test.config.js β test overrides (optional)
src/modules/<name>/config/
<name>.development.config.js β module defaults (e.g. auth.development.config.js)
| Layer | Source | Example |
|---|---|---|
| 1 | Module defaults | src/modules/*/config/*.development.config.js |
| 2 | Global development defaults | src/config/defaults/development.config.js |
| 3 | Global env overrides | src/config/defaults/<env>.config.js |
| 4 | DEVKIT_VUE_* env vars |
DEVKIT_VUE_app_title='my app' |
Layer 3 is only applied when NODE_ENV is not development.
- Objects are merged recursively β keys from higher layers override lower layers, unmentioned keys are preserved.
- Arrays are replaced entirely β a higher-priority layer defining a 2-item array replaces a 4-item array from a lower layer. Items are never merged by index.
undefinedvalues are skipped β they do not overwrite existing keys.
DEVKIT_VUE_app_title='my app' # sets config.app.title
DEVKIT_VUE_api_port=4000 # sets config.api.portThe merged result is written to src/config/index.js via npm run generateConfig.
When running a downstream project that clones this stack, set NODE_ENV to the project name and create matching config files:
src/config/defaults/
myproject.config.js β global project overrides
The generator discovers files named ${NODE_ENV}.config.js in src/config/defaults/ β module config files are always loaded regardless of environment.
Migration note: if your CI workflows still reference
WAOS_VUE_*environment variables, rename them toDEVKIT_VUE_*.
docker run --rm -p 8080:80 pierreb/vueBuild yourself:
docker build -t pierreb/vue . --build-arg DEVKIT_VUE_api_port=4000With Node stack as API:
docker-compose upThis stack ships preconfigured instruction and prompt files for Claude Code, GitHub Copilot, and OpenAI Codex. Each tool requires its own client installation and authentication β the repository provides the configuration so it works out-of-the-box once the tool is set up.
| Tool | Config |
|---|---|
| Claude Code | .claude/ β skills embedded, works on clone |
| GitHub Copilot | .github/copilot-instructions.md + .github/prompts/ |
| OpenAI Codex | AGENTS.md |
Skills available via /verify, /feature, /create-module, /update-stack, /naming, /pull-request β see .claude/skills/ for details.
git remote add devkit-vue https://github.com/pierreb-devkit/Vue.git
git fetch devkit-vue
git merge devkit-vue/masterCaution: resolve conflicts manually to preserve downstream customizations before pushing.
- Organizations & CASL β see
MIGRATIONS.mdfor step-by-step instructions on migrating downstream projects to the ability-based auth system and optional organizations module.
Open issues and pull requests on GitHub.
This work is based on MEAN.js and more precisely on a fork named Riess.js. The goal is a simple, easy-to-use toolbox to start and maintain fullstack projects across multiple languages (Vue, Node, Swift ...).