An open API service indexing awesome lists of open source software.

https://github.com/nuxt-content/nuxt-studio

Edit your Markdown website, in production.
https://github.com/nuxt-content/nuxt-studio

nuxt nuxt-cms nuxt-content nuxt-studio

Last synced: 4 months ago
JSON representation

Edit your Markdown website, in production.

Awesome Lists containing this project

README

          

# Nuxt Studio

[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![License][license-src]][license-href]

Visual edition in production for your [Nuxt Content](https://content.nuxt.com) website.

Originally offered as a standalone premium platform, Studio has evolved into a free, open-source, and self-hostable Nuxt module. Enable your entire team to edit website content right in production.

https://github.com/user-attachments/assets/39bf4250-e72b-45aa-bf6d-9441a38cb2d5

**Current Features**

- ๐Ÿ’ป **Monaco Code Editor** - Code editor for enhanced Markdown with MDC syntax, YAML, and JSON
- โœจ **TipTap Visual Editor** - Markdown editor with MDC component support (default mode)
- ๐Ÿ“ **Form-based Editor** - Edit YAML/JSON files and frontmatter with auto-generated forms based on collection schemas
- ๐ŸŽจ **Vue Component Props Editor** - Visual interface for editing Vue component props directly in the editor
- ๐Ÿง  **AI-powered content suggestions** - Plug and play DX with the Vercel AI Gateway, let AI help you shape your content.
- ๐Ÿ”„ **Real-time Preview** - See your changes instantly on your production website
- ๐Ÿ” **Multi-provider Authentication** - Secure OAuth-based login with GitHub, GitLab, and Google
- ๐Ÿ”‘ **Custom Authentication** - Utilities for implementing your own auth flow (password, SSO, LDAP)
- ๐Ÿ“ **File Management** - Create, edit, delete, and rename content files (`content/` directory)
- ๐Ÿ–ผ๏ธ **Media Management** - Centralized media library with support for JPEG, PNG, GIF, WebP, AVIF, SVG, and more
- ๐ŸŒณ **Git Integration** - Commit changes directly from your production website and just wait your CI/CD pipeline to deploy your changes
- ๐Ÿš€ **Development Mode** - Directly edit your content files and media files in your local filesystem using the module interface
- ๐ŸŒ **25 Languages** - Full i18n support (AR, BG, BN, CS, DE, EN, ES, FA, FI, FR, ID, IT, JA, KO, NB-NO, NL, NN-NO, PL, PT-BR, RU, TH, UA, ZH, ZH-TW)

**Future Features:**

- ๐Ÿ“‚ **Collections view** - View and manage your content collections in a unified interface
- ๐Ÿ–ผ๏ธ **Media optimization** - Optimize your media files in the editor
- ๐Ÿค– **AI Content Assistant** โ€” Receive smart, AI-powered suggestions to enhance your content creation flow
- ๐Ÿ’ก **Community-driven Features** โ€” Have an idea? [Share your suggestions](https://github.com/nuxt-content/nuxt-studio/discussions) to shape the future of Nuxt Studio

### Resources

- [๐Ÿ“– Documentation](https://nuxt.studio/)
- [๐ŸŽฎ Live Demo](https://docus.dev/admin)

## Quick Setup

### 1. Install

Install the module in your Nuxt application:

```bash
npx nuxi module add nuxt-studio
```

### 2. Dev Mode

๐Ÿš€ **That's all you need to enable Studio locally!**

Run your Nuxt app and you will see a floating button on bottom left for editing your content. Any file changes will be synchronized in real time with the file system.

> **Note**: The publish system is only available in production mode. Use your classical workflow (IDE, CLI, GitHub Desktop...) to publish your changes locally.

### 3. Configure Production

Add it to your `nuxt.config.ts` and configure your repository:

```ts
export default defineNuxtConfig({
modules: [
'@nuxt/content',
'nuxt-studio'
],

studio: {
// Studio admin route (default: '/_studio')
route: '/_studio',

// Git repository configuration (owner and repo are required)
repository: {
provider: 'github', // 'github' or 'gitlab'
owner: 'your-username', // your GitHub/GitLab username or organization
repo: 'your-repo', // your repository name
branch: 'main', // the branch to commit to (default: main)
}
}
})
```

### 4. Production Mode

To enable publishing directly from your production website, you need to configure:

#### Git Provider

Configure where your content is stored (GitHub or GitLab repository). See the [repository configuration](#configuration-options) above.

> [๐Ÿ“– Git Providers Documentation](https://nuxt.studio/git-providers)

#### Auth Provider

Configure how users authenticate to access Studio. Choose from GitHub, GitLab, Google OAuth, or custom authentication.

```bash
# Example with GitHub OAuth
STUDIO_GITHUB_CLIENT_ID=
STUDIO_GITHUB_CLIENT_SECRET=
```

> [๐Ÿ“– Auth Providers Documentation](https://nuxt.studio/auth-providers)

#### Deployment

Nuxt Studio requires server-side routes for authentication. Your site must be **deployed on a platform that supports SSR** using `nuxt build`.

#### Open Studio

Once deployed, navigate to your configured route (default: `/_studio`) and authenticate to start editing.

## Configuration Options

```ts
export default defineNuxtConfig({
studio: {
// Studio admin login route
route: '/_studio', // default

// Git repository configuration
repository: {
provider: 'github', // 'github' or 'gitlab' (default: 'github')
owner: 'your-username', // your GitHub/GitLab owner (required)
repo: 'your-repo', // your repository name (required)
branch: 'main', // branch to commit to (default: 'main')
rootDir: '', // subdirectory for monorepos (default: '')
private: true, // request access to private repos (default: true)
},
}
})
```

## Contributing

You can start contributing by cloning the repository and using the playground in dev mode (set `dev`ย option to `true`).

> If you want to contribute with production mode you must create a local GitHub OAuth App (pointing to `http://localhost:3000` as callback URL).

### Development Setup

```bash
# Install dependencies
pnpm install

# Generate type stubs
pnpm dev:prepare

# Build the app and service worker
pnpm prepack

# Terminal 1: Start the playground
pnpm dev

# Terminal 2: Start the app dev server
pnpm dev:app

# Login at http://localhost:3000/admin
```

### Project Structure

```text
studio/
โ”œโ”€โ”€ src/
โ”‚ โ”œโ”€โ”€ app/ # Studio editor Vue app
โ”‚ โ””โ”€โ”€ module/ # Nuxt module
โ”œโ”€โ”€ playground/ # Development playground
โ”‚ โ”œโ”€โ”€ docus/ # Docus example
โ”‚ โ””โ”€โ”€ minimal/ # Minimal example
```

### Testing

You can run a global command to test all needed check at once.

```bash
# Global verify running all needed commands
pnpm verify
```

Or run them one by one.

```bash
# Run tests
pnpm test

# Run type checking
pnpm typecheck

# Run linter
pnpm lint
```

## Roadmap

### โœ… Phase 1 (Completed)

- [x] Monaco code editor
- [x] TipTap visual editor with MDC support (default mode)
- [x] Editor mode switching (code โ†” visual/form)
- [x] Form-based editor for YAML/JSON and frontmatter (schema-based)
- [x] File operations (create, edit, delete, rename)
- [x] Media management with visual picker
- [x] Enhanced component slot editing
- [x] GitHub authentication
- [x] GitLab provider support
- [x] Google OAuth authentication
- [x] Development mode
- [x] Git integration
- [x] Real-time preview
- [x] Internationalization (25 languages)
- [x] Custom authentication utilities
- [x] Vue Component props editor (visual interface)
- [x] Span-style text formatting with toolbar button
- [x] Binding extension for component prop editing

### ๐Ÿ”ฎ Future

- [ ] Advanced conflict resolution
- [ ] Pull request generation (from a branch to the main one)
- [x] AI-powered content suggestions
- [ ] Media optimization

## Links

- ๐Ÿ“– [Documentation](https://content.nuxt.com/studio)
- ๐Ÿ› [Report a Bug](https://github.com/nuxt-content/nuxt-studio/issues/new)
- ๐Ÿ’ก [Feature Request](https://github.com/nuxt-content/nuxt-studio/issues/new)
- ๐Ÿ—จ๏ธ [Discussions](https://github.com/nuxt-content/nuxt-studio/discussions)
- ๐Ÿ†‡ [Twitter](https://x.com/nuxtstudio)
- ๐Ÿฆ‹ [Bluesky](https://bsky.app/profile/nuxt.com)

## License

Published under the [MIT](LICENSE) license.

[npm-version-src]: https://img.shields.io/npm/v/nuxt-studio?style=flat&colorA=020420&colorB=00DC82
[npm-version-href]: https://npmjs.com/package/nuxt-studio

[npm-downloads-src]: https://img.shields.io/npm/dm/nuxt-studio.svg?style=flat&colorA=020420&colorB=00DC82
[npm-downloads-href]: https://npm.chart.dev/nuxt-studio

[license-src]: https://img.shields.io/npm/l/nuxt-studio.svg?style=flat&colorA=020420&colorB=00DC82
[license-href]: https://npmjs.com/package/nuxt-studio