https://github.com/hieuhani/nuxt-multi-tenancy
Nuxt Multi Tenancy Module - multi-tenancy by sub domain for Nuxt application
https://github.com/hieuhani/nuxt-multi-tenancy
multi-tenancy nitro nuxt-module nuxt3
Last synced: 2 months ago
JSON representation
Nuxt Multi Tenancy Module - multi-tenancy by sub domain for Nuxt application
- Host: GitHub
- URL: https://github.com/hieuhani/nuxt-multi-tenancy
- Owner: hieuhani
- License: mit
- Created: 2020-08-22T03:04:11.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-12-31T03:18:01.000Z (5 months ago)
- Last Synced: 2025-03-12T12:37:09.905Z (3 months ago)
- Topics: multi-tenancy, nitro, nuxt-module, nuxt3
- Language: Vue
- Homepage: https://techgoda.net/
- Size: 404 KB
- Stars: 245
- Watchers: 4
- Forks: 19
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Nuxt 3 Multi-tenancy
Nuxt 3 Multi-tenancy module for building multi-tenant applications on Nuxt 3
Features ·
Demo ·
Quick Setup ·
Contributing## Features
⛰ Multi-tenancy Nuxt dynamic tenant sites support by subdomains
🌻 Multiple Nuxt app sites in pages folder
🦄 Custom domain for each tenant route in pages folder
✨ A fully functional sample playground deployed on Vercel
## Quick Setup
1. Add `nuxt-multi-tenancy` dependency to your project
```bash
# Using pnpm
pnpm add -D nuxt-multi-tenancy# Using yarn
yarn add --dev nuxt-multi-tenancy# Using npm
npm install --save-dev nuxt-multi-tenancy
```2. Add `nuxt-multi-tenancy` to the `modules` section of `nuxt.config.ts`
```js
export default defineNuxtConfig({
modules: [
'nuxt-multi-tenancy'
]
})
```3. If you want to use dynamic tenants, create `[site]` folder under your Nuxt `pages` directory, you can check the [playground's pages folder](./playground/pages/[site]/) for referencing.
That's it! You can now use Nuxt Multi-tenancy in your Nuxt app ✨
4. If you want to have some additional system sites to be serving as a sub domain, for example: [jobs page](./playground/pages/jobs/)
Configure the sites property to add the list of tenant you want to be serving as system sites.
```js
export default defineNuxtConfig({
modules: ['nuxt-multi-tenancy'],
multiTenancy: {
tenantDynamicRoute: 'site',
rootDomains: ["nuxtdev.local", "techgoda.net"],
sites: ['jobs']
},
})
```5. If you want to custom domain for each tenant route, configure the `customDomains` property a map with key of domain and value of mapping tenant route. For example: `nuxtnews.com` to `news` route.
```js
export default defineNuxtConfig({
modules: ['nuxt-multi-tenancy'],
multiTenancy: {
tenantDynamicRoute: 'site',
rootDomains: ["nuxtdev.local", "techgoda.net"],
customDomains: {
"nuxtnews.com": "news"
}
},
})
```## Options
Configure Nuxt Multi-tenancy module with the `multiTenancy` property.
```js
export default defineNuxtConfig({
modules: ['nuxt-multi-tenancy'],
// default options
multiTenancy: {
tenantDynamicRoute: 'site',
rootDomains: ["nuxtdev.local", "techgoda.net"],
sites: [],
customDomains: {},
},
})
```## useTenant composition API
Use useTenant() to get the tenant ID
```js
import { useTenant } from '#imports'
const tenant = useTenant()
```## Development
```bash
# Install dependencies
yarn install# Generate type stubs
yarn dev:prepare# Develop with the playground
yarn dev# Build the playground
yarn dev:build# Run ESLint
yarn lint# Run Vitest
yarn test
yarn test:watch# Release new version
yarn release
```## Demo
You can view the demo at [techgoda.net](https://techgoda.net)
Features:
- A home page to list top first 30 articles from dev.to
- Tenant detail page. For example: [The Dev Team organization](https://dnse.techgoda.net)
- A custom static tenant page.
- An article detail page## Contributing
- [Open an issue](https://github.com/hieuhani/nuxt-multi-tenancy/issues) if you believe you've encountered a bug with the module.
## License
[MIT License](./LICENSE)