Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Not Submodules

DanDan142 downloads

Replace git submodules with plain nested git repos, ignored via .gitignore and tracked via folder-note frontmatter.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates8

An Obsidian plugin that replaces git submodules with plain nested git repos - discovered by scanning your vault's filesystem and kept out of your vault's own git history by a self-maintaining pre-commit hook, instead of .gitmodules.

Submodules are brittle, especially on mobile and when using Obsidian with iOS through terminal emulators such as iSH. This plugin avoids them entirely: nested repos are just ordinary git repositories living inside your vault, automatically found and ignored by the vault's own repo - no folder-naming convention, no frontmatter, no manual registration step.

How it works

  • Click Refresh in Settings and the plugin walks your vault for nested .git entries, classifying each as an original clone, a git worktree, or a real git submodule (read-only, sourced from .gitmodules).
  • Locations that share the same origin remote (however they're named, wherever they live) are grouped into one entry, so a repo cloned in more than one place - or a clone plus its worktrees - shows up as one thing, not several.
  • Install git hook installs a plain POSIX pre-commit hook that re-scans your vault on every commit and keeps a managed block in .gitignore in sync automatically - no naming convention, no manual .gitignore editing, ever.
  • A repo folder can be renamed, or its remote URL respelled (SSH vs HTTPS), without looking like a deletion - the next Refresh recognises it as the same location.

Features

  • Initialise git repo - one-click git init for the vault itself, if it isn't a git repository yet.
  • Install git hook - installs the self-maintaining pre-commit hook; refuses to overwrite a hook it didn't install itself, and offers to reinstall if it ever goes missing (hooks aren't tracked by git, so a fresh clone or checkout won't have one).
  • Refresh - rescans the vault's filesystem and rebuilds the list. Manual only - nothing scans automatically on startup.
  • Originals & Worktrees, per repo - Clone / Push / Pull / Delete / Remove and a branch dropdown (switching to a remote-only branch fetches it first) for every location; New clones the origin again at a vault path you choose. Delete leaves a location listed as "missing" until you Remove it; a repo with no locations left disappears on the next Refresh.
  • Stash / Pop Stash - a dirty working tree greys out the branch dropdown and offers Stash; Pop Stash is only enabled while you're back on the branch the stash came from.
  • Worktree repair - detects a worktree whose folder was moved outside git worktree move and offers a one-click repair.
  • Submodules - a read-only section listing every real git submodule declared in .gitmodules, including ones not yet initialized on disk.
  • Migration - existing installs of the plugin's old naming-convention system are carried forward automatically: an on-update popup (or a persistent settings banner if you dismiss it) rescans your vault, installs the hook, and removes the old static .gitignore line, all in one step. Nothing you'd already registered is lost.

Installation

This plugin is desktop-only (isDesktopOnly: true), since it shells out to your local git.

Manual installation: copy main.js, manifest.json, and styles.css from a release into <your-vault>/.obsidian/plugins/not-submodules/, then enable it in Obsidian's Community plugins settings.

Development

npm install
npm run dev     # watch build
npm run build   # type-check + production build
npm test        # unit + integration tests (tsx --test)

License

MIT

HealthExcellent
ReviewCaution
About
Replace git submodules with plain nested git repositories declared via YAML frontmatter in folder notes and ignored by a *-git-repo/ .gitignore entry. Manage all nested repos from a single list with Clone, Pull, Push and bulk actions, and register or reveal repos directly from files or the ribbon.
GitSyncing
Details
Current version
1.1.2
Last updated
2 months ago
Created
2 months ago
Updates
8 releases
Downloads
142
Compatible with
Obsidian 1.7.2+
Platforms
Desktop only
License
MIT
Report bugRequest featureReport plugin
Author
DanDandanrfletcher
GitHubdanrfletcher
  1. Community
  2. Plugins
  3. Git
  4. Not Submodules

Related plugins

GitHub

GitHub Sync

Sync vault to personal GitHub.

GitHub

Git Sync

Sync your vault across all devices using your own GitHub account. Free forever.

Git File Sync

Both mobile and desktop. Selectively sync the notes you choose—not your whole vault—with GitHub, GitLab, or Gitea. No local Git repository required.

GitHub

Octosync

Sync your vault directly with GitHub APIs on desktop and mobile.

GitHub

SyncGit

Sync your vault across devices using GitHub's REST API without requiring local Git.

Self-hosted LiveSync

Sync vaults securely to self-hosted servers or WEBRTC.

Fast Note Sync

Real-time sync of your vaults across server, mobile, and web; shareable with anyone; supports REST and MCP integrations to build your personal AI knowledge base.

Git

Integrate Git version control with automatic backup and other advanced features.

Google Drive Sync

Syncs a vault into Google Drive for cross-platform use (works for iOS).

Sync Engine

The extensible vault synchronization engine: Fast · Free · Reliable. Supports WebDAV, S3, Google Drive, and Dropbox.