---
title: "Project Structure"
description: "Learn about the project structure of Docus v4."
canonical_url: "http://localhost/getting-started/project-structure"
---
# Project Structure

> Learn about the project structure of Docus v4.

## Global structure

Docus is a **Nuxt layer** that extends your standard Nuxt application with documentation features. This gives you the flexibility of a full Nuxt project.

When you create a new Docus project with `npx create-docus my-docs`, you get:

```bash
my-docs/
├── content/             # Your markdown content
│   ├── index.md         # Homepage
│   └── docs/            # Documentation pages
├── public/              # Static assets
└── package.json         # Dependencies and scripts
```

You can still use any feature or file of a classical Nuxt project:

```bash
my-docs/
├── nuxt.config.ts       # Nuxt configuration (add extra modules, components, etc.)
├── app/                 # App directory
    ├── app.config.ts    # App configuration
│   ├── components/      # Components (add your own components)
│   ├── layouts/         # Layouts (add your own layouts)
│   └── pages/           # Pages (add your own pages)
└── server/              # Server-side code (add your own server-side code)
```

### `content/` directory

This is where you write pages in Markdown. Docus automatically generates routes based on your file structure.

**Single language structure:**

```bash
content/
├── index.md              # Landing page (/)
├── getting-started.md    # Documentation page (/getting-started)
└── guide/
    ├── introduction.md   # Documentation page (/guide/introduction)
    └── configuration.md  # Documentation page (/guide/configuration)
```

<tip>

You can separate your documentation files within a `docs/` subfolder to make them accessible at the `/docs` route. Additionally, you have the flexibility to override your landing page using custom Vue pages if desired. Learn more in the [edition documentation](https://docus.dev/concepts/edition).

</tip>

**Multi-language structure (with i18n):**

```bash
content/
├── en/
│   ├── index.md             # English landing page (/en)
│   └── guide/
│       └── introduction.md  # Documentation page (/en/guide/introduction)
└── fr/
    ├── index.md             # French landing page (/fr)
    └── guide/
        └── introduction.md  # Documentation page (/fr/guide/introduction)
```

<tip to="https://docus.dev/concepts/internationalization">

More information about i18n is available in the internationalization section.

</tip>

### `public/` directory

Files contained within the `public/` directory are served at the root and are not modified by the build process. This is where you can locate your images, icons, and other static assets.

### `package.json`

This file contains all the dependencies and scripts for your application. The `package.json` of
a Docus application is really minimal and looks like:

```json [package.json]
{
  "name": "my-docs",
  "scripts": {
    "build": "nuxt build --extends docus",
    "dev": "nuxt dev --extends docus",
  },
  "dependencies": {
    "docus": "latest",
    "better-sqlite3": "^12.2.0",
    "nuxt": "^4.0.0"
  }
}
```

### `nuxt.config.ts`

*This file is not mandatory to start a Docus application.*

You can add extra modules to your Nuxt configuration file:

```typescript [nuxt.config.ts]
export default defineNuxtConfig({
  extends: ['@vercel/analytics/nuxt/module']
})
```

### `app.config.ts`

*This file is not mandatory to start a Docus application.*

<warning>

You need a `nuxt.config.ts` to be set if you want to override app configuration.

</warning>

This is where you can configure Docus to fit your branding, handle SEO, set your locale, and adapt links and socials. See the [configuration documentation](https://docus.dev/concepts/configuration) for details.

```ts [app.config.ts]
export default defineAppConfig({
  docus: {
    locale: 'en', // Set your single-language locale
  },
  seo: {
    title: 'My Docs',
    description: 'My awesome documentation',
  },
  // ... other configurations
})
```

## Full Nuxt Project Capabilities

Since Docus is a Nuxt layer, you can use **any feature** of a standard Nuxt project:

<warning>

You need a `nuxt.config.ts` to be set if you want to override your app with Nuxt files. If no Nuxt config is created, changes will not be applied.

</warning>

```bash
my-docs/
├── app/                 # App directory (optional)
    ├── app.config.ts    # App configuration
│   ├── components/      # Custom Vue components
│   ├── layouts/         # Custom layouts
│   ├── pages/           # Custom Vue pages (outside of content)
│   ├── composables/     # Vue composables
│   └── middleware/      # Route middleware
├── server/              # Server-side code
│   └── api/             # API routes
├── plugins/             # Nuxt plugins
├── middleware/          # Global middleware
└── modules/             # Custom Nuxt modules
```

<tip to="https://docus.dev/concepts/nuxt">

This layer-based approach gives you the power of the entire Nuxt ecosystem while keeping documentation as the primary focus.

</tip>


## Sitemap

See the full [sitemap](http://localhost/sitemap.md) for all pages.
