InkStone

Obsidian Bases

Contents

InkStone can publish Obsidian .base files as filtered, sorted HTML tables. A Base is a YAML file that describes a database view over your vault notes — InkStone evaluates the filters and renders the result as a <table> inside a regular post page.


Publishing a base

The recommended way to publish a base is the filename marker: rename the file so it ends with __website before the .base extension.

All Posts__website.base

The page title is everything before __website — in this case "All Posts". The base is served at the same URL an .md file in the same folder would produce.

Why the filename marker?

Obsidian Bases does not support arbitrary YAML keys — a website: true field in the .base YAML may be stripped when Obsidian re-saves the file. The filename marker survives re-saves.

Featuring on listing pages

Add __featured to the filename to pin the base in the Featured section of the parent listing:

All Posts__website__featured.base

The suffixes can appear in either order.

Legacy: website: true YAML field

Adding website: true to the .base YAML still works as a fallback:

website: true
title: All Posts

Use the filename marker for new bases — the YAML field is there for backwards compatibility.


Base YAML structure

A .base file is a YAML document. InkStone reads the following top-level fields:

Field Purpose
title Page title (overrides filename-derived title)
slug URL slug (auto-derived from title if omitted)
date Publication date (YYYY-MM-DD)
summary Shown on listing cards
tags Content tags
featured Alternative to __featured in filename
author Shown in post meta
banner Hero image URL
banner_x / banner_y Focal point for the banner (percentage, 0100)
type View type — currently only table is rendered
filters Array of filter conditions (see below)
columns Column definitions — field (required), name (display label)
sort Sort field
sortOrder "asc" or "desc"
limit Maximum number of rows

Filters

Filters are evaluated against the dataview_index (one record per published .md note). Each filter is an object with a type field.

file.hasTag()

Matches notes that have the given tag.

filters:
  - type: file.hasTag
    tag: python

file.tags.contains()

Same as file.hasTag() — alternate syntax accepted by InkStone.

filters:
  - type: file.tags.contains
    value: "python"

file.inFolder()

Matches notes whose vault path starts with the given folder prefix.

filters:
  - type: file.inFolder
    folder: blog

Property comparison

Compares a frontmatter field against a value. Supported operators: =, !=, <, <=, >, >=.

filters:
  - type: property
    field: status
    operator: "="
    value: published

and / or / not

Combine or negate filters:

filters:
  - type: and
    filters:
      - type: file.hasTag
        tag: python
      - type: file.inFolder
        folder: blog
filters:
  - type: not
    filter:
      type: property
      field: draft
      operator: "="
      value: true

Example

A base that lists all published blog posts tagged python, sorted by date descending, showing title and date columns:

title: Python Posts
date: 2026-04-30
type: table
filters:
  - type: and
    filters:
      - type: file.inFolder
        folder: blog
      - type: file.hasTag
        tag: python
columns:
  - field: title
    name: Title
  - field: date
    name: Date
sort: date
sortOrder: desc
limit: 20

Save this as Python Posts__website.base in your vault to publish it at /python-posts.


See also