# Obsidian
## Markdown Support
For portability, Obsidian supports [CommonMark](https://commonmark.org/) and [GitHub Flavored Markdown](https://github.github.com/gfm/) (GFM): code fences with syntax highlighting, tables, task lists, and strikethrough.
For expressiveness, Obsidian also supports:
- `#tags` and `#tags/subtags`
- `$LaTeX math$`
- `[^footnotes]`
- `[[Internal links]]`
- `![[Filename]]` to embed notes and other files
## Useful Shortcuts
| macOS | Windows/Linux | Action |
| ----------- | ------------- | ----------------------------------- |
| `Shift+Del` | `Shift+Del` | Delete entire row (same as VS Code) |
## CLI
Obsidian has had a CLI since v1.12.0 (Early Access, Feb 2026). Requires a [Catalyst license](https://obsidian.md/pricing) ($25 one-time). Planned to be free for all users in the future.
### Setup on macOS
1. **Settings → General** → log in, confirm Catalyst license is recognized
2. Toggle **"Receive insider builds"** → check for updates → restart
3. **Settings → Command line interface** → turn on
This should add `obsidian` to your PATH via `~/.zprofile`. If it doesn't work, add it manually:
```bash
# In ~/.zshrc or ~/.zprofile
export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"
```
Verify with:
```bash
obsidian help
```
### Publish Commands
```bash
obsidian publish:list # List all published notes
obsidian publish:list total # Count published notes
obsidian publish:status # List ALL unpublished files as pending (vault-wide)
obsidian publish:add path=<path> # Publish a specific note
obsidian publish:remove path=<path> # Unpublish a note
obsidian publish:open path=<path> # Open a note on the published site
obsidian publish:site # Show publish site info
```
> **Warning:** `publish:add changed` is buggy in this early CLI release — it treats every unpublished file in the vault as "changed" and publishes them all, not just files you actually modified. `publish:status` has the same issue, listing the entire vault as pending. **Do not use `publish:add changed` unless you want to publish everything.** Use the folder-scoped approach below instead.
>
> **Note:** The CLI sometimes produces no stdout when invoked from non-interactive shells, even though commands succeed. If output is missing, verify in a regular terminal.
Publish an entire folder[^1]:
```bash
files=$(obsidian files folder=Brain ext=md) && \
while IFS= read -r f; do
obsidian publish:add path="$f" </dev/null
done <<< "$files"
```
[^1]: `publish:add` has no native folder support. It also consumes stdin, so `</dev/null` is needed to prevent it from eating the file list.
### Other Useful Commands
```bash
obsidian search "query" # Search vault
obsidian files # List vault files
obsidian create <path> # Create a note
obsidian read <path> # Read a note
obsidian tags # List all tags
obsidian backlinks <path> # Show backlinks
obsidian unresolved # List unresolved wikilinks (vault-wide)
obsidian unresolved verbose # Include source files
obsidian orphans # List files with no incoming links
obsidian deadends # List files with no outgoing links
obsidian tasks # List tasks
obsidian daily # Open/create daily note
obsidian sync:status # Check Sync status
obsidian plugins # List plugins
```
Run `obsidian help <command>` for details on any command.
### Links
- [Official CLI docs](https://help.obsidian.md/cli)
- [Features overview](https://obsidian.md/features)
## Related Notes
| Note | Description |
|------|-------------|
| [[Dataview]] | Query vault metadata like a database |
| [[Excalidraw]] | Sketching and diagramming inside Obsidian |
| [[Find Unlinked Files]] | Find orphaned files and broken links |
| [[Markdownlint]] | Linting config tuned for Obsidian, with Lefthook pre-commit hook |
| [[Meld Encrypt]] | Encrypt notes or selections in-place |
## Importing from Bear
When importing notes from Bear, image references break. Fix with a regex find-and-replace in [[VS Code]]:
**Find:** `(!\[\]\(.*/)(.*)\)`
**Replace:** `![[$2]]`