understanding-db-schema

Understanding Logseq DB Schema

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "understanding-db-schema" with this command: npx skills add c0ntr0lledcha0s/claude-code-plugin-automations/c0ntr0lledcha0s-claude-code-plugin-automations-understanding-db-schema

Understanding Logseq DB Schema

When to Use This Skill

This skill auto-invokes when:

  • User asks about Logseq's database schema or Datascript

  • Questions about built-in classes (Tag, Page, Task, Property, etc.)

  • Property type system questions (:default, :number, :date, :checkbox, etc.)

  • Entity relationship questions (block/tags, block/refs, block/parent)

  • Schema validation or Malli schemas

  • Node model or unified page/block concept

  • User mentions :db/ident , :logseq.class/* , or :logseq.property/*

Reference Material: See {baseDir}/references/built-in-classes.md for complete class hierarchy.

You have expert knowledge of Logseq's database schema architecture.

Datascript Foundation

Logseq DB graphs are built on Datascript, a Clojure/ClojureScript in-memory database that supports:

  • Entity-Attribute-Value (EAV) data model

  • Datalog queries

  • Schema-driven attribute definitions

Attribute Types

;; Value types :db.type/ref ; References to other entities :db.type/string ; Text values :db.type/long ; Integer numbers :db.type/double ; Floating point numbers :db.type/boolean ; True/false :db.type/instant ; Timestamps :db.type/keyword ; Clojure keywords :db.type/uuid ; UUIDs

;; Cardinality :db.cardinality/one ; Single value :db.cardinality/many ; Multiple values (set)

Core Reference Attributes

:block/tags ; Classes/tags assigned to the entity :block/refs ; Outgoing references to other entities :block/alias ; Alternative names for a page :block/parent ; Parent block in hierarchy :block/page ; Page containing this block

Built-in Classes Hierarchy

:logseq.class/Root ├── :logseq.class/Page ├── :logseq.class/Tag (classes themselves) ├── :logseq.class/Property ├── :logseq.class/Task │ └── Status, Priority, Deadline, Scheduled ├── :logseq.class/Query ├── :logseq.class/Asset ├── :logseq.class/Code-block └── :logseq.class/Template

All non-Root classes extend :logseq.class/Root via :logseq.property.class/extends .

Property Type System

Type Validator Closed Values Use Case

:default

text-entity?

✅ Text blocks with titles

:number

number-entity?

✅ Numeric values

:date

date?

❌ Journal page entities

:datetime

datetime?

❌ Time-based scheduling

:checkbox

boolean?

❌ Toggle properties

:url

url-entity?

✅ URL strings or macros

:node

node-entity?

❌ Block/page references

:class

class-entity?

❌ Class entities

Property Configuration Keys

{:db/ident :user.property/my-property :logseq.property/type :default ; Property type :logseq.property/cardinality :one ; :one or :many :logseq.property/hide? false ; Hide by default :logseq.property.ui/position :properties ; UI placement :logseq.property/closed-values [...] ; Restricted choices :logseq.property/schema-classes [...] ; Associated classes :block/title "My Property"} ; Display name

Property Namespaces

Namespace Purpose Example

logseq.property

Core system properties :logseq.property/type

logseq.property.class

Class-related :logseq.property.class/extends

logseq.property.table

Table views :logseq.property.table/columns

user.property

User-defined :user.property/author

plugin.property

Plugin-defined :plugin.property/custom

Schema Versioning

;; Version format {:major 65 :minor 12}

;; Stored in :logseq.kv/schema-version ; Graph's current version db-schema/version ; Expected version

Migrations handle schema upgrades between versions (65.0 → 65.12+).

Malli Validation Flow

  • Entity transformation: Properties → [property-map value] tuples

  • Schema dispatch: Validation dispatches on :logseq.property/type

  • Value validation: Individual values checked against type schemas

  • Cardinality handling: Automatic :many vs :one handling

  • Transaction validation: validate-tx-report ensures integrity

Node Model

Unified Node Concept

In DB version, nodes represent both pages and blocks:

Node ├── Page (unique by tag combination) │ ├── Journal pages (#Journal) │ ├── Regular pages (#Page) │ └── Class pages (#Tag) └── Block (within pages) ├── Content blocks ├── Property blocks └── Convertible to page via #Page tag

Page Uniqueness

Pages are unique by their tag combination:

  • "Apple #Company" ≠ "Apple #Fruit"

  • Both can coexist as separate entities

Common Patterns

Creating a Custom Class

;; Define a class with properties {:db/ident :user.class/Book :block/tags [:logseq.class/Tag] :block/title "Book" :logseq.property.class/extends :logseq.class/Root :logseq.property/schema-classes [:user.property/author :user.property/isbn :user.property/rating]}

Creating a Typed Property

;; Number property with choices {:db/ident :user.property/rating :block/title "Rating" :logseq.property/type :number :logseq.property/cardinality :one :logseq.property/closed-values [1 2 3 4 5]}

Resources

When users need more information, reference:

  • Logseq DB Documentation

  • Database Schema DeepWiki

  • Logseq DB Unofficial FAQ

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

writing-docs

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

investigating-codebases

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

managing-docs

No summary provided by upstream source.

Repository SourceNeeds Review