
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
@galaxy-stack/nebula-cli
Advanced tools
Nebula CLI — add Galaxy UI components to your Vue, React, Angular, Next.js, Nuxt.js, React Native, or Flutter project
CLI for initializing Galaxy UI and copying framework-specific components (67 components × 5 frameworks: React, Vue, Angular, React Native, Flutter) into your project.
init, add, list, doctor, diff, update, migrate tailwindcomponents.jsoninit --theme violet|green|blue|defaultSee CHANGELOG.md — current version 1.0.0 (Nebula milestone).
nextjs and nuxtjs are CLI target frameworks, not separate published component packages.
nextjs reuses the React source registry and adds Next-specific transforms such as 'use client' when requirednuxtjs reuses the Vue source registry and keeps Vue/Nuxt-specific file structure intactThat means the package/source-of-truth layer is still React for Next.js and Vue for Nuxt.js, while the CLI adapts the copied files for the target app.
npx @galaxy-stack/nebula-cli@latest init
Or install globally:
npm install -g @galaxy-stack/nebula-cli
bun add -g @galaxy-stack/nebula-cli
npx @galaxy-stack/nebula-cli@latest init
init currently does the following:
components.jsoncomponents/ui and the cn() utilityTailwind behavior:
npx @galaxy-stack/nebula-cli@latest migrate tailwind --dry-run
npx @galaxy-stack/nebula-cli@latest migrate tailwind --yes
migrate tailwind currently focuses on the safe scaffold layer:
@tailwind ... directives to @import "tailwindcss";@tailwindcss/postcsscomponents.json Tailwind version metadata when presentIt does not try to auto-rewrite every potentially breaking utility class.
# Add one component
npx @galaxy-stack/nebula-cli@latest add button
# Add several components
npx @galaxy-stack/nebula-cli@latest add button input card
# Interactive selection
npx @galaxy-stack/nebula-cli@latest add
# Add everything in the current registry
npx @galaxy-stack/nebula-cli@latest add --all
button - Versatile button with variants and sizesinput - Text input with label and validation statescheckbox - Checkbox with indeterminate stateradio-group - Radio button groupsselect - Dropdown select with searchslider - Range slider inputswitch - Toggle switchtextarea - Multi-line text inputlabel - Accessible form labelsseparator - Horizontal/vertical divideraccordion - Collapsible content sectionscollapsible - Single collapsible paneltabs - Tabbed content organizationnavigation-menu - Complex navigation with dropdownsmenubar - Desktop-style menu barcontext-menu - Right-click context menusdropdown-menu - Action dropdown menusdialog - Modal dialogsalert-dialog - Confirmation dialogspopover - Floating content containerstooltip - Hover tooltipshover-card - Preview cards on hoveravatar - User avatars with fallbacksprogress - Progress bars and indicatorstable - Data tables with sortingpagination - Page navigationempty - Empty state placeholdersskeleton - Loading skeletonstypography - Text styles and componentskbd - Keyboard shortcut displaycalendar - Date picker calendarcalendar-range - Date range pickercommand - Command palette (⌘K)sheet - Slide-out panelstoolbar - Action toolbarstags-input - Multi-value tag inputaspect-ratio - Aspect ratio containerbadge - Status badges and labelscard - Content cardsscroll-area - Custom scrollbarstoggle - Toggle buttonstoggle-group - Toggle button groupsimport { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
export function MyComponent() {
return (
<div>
<Button variant="default" size="lg">
Click me
</Button>
<Input placeholder="Enter text..." />
</div>
);
}
<script setup lang="ts">
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
</script>
<template>
<div>
<Button variant="default" size="lg">Click me</Button>
<Input placeholder="Enter text..." />
</div>
</template>
import { Component } from '@angular/core';
import { ButtonDirective } from '@/components/ui/button';
import { InputComponent } from '@/components/ui/input';
@Component({
selector: 'app-my-component',
standalone: true,
imports: [ButtonDirective, InputComponent],
template: `
<div>
<button hlmBtn variant="default" size="lg">Click me</button>
<hlm-input placeholder="Enter text..." />
</div>
`,
})
export class MyComponent {}
'use client';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
export default function MyComponent() {
return (
<div>
<Button variant="default" size="lg">
Click me
</Button>
<Input placeholder="Enter text..." />
</div>
);
}
add automatically preserves framework-specific transformations such as 'use client' for Next.js components when needed.
Next.js support is implemented as a React-source target inside the CLI, not as a separate @galaxy-ui/nextjs package.
<script setup lang="ts">
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
</script>
<template>
<div>
<Button variant="default" size="lg">Click me</Button>
<Input placeholder="Enter text..." />
</div>
</template>
Nuxt users should make sure the @/ alias is available in nuxt.config.ts.
Nuxt.js support is implemented as a Vue-source target inside the CLI, not as a separate @galaxy-ui/nuxtjs package.
Galaxy UI stores project settings in components.json:
{
"$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"
}
| Option | Description | Default |
|---|---|---|
framework | Your framework | Auto-detected |
typescript | Use TypeScript | true |
tailwind.version | Tailwind major version | Auto-detected |
tailwind.config | Tailwind config path | Framework-specific |
tailwind.css | Global CSS file | Framework-specific |
tailwind.baseColor | Base color scheme | slate |
aliases.components | Components alias | @/components |
aliases.utils | Utils alias | @/lib/utils |
iconLibrary | Icon library to use | lucide |
initInitialize Galaxy UI in your project and scaffold components.json.
npx @galaxy-stack/nebula-cli@latest init
# Skip prompts (use defaults)
npx @galaxy-stack/nebula-cli@latest init --yes
addAdd registry components to your project.
# Interactive mode
npx @galaxy-stack/nebula-cli@latest add
# Add specific components
npx @galaxy-stack/nebula-cli@latest add button input
# Add all components
npx @galaxy-stack/nebula-cli@latest add --all
There is currently no diff command and no --overwrite option on add.
Galaxy UI uses Tailwind CSS with CSS variables for theming. After running init, you can customize colors in your CSS file:
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
/* ... more variables */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... dark mode variables */
}
}
Components are copied to your project, so you have full control:
components/ui/add currently fetches component source files from GitHub at runtime.components.json is the active configuration system. Legacy galaxy.config.* flow has been removed from source.MIT License - see LICENSE for details
FAQs
Nebula CLI — add Galaxy UI components to your Vue, React, Angular, Next.js, Nuxt.js, React Native, or Flutter project
The npm package @galaxy-stack/nebula-cli receives a total of 73 weekly downloads. As such, @galaxy-stack/nebula-cli popularity was classified as not popular.
We found that @galaxy-stack/nebula-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.