logseq-schema
Logseq Schema
Overview
Use this skill to ground Datascript queries in Logseq's schema: core block/page/file attributes, built-in properties, built-in classes, and schema entities with :db/ident. Load references/logseq-datascript-schema.md for authoritative sources and query patterns, and
references/logseq-datascript-query-examples.md for scenario-based query examples.
Glossary
db/id: Internal numeric entity id (use with CLI flags like--id).:block/uuid: Stable UUID for a block entity; prefer when you need a persistent reference.:block/name: Lowercased page name, used for page lookup and joins.:block/title: Block or page title stored in the DB graph (use in queries when content text is needed).:block/tags: Ref-many attribute linking blocks to tag/page entities.:user.property/<name>: Namespace for user-defined properties stored directly on block entities.:logseq.property/*: Namespace for built-in properties stored directly on block entities.
Important Notes
- Never use following block attrs in
queryorpull, these attrs are file-graph only, never used in db-graphs::block/format,:block/level,:block/level-spaces,:block/pre-block?,:block/properties-order,:block/properties-text-values,:block/invalid-properties,:block/macros,:block/file,:block.temp/ast-body,:block.temp/ast-blocks,:block/marker,:block/content,:block/priority,:block/scheduled,:block/deadline,:block/properties,:block/left. - User properties are stored as
:user.property/<name>attributes on the block/page entity. - Pull selectors do NOT support namespace wildcards like
:user.property/*or:logseq.property/*. Only*(all attributes) or explicit attributes are allowed inpull. - To fetch user properties, either:
- Query datoms and filter attributes by namespace (e.g.,
user.property), then merge into the entity map, or - Discover explicit user property idents (via
:db/ident) and include them explicitly in the pull selector.
- Query datoms and filter attributes by namespace (e.g.,
- Property values are often entities/refs (not always scalars). When rendering values, check for
:block/title,:block/name, or:logseq.property/valueon the value entity before falling back to stringifying. - Many properties are
:db.cardinality/many(values may be sets/vectors). Treat them as collections in queries and formatting.
Datascript Query Mistakes To Avoid
- In
query:where/pull/find, attributes cannot use namespace wildcards (e.g.,:logseq.property/*,:user.property/*); you must use full attr:db/identvalues (e.g.,:logseq.property/status,:user.property/background). Inpull, only*(all attributes) is special. - Avoid nesting function calls inside predicates in
:where(some Datascript engines reject or mis-handle it). Bind the function result first, then compare.
Example of safe namespace filtering:
[:find [?a ...]
:where
[?e :db/ident ?a]
[(namespace ?a) ?ns]
[(= ?ns "user.property")]]
Workflow
1) Locate schema facts
- Open
references/logseq-datascript-schema.md. - Review the core attribute list and helper sets for ref/cardinality details.
- Review built-in properties and classes to understand available attributes and required fields.
2) Write or validate queries
- Prefer
:block/*attributes for block/page queries; use properties/classes only when needed. - If unsure about available
:db/idententities, run the CLI query listed in the references file. - For user properties, query against
:user.property/<name>directly; for built-ins, use:logseq.property/<name>.
3) Keep queries consistent with schema
- Respect ref vs scalar attributes and
:db.cardinality/manywhen joining. - Use property/class definitions to confirm public/queryable status before exposing a query to users.
Resources
references/
logseq-datascript-schema.mdlogseq-datascript-query-examples.md
Quick Examples
Pull user properties for a block
;; Discover idents, then pull explicitly.
[:db/id :block/title :user.property/background :user.property/notes]
Query blocks with a user property
[:find ?b ?v
:where
[?b :user.property/background ?v]]
Render a property value
Order of preference when value is a map/entity:
:block/title:block/name:logseq.property/value
More from rcmerci/skills
logseq-cli
Operate the current Logseq command-line interface to inspect or modify graphs, pages, blocks, tags, and properties; run Datascript queries; show page/block trees; manage graphs; and manage db-worker-node servers. Use when a request involves running `logseq` commands or interpreting CLI output.
31logseq-electron-debug
Run Logseq Electron dev build with a remote debugging port and attach Chrome DevTools (CDP) reliably.
6clojure-debug
Debugging workflow for Clojure/ClojureScript code. Use at the first sign of unexpected behavior or test failure in Clojure/CLJS, including any failing test, unexpected output, nils where data is expected, mismatched selectors, or unclear data flow—before making further implementation changes.
4clojure-malli
|
3clojure-paren-repair
Repair unbalanced parentheses, brackets, and braces in Clojure, ClojureScript, and EDN files. Use when you encounter delimiter mismatch syntax errors after editing .clj, .cljs, .cljc, or .edn files, or on clojure syntax errors.
3clojure-babashka-cli
Turn Clojure functions into CLIs with babashka.cli. Use when working with command-line argument parsing, building CLIs, subcommand dispatching, option validation, or creating tools with babashka/clojure.
3