Installation
Galaxy UI copies editable component source into your project, following the shadcn approach across multiple frameworks.
Prerequisites
- Node.js 18+ or Bun 1+
- npm, pnpm, Yarn, or Bun
- Vue 3, React 18+, Angular 20+, React Native, or Flutter
- Tailwind CSS v3.4 or v4 for web projects
Initialize
npx @galaxy-stack/nebula-cli@latest initpnpm dlx @galaxy-stack/nebula-cli@latest inityarn dlx @galaxy-stack/nebula-cli@latest initbunx @galaxy-stack/nebula-cli@latest initThe CLI detects the framework, package manager, source layout, and Tailwind major version. It then creates components.json, utility/runtime files, aliases, and installs compatible dependencies.
Framework targets vs source packages
Next.js uses the React source registry with Next-specific transforms. Nuxt uses the Vue source registry with Nuxt-compatible paths. They are CLI targets, not separate component package families.
Add components
npx @galaxy-stack/nebula-cli@latest add button
npx @galaxy-stack/nebula-cli@latest add button input dialog
npx @galaxy-stack/nebula-cli@latest add --allComponent files remain in your repository and can be edited. Dependencies and component-to-component dependencies are read from the framework registry and installed automatically.
Configuration
The generated file uses the public schema:
{
"$schema": "https://galaxy-nebula.vercel.app/schema.json",
"framework": "react",
"typescript": true,
"tailwind": {
"version": 4,
"config": "",
"css": "src/index.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib"
},
"iconLibrary": "lucide"
}For Tailwind v3, tailwind.config.* is retained. For v4, the CLI generates a CSS-first semantic theme bridge. See Tailwind CSS.
Migrate an existing v3 project
npx @galaxy-stack/nebula-cli@latest migrate tailwind --dry-run
npx @galaxy-stack/nebula-cli@latest migrate tailwind --yesReview the reported compatibility findings and keep the backup under .galaxy/backups/ until the application build succeeds.
Use a component
<script setup lang="ts">
import { Button } from '@/components/ui/button'
</script>
<template><Button>Continue</Button></template>import { Button } from '@/components/ui/button'
export default function App() {
return <Button>Continue</Button>
}import { Component } from '@angular/core'
import { ButtonComponent } from '@/components/ui/button'
@Component({
selector: 'app-root',
standalone: true,
imports: [ButtonComponent],
template: `<ui-button>Continue</ui-button>`,
})
export class AppComponent {}Continue with CLI Usage, Configuration, or Components.
