Skip to content
Back to skills

2325 Vault Structure 6ebc0351

ASecurity

Complete reference for Obsidian vault organization and configuration.

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
designgobashnodetestinggit

Works with

  • cli

Security analysis

A93/100
  • highPerforms destructive filesystem operations

Pro shows the line behind each finding and how to fix it

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2325-vault-structure_6ebc0351 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2325 Vault Structure 6ebc0351?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2325 Vault Structure 6ebc0351
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2325-vault-structure-6ebc0351/badge)](https://www.skillsdirectory.com/skills/tools-only-2325-vault-structure-6ebc0351)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Obsidian Vault Structure Reference

Complete reference for Obsidian vault organization and configuration.

## Vault Overview

A vault is a folder on your local file system containing:

- Markdown files (`.md`)
- Attachments (images, PDFs, etc.)
- Configuration folder (`.obsidian`)

## Directory Structure

```text
my-vault/
├── .obsidian/                    # Configuration folder
│   ├── app.json                  # App settings
│   ├── appearance.json           # Theme & UI settings
│   ├── backlink.json             # Backlink settings
│   ├── bookmarks.json            # Bookmarked files/searches
│   ├── canvas.json               # Canvas default settings
│   ├── command-palette.json      # Command palette config
│   ├── community-plugins.json    # Enabled community plugins list
│   ├── core-plugins.json         # Core plugin toggles
│   ├── core-plugins-migration.json
│   ├── daily-notes.json          # Daily notes settings
│   ├── graph.json                # Graph view settings
│   ├── hotkeys.json              # Custom keybindings
│   ├── templates.json            # Template settings
│   ├── workspace.json            # Current workspace layout
│   ├── workspaces.json           # Saved workspaces
│   │
│   ├── plugins/                  # Community plugin data
│   │   └── <plugin-id>/
│   │       ├── data.json         # Plugin settings
│   │       ├── main.js           # Plugin code
│   │       ├── manifest.json     # Plugin metadata
│   │       └── styles.css        # Plugin styles
│   │
│   ├── themes/                   # Custom themes
│   │   └── <theme-name>/
│   │       ├── manifest.json
│   │       └── theme.css
│   │
│   └── snippets/                 # CSS snippets
│       └── my-snippet.css
│
├── Notes/                        # User notes (customizable)
├── Attachments/                  # Media files
├── Templates/                    # Template files
└── Daily Notes/                  # Daily notes folder
```

## Configuration Files

### app.json

General application settings:

```json
{
  "legacyEditor": false,
  "livePreview": true,
  "foldHeading": true,
  "foldIndent": true,
  "showLineNumber": false,
  "showFrontmatter": false,
  "strictLineBreaks": false,
  "readableLineLength": true,
  "tabSize": 4,
  "spellcheck": true,
  "spellcheckLanguages": ["en-US"],
  "defaultViewMode": "source",
  "promptDelete": true,
  "alwaysUpdateLinks": true,
  "newFileLocation": "current",
  "newFileFolderPath": "",
  "attachmentFolderPath": "./attachments",
  "showUnsupportedFiles": false,
  "useMarkdownLinks": false
}
```

### appearance.json

Theme and visual settings:

```json
{
  "baseFontSize": 16,
  "baseFontSizeAction": true,
  "interfaceFontFamily": "",
  "textFontFamily": "",
  "monospaceFontFamily": "",
  "theme": "obsidian",
  "translucency": false,
  "cssTheme": "Minimal",
  "enabledCssSnippets": ["my-custom-styles"]
}
```

### core-plugins.json

Toggle built-in plugins:

```json
{
  "file-explorer": true,
  "global-search": true,
  "switcher": true,
  "graph": true,
  "backlink": true,
  "outgoing-link": true,
  "tag-pane": true,
  "page-preview": true,
  "daily-notes": true,
  "templates": true,
  "note-composer": true,
  "command-palette": true,
  "slash-command": false,
  "editor-status": true,
  "bookmarks": true,
  "markdown-importer": false,
  "zk-prefixer": false,
  "random-note": false,
  "outline": true,
  "word-count": true,
  "slides": false,
  "audio-recorder": false,
  "workspaces": true,
  "file-recovery": true,
  "publish": false,
  "sync": false,
  "canvas": true
}
```

### community-plugins.json

List of enabled community plugins:

```json
[
  "dataview",
  "templater-obsidian",
  "obsidian-git",
  "obsidian-advanced-uri"
]
```

### hotkeys.json

Custom keybindings:

```json
[
  {
    "key": "Mod+Shift+N",
    "modifiers": ["Mod", "Shift"],
    "command": "daily-notes"
  },
  {
    "key": "Mod+Shift+T",
    "modifiers": ["Mod", "Shift"],
    "command": "templater-obsidian:insert-templater"
  },
  {
    "key": "Mod+E",
    "modifiers": ["Mod"],
    "command": "editor:toggle-source"
  }
]
```

### workspace.json

Current workspace layout (auto-managed):

```json
{
  "main": {
    "id": "root",
    "type": "split",
    "children": [
      {
        "id": "leaf-1",
        "type": "leaf",
        "state": {
          "type": "markdown",
          "state": {
            "file": "Notes/MyNote.md",
            "mode": "source",
            "source": false
          }
        }
      }
    ],
    "direction": "vertical"
  },
  "left": { /* sidebar config */ },
  "right": { /* sidebar config */ },
  "active": "leaf-1",
  "lastOpenFiles": [
    "Notes/MyNote.md",
    "Notes/AnotherNote.md"
  ]
}
```

### daily-notes.json

Daily notes configuration:

```json
{
  "folder": "Daily Notes",
  "format": "YYYY-MM-DD",
  "template": "Templates/Daily Template",
  "autorun": true
}
```

### templates.json

Template settings:

```json
{
  "folder": "Templates",
  "dateFormat": "YYYY-MM-DD",
  "timeFormat": "HH:mm"
}
```

### graph.json

Graph view settings:

```json
{
  "search": "",
  "showTags": true,
  "showAttachments": false,
  "showOrphans": true,
  "collapse-filter": true,
  "showArrow": false,
  "textFadeMultiplier": 0,
  "nodeSizeMultiplier": 1,
  "lineSizeMultiplier": 1,
  "centerStrength": 0.5,
  "repelStrength": 10,
  "linkStrength": 1,
  "linkDistance": 250,
  "scale": 1,
  "close": true
}
```

## Plugin Data

### Plugin Folder Structure

Each community plugin has its own folder:

```text
.obsidian/plugins/<plugin-id>/
├── data.json       # Plugin settings (varies by plugin)
├── main.js         # Compiled plugin code
├── manifest.json   # Plugin metadata
└── styles.css      # Plugin styles (optional)
```

### Plugin manifest.json

```json
{
  "id": "my-plugin",
  "name": "My Plugin",
  "version": "1.2.3",
  "minAppVersion": "1.0.0",
  "description": "Plugin description",
  "author": "Author Name",
  "authorUrl": "https://example.com",
  "isDesktopOnly": false
}
```

## Themes

### Theme Structure

```text
.obsidian/themes/<theme-name>/
├── manifest.json
└── theme.css
```

### Theme manifest.json

```json
{
  "name": "My Theme",
  "version": "1.0.0",
  "minAppVersion": "1.0.0"
}
```

## CSS Snippets

Custom CSS can be added as snippets:

```text
.obsidian/snippets/
├── custom-fonts.css
├── hide-sidebars.css
└── table-styles.css
```

Enable snippets in Settings > Appearance > CSS Snippets.

### Example Snippet

```css
/* custom-fonts.css */
.markdown-source-view,
.markdown-preview-view {
  font-family: 'JetBrains Mono', monospace;
}

/* Hide certain UI elements */
.nav-folder.mod-root > .nav-folder-title {
  display: none;
}

/* Custom callout style */
.callout[data-callout="custom"] {
  --callout-color: 100, 50, 200;
  --callout-icon: lucide-star;
}
```

## File Formats

### Markdown Files

Standard markdown with Obsidian extensions:

```markdown
---
title: Note Title
date: 2024-01-15
tags:
  - tag1
  - tag2
aliases:
  - Alternate Name
cssclass: custom-class
---

# Heading

Regular markdown content with [[Internal Links]].

![[Embedded Note]]

> [!note] Callout
> Callout content
```

### Canvas Files (.canvas)

JSON-based canvas format:

```json
{
  "nodes": [
    {
      "id": "abc123",
      "type": "text",
      "text": "Text content",
      "x": 0,
      "y": 0,
      "width": 250,
      "height": 60
    },
    {
      "id": "def456",
      "type": "file",
      "file": "Notes/MyNote.md",
      "x": 300,
      "y": 0,
      "width": 400,
      "height": 400
    }
  ],
  "edges": [
    {
      "id": "edge1",
      "fromNode": "abc123",
      "fromSide": "right",
      "toNode": "def456",
      "toSide": "left"
    }
  ]
}
```

## Sync Considerations

### Files to Sync

For syncing between devices:

```text
.obsidian/
├── app.json              # Sync
├── appearance.json       # Sync
├── community-plugins.json # Sync
├── core-plugins.json     # Sync
├── hotkeys.json          # Sync
├── templates.json        # Sync
├── daily-notes.json      # Sync
├── graph.json            # Sync
├── plugins/              # Sync (without main.js for size)
├── themes/               # Sync
├── snippets/             # Sync
└── workspace.json        # Usually don't sync
```

### Files to Exclude

```text
.obsidian/
├── workspace.json        # Device-specific layout
├── workspaces.json       # Device-specific
├── cache/                # Temporary cache
└── plugins/*/main.js     # Can be re-downloaded
```

### .gitignore for Vaults

```gitignore
# Obsidian
.obsidian/workspace.json
.obsidian/workspaces.json
.obsidian/workspace-mobile.json
.obsidian/cache/
.obsidian/.obsidian

# Plugin binaries (can be re-downloaded)
.obsidian/plugins/*/main.js
.obsidian/plugins/*/.hotreload

# Theme binaries
.obsidian/themes/*/theme.css

# OS files
.DS_Store
Thumbs.db
```

## Custom Configuration Location

Override the default `.obsidian` folder:

1. Open Settings > Files and Links
2. Set "Override config folder" to custom name
3. Use `.obsidian-custom` or similar

Useful for:

- Multiple configurations in same vault
- Testing different settings
- Sync service conflicts

## Backup and Migration

### Backup Important Files

```bash
# Backup config
cp -r .obsidian .obsidian-backup

# Backup specific settings
cp .obsidian/hotkeys.json ./hotkeys-backup.json
cp .obsidian/community-plugins.json ./plugins-backup.json
```

### Migrate to New Vault

```bash
# Copy config to new vault
cp -r old-vault/.obsidian new-vault/.obsidian

# Or selective copy
cp old-vault/.obsidian/hotkeys.json new-vault/.obsidian/
cp old-vault/.obsidian/appearance.json new-vault/.obsidian/
cp -r old-vault/.obsidian/snippets new-vault/.obsidian/
```

### Reset Configuration

```bash
# Remove all config (caution!)
rm -rf .obsidian

# Obsidian will recreate default config on next open
```

## Vault Management Commands

### CLI Operations

```bash
# Open vault
open "obsidian://open?vault=MyVault"

# List vault files
find . -name "*.md" -type f

# Count notes
find . -name "*.md" | wc -l

# Find orphan files (no links)
# Requires additional tooling

# Search in vault
grep -r "search term" --include="*.md"

# List recently modified
find . -name "*.md" -mtime -7
```

### Validate Configuration

```bash
# Check if valid JSON
jq . .obsidian/app.json
jq . .obsidian/community-plugins.json

# List enabled plugins
jq '.[]' .obsidian/community-plugins.json

# List hotkeys
jq '.[] | .command' .obsidian/hotkeys.json
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.