You can use the Vercel Marketplace to add compatible storage to your project (Postgres, Turso, Redis, Vercel Blob, etc.).
You can deploy your project on your own Cloudflare account, you need to create the necessary resources in your account and configure your project to use them (D1, KV, R2, etc.).
hub config.Then, create a Cloudflare Workers project and link your GitHub or GitLab repository.
Once your project is created, open the Settings tab and set:
KV and select your KV namespace createdCACHE and select your KV namespace for caching createdBLOB and select your R2 bucket createdDB and select your D1 database createdThen make sure to create the following wrangler.jsonc file in the root of your project:
{
"$schema": "node_modules/wrangler/config-schema.json",
// if hub.db is enabled
"d1_databases": [
{
"binding": "DB",
"database_name": "<database-name>",
"database_id": "<database-id>"
}
],
// if hub.blob is enabled
"r2_buckets": [
{
"binding": "BLOB",
"bucket_name": "<bucket-name>"
}
],
"kv_namespaces": [
// if hub.kv is enabled
{
"binding": "KV",
"id": "<kv-namespace-id>"
},
// if hub.cache is enabled
{
"binding": "CACHE",
"id": "<cache-namespace-id>"
}
]
}
When self-hosting and using devtools for cache management (viewing/deleting cache entries), you need to configure additional environment variables:
In your Cloudflare project, go to Settings → Environment Variables and add:
If deploying to Cloudflare Workers, you can use Workers Builds to automatically deploy your project on every commit.
If deploying to Cloudflare Pages, you can use Pages CI to automatically deploy your project on every commit.
The NuxtHub Admin is made to simplify your experience with NuxtHub, enabling you to effortlessly manage teams and projects, as well as deploying NuxtHub application with zero-configuration on your Cloudflare account.
NuxtHub supports two types of deployments: production and preview.
main)<commit>.<project>.pages.dev<commit>.<project>.pages.dev<branch>.<project>.pages.devDeploy your local project with a single command:
npx nuxthub deploy
The command will:
<my-app>.nuxt.dev domainnpm i -g nuxthub.nuxthub deploy command is designed to run non-interactively in CI/CD environments. It won’t prompt for additional input (such as logging in or linking the project). As long as the required environment variables are set, deployment will proceed automatically.To integrate the nuxthub deploy command within your CI/CD pipeline, set the following environment variables:
NUXT_HUB_PROJECT_KEY – Your project key available in:
.env file (if you ran npx nuxthub link)NUXT_HUB_USER_TOKEN – Your personal token, available in User settings → Tokens in the NuxtHub AdminExample command:
NUXT_HUB_PROJECT_KEY=<my-project-key> NUXT_HUB_USER_TOKEN=<my-user-token> npx nuxthub deploy
This will authenticate your user and link your NuxtHub project for deployment.
After linking a GitHub repository to your project, NuxtHub automatically adds a GitHub Actions workflow to automatically deploy your application on every commit using the NuxtHub GitHub Action.
NuxtHub integrates with GitHub deployments. This allows you to:
After deploying from a pull request, NuxtHub automatically adds a comment with information about the deployment.

The GitHub Workflow added to your repository is automatically tailored to your project's package manager. This is an example of a workflow added for a project using pnpm.
We support pnpm, yarn, npm and Corepack. If you use a different package manager, you can customise the generated nuxthub.yml GitHub Action.
name: Deploy to NuxtHub
on: push
jobs:
deploy:
name: "Deploy to NuxtHub"
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build & Deploy to NuxtHub
uses: nuxt-hub/action@v2
The following input parameters can be provided to the GitHub Action. Learn more about Workflow syntax for GitHub Actions on GitHub's documentation.
directory.The GitHub Action provides the following outputs that you can use in subsequent workflow steps.
The NuxtHub GitHub Action builds the Nuxt application using build-time environment variables and secrets specified within NuxtHub Admin.
NUXT_UI_PRO_LICENSE.When creating a new project from a template, or importing a Git repository, the GitHub Action workflow will automatically be set up for you.
Link your project to a GitHub repository within NuxtHub Admin → Projects → <Your Project> → Settings → General → Git Repository
Migrate your project to GitHub Actions within NuxtHub Admin → Projects → <Your Project> → Settings → General → Git Repository → Begin Migration.
Our GitHub integration supports deploying multiple applications from the same repository.
When linking a Git repository, set "project root directory" to the base folder of your Nuxt application corresponding to that NuxtHub project.
When a repository is already linked to at least one project, additional projects linked will have the generated GitHub Actions workflow named nuxthub-<projectSlug>.yml.
project-key input parameter must be specified on each Deploy to NuxtHub GitHub Action.Current limitations
This section will guide you to implement the GitLab CI.
The integration with GitLab CI builds on the Usage with CI/CD section,
make sure you have those two variables NUXT_HUB_PROJECT_KEY and NUXT_HUB_USER_TOKEN.
NUXT_HUB_USER_TOKENNUXT_HUB_USER_TOKEN — Your personal token, available in User settings → Tokens in the NuxtHub AdminNUXT_HUB_PROJECT_KEY is used later in Configure Projects for GitLab..gitlab-ci.yml in your repository root# if one job fails, pipeline should fail
workflow:
auto_cancel:
on_job_failure: all
variables:
APP_PATH: "PATH/TO/YOUR/APP"
NUXT_HUB_PROJECT_KEY: "YOUR_NUXT_HUB_PROJECT_KEY"
# add additional steps as needed
stages:
- deploy
- callback
deploy_project:
stage: deploy
# here we use Bun, you can change this.
image: "oven/bun:slim"
script:
- echo "Deploying project_a app..."
- cd $APP_PATH
# you can not use node_modules from cache, since nuxthub needs write access
- bun install
# if you set up your variables correctly this should deploy successfully
- bunx nuxthub deploy
rules:
# here we configure auto deploy on branch: staging and main
- if: '$CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == "main"'
manual_deploy_project:
stage: deploy
image: "oven/bun:slim"
when: manual
script:
- echo "Deploying project_a app..."
- cd $APP_PATH
- bun install
- bunx nuxthub deploy
callback:
stage: callback
script:
- echo "Deploy reached."
./apps/project-foo/.gitlab-ci.yml). Then follow the Monorepo Setup section.callback job is needed to mark the pipeline as successfully,
especially if deploy_project has not run. allow-failure: true but this will result in other drawbacks.
Or simply deploy on every branch, which results in more traffic.preview.If you have a monorepo with multiple apps (e.g. ./apps/project-foo), then we make sure our pipelines can run parallel.
.gitlab-ci.yml# if one job fails, pipeline should fail
workflow:
auto_cancel:
on_job_failure: all
stages:
- trigger_apps
trigger_project_a:
stage: trigger_apps
rules:
- changes:
- "apps/project-foo/**/*"
trigger:
strategy: depend
include:
- local: "apps/project-foo/.gitlab-ci.yml"
trigger_project_b:
stage: trigger_apps
rules:
- changes:
- "apps/project-bar/**/*"
trigger:
strategy: depend
include:
- local: "apps/project-bar/.gitlab-ci.yml"
add_manual_triggers:
stage: trigger_apps
trigger:
strategy: depend
include:
- local: ".manual-triggers.yml"
This configuration separates your main pipeline from child pipelines, each project (app) has its own .gitlab-ci.yml Those child pipelines are only triggered if changes are made in their app folder.
Sometimes GitLab changes are not recognized (previous pipeline failed and new push has no changes in app folder), for that case, you can add manual triggers for the child pipelines by adding a .manual-triggers.yml in the project root.
workflow:
auto_cancel:
on_job_failure: all
stages:
- trigger_apps
- callback
trigger_project_a:
stage: trigger_apps
when: manual
trigger:
strategy: depend
include:
- local: "apps/project-foo/.gitlab-ci.yml"
trigger_project_b:
stage: trigger_apps
when: manual
trigger:
strategy: depend
include:
- local: "apps/project-bar/.gitlab-ci.yml"
callback:
stage: callback
script:
- echo "manual triggers set"
depends and workflow.auto_cancel.on_job_failure: all a pipeline is failed, if one job fails.
This assures a clean main / staging branch. Change it to your needs.