Convert Figma logo to code with AI

blacksmithgu logoobsidian-dataview

A data index and query language over Markdown files, for https://obsidian.md/.

8,096
473
8,096
629

Top Related Projects

Integrate Git version control with automatic commit-and-sync and other advanced features in Obsidian.md

A plugin to edit and view Excalidraw drawings in Obsidian

Create markdown-backed Kanban boards in Obsidian.

Simple calendar widget for Obsidian.

Quick Overview

The obsidian-dataview project is a powerful plugin for the Obsidian note-taking application, which allows users to create custom views and queries within their Obsidian vaults. It provides a flexible and powerful way to organize, filter, and display data from Obsidian notes.

Pros

  • Flexible Querying: The plugin offers a rich query language that allows users to filter, sort, and display data from their Obsidian notes in a variety of ways.
  • Custom Views: Users can create custom views to display data in a variety of formats, including tables, lists, and more.
  • Seamless Integration: The plugin integrates seamlessly with the Obsidian ecosystem, allowing users to leverage their existing notes and workflows.
  • Active Development: The project is actively maintained and developed, with regular updates and improvements.

Cons

  • Learning Curve: The query language and custom view creation can have a steep learning curve for some users.
  • Performance: Depending on the size and complexity of the user's Obsidian vault, the plugin may have some performance issues when executing complex queries.
  • Limited Visualization: While the plugin offers a range of display options, the visualization capabilities may be limited compared to dedicated data visualization tools.
  • Dependency on Obsidian: The plugin is tightly integrated with the Obsidian application, which means users are dependent on the continued development and support of Obsidian.

Code Examples

// Example 1: Querying for all notes with a specific tag
```dataview
table file.name, file.mtime
from "#my-tag"

This query will display a table of all notes with the "#my-tag" tag, including the file name and modification time.

// Example 2: Filtering notes by a custom field
```dataview
table file.name, status
from "my-folder"
where status = "In Progress"

This query will display a table of all notes in the "my-folder" directory that have a "status" field set to "In Progress".

// Example 3: Grouping and aggregating data
```dataview
table count(file) as "Total", sum(word-count) as "Total Words"
from "my-folder"
group by file.folder

This query will display a table with the total number of notes and the total word count for each folder within the "my-folder" directory.

Getting Started

To get started with the obsidian-dataview plugin, follow these steps:

  1. Install the obsidian-dataview plugin in your Obsidian application.
  2. Create a new note or open an existing note in your Obsidian vault.
  3. In the note, use the ````dataview` code block to start writing your queries.
  4. Experiment with the various query options and custom view configurations to suit your needs.
  5. Refer to the project documentation for more advanced usage and examples.

Competitor Comparisons

Integrate Git version control with automatic commit-and-sync and other advanced features in Obsidian.md

Pros of Obsidian Git

  • Automatic Backups: Obsidian Git automatically commits and pushes your notes to a remote Git repository, ensuring your data is securely backed up.
  • Collaboration: The plugin allows for easy collaboration on notes, with the ability to merge changes from multiple contributors.
  • Version Control: The Git integration provides a full version history of your notes, allowing you to easily revert changes or view past revisions.

Cons of Obsidian Git

  • Complexity: Setting up and configuring Obsidian Git can be more complex than some other Obsidian plugins, especially for users unfamiliar with Git.
  • Performance Impact: The plugin's continuous Git operations may have a noticeable performance impact on larger vaults or slower systems.
  • Limited Customization: Obsidian Git provides fewer customization options compared to Dataview, which allows for more advanced data manipulation and querying.

Code Comparison

Dataview:

// Retrieve all notes in the current vault
dv.pages()

// Filter notes by a specific tag
dv.pages("#myTag")

// Sort notes by their creation date
dv.pages().sort(t => t.file.ctime, 'asc')

Obsidian Git:

// Automatically commit and push changes to a remote repository
app.plugins.getPlugin('obsidian-git').push()

// Manually commit changes with a custom message
app.plugins.getPlugin('obsidian-git').commit('My commit message')

// Pull the latest changes from the remote repository
app.plugins.getPlugin('obsidian-git').pull()

A plugin to edit and view Excalidraw drawings in Obsidian

Pros of Obsidian Excalidraw Plugin

  • Seamless integration with Obsidian, allowing users to create and edit Excalidraw diagrams directly within their Obsidian notes.
  • Provides a rich set of features, including support for layers, templates, and various drawing tools.
  • Enables real-time collaboration, allowing multiple users to work on the same diagram simultaneously.

Cons of Obsidian Excalidraw Plugin

  • Limited support for advanced Excalidraw features, such as custom libraries and plugins.
  • Potential performance issues when working with large or complex diagrams.
  • Requires additional setup and configuration to integrate with other Obsidian plugins.

Code Comparison

Obsidian Dataview:

app.metadataCache.getCache(this.file.path).frontmatter.tags

Obsidian Excalidraw Plugin:

this.app.workspace.getActiveFile().path

Both code snippets demonstrate how the respective plugins interact with the Obsidian API to access file-related information. The Obsidian Dataview example retrieves the tags from the frontmatter of the current file, while the Obsidian Excalidraw Plugin example gets the path of the active file.

Create markdown-backed Kanban boards in Obsidian.

Pros of Obsidian Kanban

  • Provides a visually appealing and intuitive Kanban-style interface for task management within Obsidian.
  • Supports custom column configuration, allowing users to tailor the board to their specific needs.
  • Offers a range of features, including card creation, moving, and archiving, to streamline task organization.

Cons of Obsidian Kanban

  • Limited integration with other Obsidian plugins, such as Dataview, which may limit the overall flexibility of the tool.
  • Potential performance issues with large Kanban boards, as the plugin may struggle to handle a large number of cards.
  • Relatively limited customization options compared to Dataview, which offers a more flexible and powerful data querying system.

Code Comparison

Obsidian Kanban:

const createKanbanView = (app, plugin) => {
  const view = new KanbanView(app, plugin);
  app.workspace.registerView(VIEW_TYPE, (leaf) => view);
  return view;
};

Dataview:

function getDataviewApi(app: App): DataviewApi {
  const plugin = app.plugins.getPlugin('dataview');
  if (!plugin) {
    throw new Error('Dataview plugin not found');
  }
  return plugin.api;
}

Simple calendar widget for Obsidian.

Pros of Obsidian Calendar Plugin

  • Provides a calendar view for your Obsidian notes, making it easier to visualize and navigate your content.
  • Supports various calendar views (day, week, month) and allows you to switch between them.
  • Integrates with Obsidian's built-in date and time features, making it seamless to work with.

Cons of Obsidian Calendar Plugin

  • Focuses primarily on calendar-related functionality, while Dataview offers a more comprehensive set of features for querying and displaying data.
  • May have a narrower scope compared to the broader capabilities of Dataview.
  • Requires additional setup and configuration to integrate with other Obsidian plugins or workflows.

Code Comparison

Dataview:

// Query all notes with a "todo" tag

Obsidian Calendar Plugin:

// Render a calendar view

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Obsidian Dataview

Treat your Obsidian Vault as a database which you can query from. Provides a JavaScript API and pipeline-based query language for filtering, sorting, and extracting data from Markdown pages. See the Examples section below for some quick examples, or the full reference for all the details.

Examples

Show all games in the game folder, sorted by rating, with some metadata:

```dataview
table time-played, length, rating
from "games"
sort rating desc
```

Game Example


List games which are MOBAs or CRPGs.

```dataview
list from #game/moba or #game/crpg
```

Game List


List all markdown tasks in un-completed projects:

```dataview
task from #projects/active
```

Task List


Show all files in the books folder that you read in 2021, grouped by genre and sorted by rating:

```dataviewjs
for (let group of dv.pages("#book").where(p => p["time-read"].year == 2021).groupBy(p => p.genre)) {
	dv.header(3, group.key);
	dv.table(["Name", "Time Read", "Rating"],
		group.rows
			.sort(k => k.rating, 'desc')
			.map(k => [k.file.link, k["time-read"], k.rating]))
}
```

Books By Genre

Usage

For a full description of all features, instructions, and examples, see the reference. For a more brief outline, let us examine the two major aspects of Dataview: data and querying.

Data

Dataview generates data from your vault by pulling information from Markdown frontmatter and Inline fields.

  • Markdown frontmatter is arbitrary YAML enclosed by --- at the top of a markdown document which can store metadata about that document.
  • Inline fields are a Dataview feature which allow you to write metadata directly inline in your markdown document via Key:: Value syntax.

Examples of both are shown below:

---
alias: "document"
last-reviewed: 2021-08-17
thoughts:
  rating: 8
  reviewable: false
---
# Markdown Page

Basic Field:: Value
**Bold Field**:: Nice!
You can also write [field:: inline fields]; multiple [field2:: on the same line].
If you want to hide the (field3:: key), you can do that too.

Querying

Once you've annotated documents and the like with metadata, you can then query it using any of Dataview's four query modes:

  1. Dataview Query Language (DQL): A pipeline-based, vaguely SQL-looking expression language which can support basic use cases. See the documentation for details.

    ```dataview
    TABLE file.name AS "File", rating AS "Rating" FROM #book
    ```
    
  2. Inline Expressions: DQL expressions which you can embed directly inside markdown and which will be evaluated in preview mode. See the documentation for allowable queries.

    We are on page `= this.file.name`.
    
  3. DataviewJS: A high-powered JavaScript API which gives full access to the Dataview index and some convenient rendering utilities. Highly recommended if you know JavaScript, since this is far more powerful than the query language. Check the documentation for more details.

    ```dataviewjs
    dv.taskList(dv.pages().file.tasks.where(t => !t.completed));
    ```
    
  4. Inline JS Expressions: The JavaScript equivalent to inline expressions, which allow you to execute arbitrary JS inline:

    This page was last modified at `$= dv.current().file.mtime`.
    

JavaScript Queries: Security Note

JavaScript queries are very powerful, but they run at the same level of access as any other Obsidian plugin. This means they can potentially rewrite, create, or delete files, as well as make network calls. You should generally write JavaScript queries yourself or use scripts that you understand or that come from reputable sources. Regular Dataview queries are sandboxed and cannot make negative changes to your vault (in exchange for being much more limited).

Contributing

Contributions via bug reports, bug fixes, documentation, and general improvements are always welcome. For more major feature work, make an issue about the feature idea / reach out to me so we can judge feasibility and how best to implement it.

Local Development

The codebase is written in TypeScript and uses rollup / node for compilation; for a first time set up, all you should need to do is pull, install, and build:

foo@bar:~$ git clone git@github.com:blacksmithgu/obsidian-dataview.git
foo@bar:~$ cd obsidian-dataview
foo@bar:~/obsidian-dataview$ npm install
foo@bar:~/obsidian-dataview$ npm run dev

This will install libraries, build dataview, and deploy it to test-vault, which you can then open in Obsidian. This will also put rollup in watch mode, so any changes to the code will be re-compiled and the test vault will automatically reload itself.

Preparing for creating pull requests

If you plan on doing pull request, we would also recommend to do the following in advance of creating the pull request:

foo@bar:~$ npm run dev
foo@bar:~$ npm run check-format
foo@bar:~$ npm run format
foo@bar:~$ npm run test

The third step of npm run format is only needed if the format check reports some issue.

Installing to Other Vaults

If you want to dogfood dataview in your real vault, you can build and install manually. Dataview is predominantly a read-only store, so this should be safe, but watch out if you are adjusting functionality that performs file edits!

foo@bar:~/obsidian-dataview$ npm run build
foo@bar:~/obsidian-dataview$ ./scripts/install-built path/to/your/vault

Building Documentation

We use MkDocs for documentation (found in docs/). You'll need to have python and pip to run it locally:

foo@bar:~/obsidian-dataview$ pip3 install mkdocs mkdocs-material mkdocs-redirects
foo@bar:~/obsidian-dataview$ cd docs
foo@bar:~/obsidian-dataview/docs$ mkdocs serve

This will start a local web server rendering the documentation in docs/docs, which will live-reload on change. Documentation changes are automatically pushed to blacksmithgu.github.io/obsidian-dataview once they are merged to the main branch.

Using Dataview Types In Your Own Plugin

Dataview publishes TypeScript typings for all of its APIs onto NPM (as blacksmithgu/obsidian-dataview). For instructions on how to set up development using Dataview, see setup instructions.

Support

Have you found the Dataview plugin helpful, and want to support it? I accept donations which go towards future development efforts. I generally do not accept payment for bug bounties/feature requests, as financial incentives add stress/expectations which I want to avoid for a hobby project!

Support @blacksmithgu:
paypal

Support @holroy:
Buy Me A Coffee