name: logseq-file-graph-knowledge description: Canonical guidance for Logseq file graphs (Markdown). Use this skill to avoid DB-graph assumptions. Covers tasks (markers), properties (key:: value), and query syntax ({{query ...}} and advanced queries).
Logseq File Graph Knowledge
This skill is the “ground truth” for working with Logseq file graphs (the classic graph type backed by Markdown files).
Many assistants confuse Logseq DB graphs with file graphs. When the user is in a file graph, use these rules.
Scope
- Graph type: file-based (Markdown files)
- Primary use case: everyday note-taking, tasks, GTD, dashboards
Tasks (File Graph)
Task markers
In file graphs, tasks are ordinary blocks prefixed with a marker keyword.
Common marker sequences:
LATER→NOW→DONETODO→DOING→DONE
Additional markers that may appear:
WAIT/WAITINGIN-PROGRESSCANCELED/CANCELLED
Creating and cycling markers
- Users can type the marker at the start of the block (e.g.,
TODO call Alice). - Users can also use the editor command (e.g.,
/TODO). - Users can cycle markers with
Ctrl/Cmd+Enter.
Priority
File graph tasks support priorities:
[#A](highest),[#B],[#C](lowest)
Example:
- TODO [#A] Finish weekly review
Scheduling and deadlines
In file graphs, scheduling is typically expressed via Logseq’s built-in SCHEDULED: and DEADLINE: syntax (inserted via /Scheduled and /Deadline).
Example:
- TODO Submit form
DEADLINE: <2026-01-10 Sat>
Properties (File Graph)
Block properties
Block properties are written as:
key:: value
Properties can appear:
- in the same block (inline), or
- in a child block (common for metadata)
Property naming rules (important)
- Property names are case-insensitive and normalized to lowercase.
- Property names with
_are normalized to-(e.g.,done_atbecomesdone-at). - Property values cannot contain newlines.
Values
Property values can include:
- plain text
- page references like
[[Project X]] - tags like
#inbox - links
To force a value to be treated as plain text (no page refs), wrap it in quotes:
source:: "[[Not a page]]"
Queries (File Graph)
Logseq supports two common query styles.
Simple query blocks
Use:
{{query ...}}
Examples:
{{query (task todo)}}
{{query (and (task todo doing) [[Project X]])}}
{{query (and (task todo) (priority a))}}
{{query (and [[inbox]] (task todo doing))}}
{{query (and (task todo) (not [[inbox]]))}}
Advanced queries
Use an advanced query block when simple query filters are not enough.
General shape:
#+BEGIN_QUERY
{:title "My query"
:query [:find (pull ?b [*])
:where
...]}
#+END_QUERY
Safe defaults for user-facing workflows
When you are building workflows for file graphs:
- Use markers (
TODO/DOING/DONE) for tasks. - Use child blocks with
key:: valuefor metadata. - Prefer simple
{{query ...}}blocks for dashboards. - Do not use DB-graph-only concepts like
#Taskclasses,Statusproperty tasks, or{:query ...}-only conventions.