Logseq is a privacy-first, local-first platform for knowledge management, note-taking, and collaboration. Your notes are stored as an outliner — every line is a bullet (a block) that you can nest, link, tag, and query. Everything lives on your own device by default, in open formats, so your knowledge stays yours.
This guide covers everything you can do with Logseq: capturing notes, linking ideas, managing tasks, querying your knowledge base, annotating PDFs, reviewing flashcards, extending the app with plugins, and driving your graph from the command line. It is written against Logseq 2.0.1 (the "Database version").
Note
Logseq is offered as a desktop app (macOS, Windows, Linux), a mobile app (iOS, with Android in development), a web app, and a command-line tool. Most of this guide applies to all of them; platform-specific notes are called out where they matter.
1. Quick Start
Three steps to your first note:
- Download and install Logseq for your platform (see Installation).
- Open the app and create or open a graph — your personal knowledge base.
- Start writing. Type into today's journal. Press
Enterfor a new bullet,Tabto indent.
- Met with Sarah about the [[Q3 Roadmap]] #meeting
- She wants the mobile work prioritized
- TODO Draft the revised timeline
That tiny snippet already uses three of Logseq's core ideas: a page reference ([[Q3 Roadmap]]), a tag (#meeting), and a task (TODO). Each one becomes a connection you can navigate and query later.
Tip
You don't have to "file" notes into folders. Just write into the daily journal and link liberally with
[[ ]]and#. Logseq builds the structure for you — every linked page automatically collects everything that references it.
2. Core Concepts
Logseq works differently from a traditional notes app. Five ideas explain almost everything.
| Concept | What it is |
|---|---|
| Graph | Your entire knowledge base — all pages, blocks, and assets. You can have several. |
| Page | A named note. Journals (daily notes) are pages named by date. |
| Block | A single bullet point. The atomic unit — everything is a block, and blocks nest. |
| Reference | A link between blocks or pages: [[Page]], #tag, or ((block)). |
| Property | Structured key:: value metadata you can attach to any block or page. |
Graphs
A graph is a self-contained knowledge base. In Logseq 2.0 there are two kinds:
- DB graphs (the default in 2.0) — stored in a local SQLite database. Faster, support a richer data model (typed properties, tags as first-class nodes, tasks as structured data), and can sync across devices via RTC.
- File graphs (legacy) — stored as plain Markdown or Org-mode files in a folder on disk. Maximum portability and longevity.
Important
The DB version is in beta, and its mobile app and RTC sync are in alpha. Data loss is possible. Keep automated backups and consider using a dedicated test graph before moving important notes.
Blocks and the outliner
Every piece of content is a block — a bullet. Blocks nest infinitely, which is what makes Logseq an outliner rather than a document editor:
- Project Apollo
- Goals
- Land by Q4
- Stay under budget
- Risks
- Vendor lead times
You restructure your thinking by indenting (Tab), outdenting (Shift+Tab), and dragging bullets. Collapsing a parent hides its children, so a long outline stays scannable.
References and the power of backlinks
When you write [[Project Apollo]] anywhere, Logseq creates (or links to) a page called Project Apollo. Open that page and you'll see a Linked References section at the bottom listing every block, across your whole graph, that mentions it. This is the heart of Logseq: you never have to remember where you wrote something — the page gathers its own references automatically.
[[Page name]]— a page reference.#tag— a tag (a lightweight page reference;#[[Two words]]for multi-word tags).((block content))or the block-reference picker — a block reference to a specific bullet.
Properties
Properties attach structured data to a block or page using key:: value:
- Dune
author:: [[Frank Herbert]]
rating:: 5
status:: read
In DB graphs, properties are typed (text, number, date, node reference, checkbox, and more) and can hold one or many values. Properties power queries — you can ask "show me every book with rating 5" and get a live table.
3. Installation
Desktop
Tip
The fastest path is the official download page. Pick the installer for your operating system.
macOS
- Download the
.dmgfrom the latest release. - Open it and drag Logseq to your Applications folder.
- Launch it. On first run, approve the security prompt (Logseq is notarized).
Windows
- Download the
.exeinstaller from the latest release. - Run it and follow the prompts.
- Logseq updates itself automatically when new releases ship.
Linux
Use the automated installer script for the smoothest experience:
# Download and run the installer (system-wide)
curl -fsSL https://raw.githubusercontent.com/logseq/logseq/master/scripts/install-linux.sh | bash
# Install a specific version
curl -fsSL https://raw.githubusercontent.com/logseq/logseq/master/scripts/install-linux.sh | bash -s -- 0.10.14
# User-specific installation (no root required)
curl -fsSL https://raw.githubusercontent.com/logseq/logseq/master/scripts/install-linux.sh | bash -s -- --user
AppImage, Snap, and .zip builds are also published on the releases page.
Note
To try the newest DB version desktop builds before they reach the stable channel, download a build from the nightly release.
Mobile
The DB version ships a new mobile app, currently on iOS (Android is in development). It provides most of the desktop features. The alpha is invite-based via the project's sign-up form; check the project README for the current link.
Web
You can run Logseq entirely in a browser:
- The hosted DB test build lives at https://test.logseq.com/.
- You can self-host the web app with Docker (see the Admin Guide).
Warning
The web app uses the browser File System Access API to read and write a local folder. It requires a compatible browser (Chromium-based), and remote access requires HTTPS.
Command-line interface (CLI)
The logseq CLI is a Node.js program for scripting and automating your DB graphs. It is distributed as the logseq npm package. See The Logseq CLI for full usage.
4. Your First Graph
Creating or opening a graph
When Logseq starts, you choose a graph. For a DB graph, create a new one and give it a name (for example, personal). For a legacy file graph, point Logseq at a folder; it will read existing Markdown/Org files and watch that folder for changes.
Tip
Keep one main graph for everything. Logseq's linking makes a single large graph more useful than many small ones — connections only form within a graph.
The interface at a glance
- Left sidebar — navigation: Journals, your favorite/recent pages, and the graph switcher.
- Main area — the page you're editing (the journal by default).
- Right sidebar — a scratch space where you can pin pages, blocks, and search results side-by-side with your main view.
- Toolbar / top bar — global search, the command palette, settings, and graph view.
Journals: write first, organize never
The journal is today's page, named by date. It's the default landing spot and the recommended capture surface. Write meeting notes, ideas, and tasks into the journal as they happen, linking out to topic pages with [[ ]]. Those topic pages then accumulate everything you ever wrote about them, with no manual filing.
5. Everyday Writing
Editing blocks
| Action | How |
|---|---|
| New block | Enter |
| New line within a block | Shift+Enter |
| Indent block (make it a child) | Tab |
| Outdent block | Shift+Tab |
| Move block up / down | Alt+Shift+↑ / Alt+Shift+↓ |
| Collapse / expand children | Click the bullet's triangle, or `Tab` on the bullet |
| Select blocks | Esc to select the current block, then Shift+↑/↓ |
| Delete a block | Clear it and Backspace, or select and delete |
Tip
Click a bullet to zoom in — Logseq shows only that block and its children as a focused page. This is great for drilling into one branch of a big outline. Use the breadcrumb at the top to zoom back out.
Markdown formatting
Logseq supports standard Markdown inside blocks:
**bold** *italic* ~~strikethrough~~ `inline code`
[link text](https://example.com)
> a quote
Fenced code blocks with a language tag get syntax highlighting:
```python
def hello():
print("hi")
```
Other inline elements:
- Math via KaTeX:
$E = mc^2$inline, or$$ ... $$for a display block. - Highlights:
^^highlighted^^. - Images: paste or drag a file into a block; Logseq stores it in the graph's
assets/folder and inserts a reference.
Linking ideas
| Syntax | Result |
|---|---|
[[Page name]] |
Link to (and auto-create) a page |
#tag |
Tag the block; same as a page reference |
#[[Multi word tag]] |
Tag with spaces in the name |
(( then pick a block |
Reference a specific block |
[[ then type |
Autocomplete existing pages as you type |
Type [[ or # and Logseq pops up an autocomplete list of existing pages so you stay consistent instead of creating near-duplicate pages.
Slash commands
Type / inside a block to open the command menu. From there you can insert almost anything without memorizing syntax: tasks, scheduled/deadline dates, templates, queries, code blocks, embeds, the current time, page/block references, and more. Start typing to filter the menu.
The command palette
Press Ctrl/Cmd+Shift+P to open the command palette (cmdk) — a searchable list of every action in Logseq, including ones triggered by plugins. If you're not sure how to do something, open the palette and search for it.
6. Working With Tasks
Logseq has a full task and to-do system built on blocks.
Task states
Mark any block as a task by starting it with a status keyword:
- TODO Email the vendor
- DOING Write the proposal
- DONE Book the venue
Clicking the checkbox that appears cycles the task through its states. In DB graphs, tasks are first-class structured data: a task block is tagged #Task and carries a typed status and optional priority (low, medium, high, urgent).
Scheduling and deadlines
Give a task a date so it shows up on the right day:
- Scheduled — when you plan to work on it.
- Deadline — when it's due.
Insert these with the slash command (/Scheduled, /Deadline) or by typing the date. Scheduled and deadline tasks surface automatically in your journal and in queries, so today's journal becomes a live agenda.
Tip
Add a
/Todayor scheduled date to a task and it appears in your daily journal's task queries automatically — no need to copy it forward by hand.
Recurring tasks
Logseq supports repeating tasks with three distinct repeat semantics, modeled on Org-mode's repeater "cookies". When you mark a recurring task DONE, Logseq computes the next occurrence based on which cookie you chose:
| Intent | Cookie | Behavior |
|---|---|---|
| "Every 7 days from when I last did it" | .+ |
Next occurrence is one interval after your completion time. Best for habits. |
| "Every Monday" (keep the weekday) | ++ |
Advance from the scheduled date by whole intervals until it's in the future. This is the default. |
| "The 1st of every month" (fixed date) | + |
Next occurrence is exactly scheduled + one interval, even if that lands in the past (so it shows overdue immediately). |
Worked examples:
.+— A weekly task scheduled 2026-04-01, completed 2026-04-05 → next appears 2026-04-12. If you completed it 2026-04-20, next is 2026-04-27. The clock restarts at completion.++— A Monday standup scheduled 2026-04-06, completed Wednesday 2026-04-08 → next is Monday 2026-04-13. It keeps the same weekday.+— Rent due 2026-04-01, paid 2026-04-05 → next reminder 2026-05-01. Paid 2026-04-25 → still 2026-05-01. The date never shifts when you're late.
Note
A recurring task with no explicit cookie defaults to
++, preserving older behavior — nothing changes on upgrade. Pick a different semantic from the repeat-setting popover that appears when a task's repeat option is enabled.
7. Organizing and Finding Knowledge
Tags and pages
A tag is a page. #books and [[books]] point at the same page. So tagging is just lightweight linking: tag a block #books and it appears in the linked references of the books page. In DB graphs, tags are first-class nodes with their own properties and can define a small schema (which properties their members should have).
Properties as structure
Use properties to turn free-form notes into queryable data:
- The Pragmatic Programmer
author:: [[Andy Hunt]]
status:: reading
rating:: 4
Once a handful of book blocks carry status and rating, you can query for "books I'm currently reading" or "everything rated 5" and get a live, always-current list.
Search
- Global search (
Ctrl/Cmd+K) searches across all pages and blocks. As you type, it suggests pages, blocks, and commands. - Find/replace within a page and block-level navigation are available from the page menu.
Queries: ask your graph questions
Queries are Logseq's superpower. They embed a live, self-updating list of blocks that match criteria, right inside a page.
Simple queries use a readable syntax and are inserted with /Query:
{{query (and (task TODO DOING) (page "Project Apollo"))}}
{{query (property status "reading")}}
{{query (and [[meeting]] (between -7d today))}}
Advanced queries drop down to Datalog (the query language of the underlying DataScript/SQLite database) for full power — arbitrary joins, rules, and result transformation. You write them as a Clojure map with :query (and optionally :result-transform, :inputs) inside a {{query ...}} block. Advanced queries can express anything the data model supports.
Tip
Start with simple queries. Reach for advanced (Datalog) queries only when a simple query can't express what you need — for example, custom sorting, grouping, or cross-property logic.
The graph view
Open the graph view (the global graph icon) to see your knowledge base as an interactive node-link diagram: pages are nodes, references are edges. It's rendered with a force-directed layout, so densely connected clusters of related notes pull together visually. Click a node to jump to that page. Local graph view (on a single page) shows just that page's neighborhood.
8. Power Features
PDF annotation
Open a PDF inside Logseq and highlight passages directly. Each highlight becomes a block in your graph, linked back to the exact location in the PDF. You can write notes under a highlight, reference it elsewhere, and click it to jump straight back to the source page. This turns Logseq into a research and literature-review tool: your annotations live alongside the rest of your notes and show up in references and queries.
Flashcards (spaced repetition)
Logseq has a built-in spaced-repetition system. Turn any block into a flashcard by tagging it #card:
- What year did Logseq's DB version reach beta? #card
- 2026
A cloze-style card hides the child block (the answer) until you reveal it. Logseq schedules reviews using a spaced-repetition algorithm so you see cards just before you'd forget them. Start a review session from the journal's card widget or with a {{cards ...}} query.
Templates
Save a block (and its children) as a reusable template, then insert it anywhere with /Template. Templates are perfect for recurring structures — meeting notes, daily routines, book notes, project skeletons. A template can include properties and placeholder blocks so every new instance starts consistent.
Embeds and references
- Block embed — insert a live copy of another block (and its children) that stays in sync with the original.
- Page embed — embed an entire page inside another page.
- Use these to build dashboards: a single page that embeds your active projects, today's tasks, and a query of recent meetings.
Whiteboards and visual thinking
Depending on your build and graph type, Logseq offers a spatial canvas for arranging blocks and pages visually alongside the outliner. Where available, it's accessible from the left sidebar; blocks placed on the canvas remain real blocks in your graph.
Note
Feature availability varies between the file version and the DB version, and across desktop/mobile/web. If a feature described here isn't visible in your build, check that you're on a build where it has shipped.
9. The Logseq CLI
The logseq command-line tool lets you read and edit your DB graphs from scripts, terminals, and automation — without opening the app. It's a Node.js program (compiled from ClojureScript) that talks to a local db-worker-node server it manages for you.
Important
The CLI operates on DB graphs stored under your CLI root directory (default
~/logseq, with graph data in~/logseq/graphs/). It manages the background server automatically — you should not startdb-worker-nodeby hand.
Installing and running
The CLI is shipped as the logseq npm package (binary name logseq). After installation:
logseq graph list
If you built it from source, you can run it directly or link it globally:
node ./dist/logseq.js graph list # run directly
npm link # make `logseq` available globally
Check your build:
logseq --version
Build time: <timestamp>
Revision: <commit>
Configuration and precedence
The CLI reads configuration from <root-dir>/cli.edn (default ~/logseq/cli.edn). Settings can be overridden by environment variables, which are in turn overridden by global flags:
| Config key | Environment variable | Global flag |
|---|---|---|
:graph |
$LOGSEQ_CLI_GRAPH |
--graph |
:root-dir |
$LOGSEQ_CLI_ROOT_DIR |
--root-dir |
:output-format |
$LOGSEQ_CLI_OUTPUT |
--output |
:timeout-ms |
$LOGSEQ_CLI_TIMEOUT_MS |
--timeout-ms |
Precedence: global flag > environment variable > config file.
Other useful cli.edn keys: :output-format (:human default, or :json / :edn for scripting), :list-title-max-display-width (default 40), and :custom-queries (named queries you can run with query --name).
Tip
For scripting, set
--output json(or--output edn). Human output truncates long titles and renders relative times; JSON/EDN preserve full values and namespaced keys.
Choosing a graph
Most commands act on the current graph (set with graph switch) unless you pass --graph <name>. Graph names are user-facing (for example demo) and map to a directory under <root-dir>/graphs.
Command reference
Graph management
| Command | Purpose |
|---|---|
logseq graph list |
List all DB graphs |
logseq graph create --graph <name> |
Create a graph and switch to it |
logseq graph switch --graph <name> |
Set the current graph |
logseq graph remove --graph <name> |
Delete a graph |
logseq graph validate --graph <name> |
Validate graph data |
logseq graph info [--graph <name>] |
Show graph metadata |
logseq graph export --type edn|sqlite --file <path> [--graph <name>] |
Export a graph |
logseq graph import --type edn|sqlite --input <path> --graph <name> |
Import into a new graph |
graph create accepts --enable-sync (create, switch, upload, and start sync in one step) and --e2ee-password <password> (only with --enable-sync). EDN export also accepts --include-timestamps, --exclude-built-in-pages, and --exclude-namespaces <csv>.
logseq graph create --graph research
logseq graph export --type sqlite --file ./research-backup.sqlite --graph research
Note
graph createfails withgraph-existsif a local graph of that name exists.graph importand backup restore fail if the target graph already exists. Commands that need--graphreturngraph not existswhen the named graph is missing.
Backups
| Command | Purpose |
|---|---|
logseq graph backup list |
List snapshots under <root-dir>/graphs/<graph>/backup |
logseq graph backup create [--graph <name>] [--name <label>] |
Create a snapshot |
logseq graph backup restore --src <backup-name> --dst <graph-name> |
Restore into a new graph |
logseq graph backup remove --src <backup-name> |
Delete a snapshot |
Warning
A backup copies only
db.sqlite. The search index (search-db.sqlite) and client-ops log (client-ops-db.sqlite) are intentionally excluded — they rebuild from the main database. Desktop and CLI share the same backup layout, so the CLI can manage Desktop-created backups when it uses the same root directory.
Inspecting your graph
| Command | Purpose |
|---|---|
logseq list page |
List pages |
logseq list tag |
List tags |
logseq list property |
List properties (with TYPE and CARDINALITY) |
logseq list task [--status <s>] [--priority <p>] |
List #Task nodes |
logseq list node --tags <csv> --properties <csv> |
List nodes filtered by tags/properties |
logseq list asset |
List #Asset nodes |
logseq show --page <name> [--level <n>] |
Show a page's content tree |
logseq show --uuid <uuid> / --id <id> |
Show a block tree |
All list commands support --limit, --offset, --sort <field>, --order asc\|desc (default --sort updated-at --order desc), and --fields <csv>. For list node, --tags and --properties use all-of semantics and combine with AND.
logseq list task --status todo --priority high
logseq list node --tags book --properties status
logseq show --page "Project Apollo" --level 3
Searching
logseq search page --content "apollo" # pages by name (case-insensitive substring)
logseq search block --content "vendor" # blocks by title
logseq search tag --content "book" # tag pages
logseq search property --content "status" # property pages
Note
Search requires the
--contentflag. A legacy positional query (logseq search page apollo) is rejected with guidance to use--content.
Editing your graph
The upsert family creates or updates content. Without an explicit target, blocks default to today's journal page.
# Add a block to today's journal
logseq upsert block --content "Captured from the terminal"
# Add a child block to a specific page
logseq upsert block --content "Sub-point" --target-page "Project Apollo" --pos last-child
# Create or update a page, with tags and properties
logseq upsert page --page "Dune" --update-tags '[book]' --update-properties '{rating 5}'
# Create a task and attach #Task
logseq upsert task --content "Pay invoice" --scheduled "2026-07-01" --priority high
# Insert a tree of blocks from EDN
logseq upsert block --blocks-file ./outline.edn --target-page "Notes"
Other editing commands:
| Command | Purpose |
|---|---|
logseq upsert tag --name <name> |
Create or rename a tag |
logseq upsert property --name <name> [--type <t>] [--cardinality one|many] |
Create/update a property |
logseq upsert asset --path <file> [--target-page <name>] |
Add a file as an #Asset node |
logseq move --id <id> --target-page <name> [--pos ...] |
Move a block (and children) |
logseq remove --id <id>|--uuid <uuid>|--page <name> |
Remove a block or page |
--pos accepts first-child, last-child, or sibling. For upsert block/upsert page, modify tags and properties with --update-tags, --update-properties, --remove-tags, --remove-properties (EDN values). For tasks, set fields with --status, --priority, --scheduled, --deadline, and clear them with --no-status, --no-priority, --no-scheduled, --no-deadline.
Caution
--statusis not valid onupsert block— useupsert task --status .... For the same field, set and clear options are mutually exclusive (--status todo --no-statusis rejected).
Querying from the CLI
# Run a Datalog query
logseq query --query '[:find ?b :where [?b :block/title "Apollo"]]'
# Run a named query defined in cli.edn :custom-queries
logseq query --name overdue-tasks
# List available named queries
logseq query list
Cloud sync (RTC)
Logseq's Real-Time Collaboration (RTC) sync keeps a graph in step across devices and lets you collaborate with others. From the CLI:
logseq login # authenticate this machine
logseq sync upload --graph research # push local graph to the cloud
logseq sync start --graph research --e2ee-password <pw> # start live sync
logseq sync download --graph research # pull a remote graph into a new local graph
logseq sync status --graph research # show sync state
logseq sync remote-graphs # list graphs visible to your account
logseq sync grant-access --graph research --graph-id <uuid> --email <email>
Important
RTC graphs are end-to-end encrypted by default. Provide your encryption password via
--e2ee-passwordonsync start(it's verified and persisted) orsync download. A wrong password fails fast without overwriting the stored one. Runlogseq loginfirst in headless environments so password persistence works for later sync calls.
logseq logout removes the persisted credentials (~/logseq/auth.json).
Server, diagnostics, and utilities
logseq server list # list running db-worker-node servers
logseq doctor # runtime diagnostics (runtime bundle, permissions, server readiness)
logseq completion zsh # shell completion (zsh or bash)
logseq example upsert page # show runnable examples for a command
logseq skill install # install the agent skill into ./.agents/skills/
Set up shell completion by adding to your shell config:
# ~/.zshrc
autoload -Uz compinit && compinit
eval "$(logseq completion zsh)"
# ~/.bashrc
eval "$(logseq completion bash)"
Tip
Add
--verboseto any command to print structured debug logs to stderr, and--profileto print per-stage timing — useful when a command is slow or behaving unexpectedly.
10. Plugins and Themes
Logseq is extensible. A growing ecosystem of community plugins and themes adds features and changes how the app looks.
Installing plugins and themes
- Open the Marketplace from Settings → Plugins (or Themes).
- Browse or search, then click Install.
- Enable the plugin; some add slash commands, toolbar buttons, or new query types.
Switch themes the same way, or quickly with the theme toggle. Many plugins and themes are catalogued in the community Awesome Logseq list.
Warning
Plugins run with broad access to your graph and the app. Install plugins you trust, from sources you recognize, just as you would any third-party software.
For developers
Logseq exposes a plugin API (@logseq/libs) so you can build your own extensions in JavaScript/TypeScript — register slash commands, render custom UI, read and write blocks, and hook into editor events. Full documentation is at plugins-doc.logseq.com. For the architecture behind the API, see the Admin Guide.
11. Syncing, Backups, and Data Safety
Where your data lives
- DB graphs — a local SQLite database under your graphs directory (
~/logseq/graphs/<graph>for the CLI; the app stores desktop graphs under~/logseq/graphsas well). The disk SQLite file is the source of truth. - File graphs — plain Markdown/Org files in the folder you chose, plus an
assets/subfolder for attachments.
Because everything is local and in open formats, you can back it up with any tool you already use (Git, a cloud-synced folder, Time Machine, etc.).
Backups
Important
The DB version is in beta — back up regularly. Options:
- Turn on automated backups in settings.
- Use
logseq graph backup createfor snapshot copies ofdb.sqlite.- Use
logseq graph export --type sqliteor--type ednfor a portable copy.- For file graphs, version the folder with Git or sync it with your provider of choice.
RTC sync across devices
To use the same graph on several devices, set up RTC sync (alpha): upload the graph once, then start sync on each device. Sync is end-to-end encrypted; you control the password. See the CLI sync commands or the in-app sync settings.
12. Customization
Keyboard shortcuts
Almost every action has a keyboard shortcut, and you can rebind them. Open Settings → Keymap (or Shortcuts) to search and customize. Shortcuts can also be set in configuration using the :shortcuts map, where keys are command identifiers and values are key sequences:
{:shortcuts {:ui/toggle-theme "t z"
:ui/toggle-brackets "t b"}}
Settings and configuration files
- In-app settings cover the most common preferences (theme, font, journal format, editor behavior).
- Per-graph config lives in the graph's config (for file graphs,
logseq/config.edn). - Global config (
global-config.edn) applies to all graphs. A graph's own config overrides global keys, except that maps are merged — so a global:shortcutsmap and a per-graph:shortcutsmap combine rather than replace each other.
Tip
Use global config for preferences you want everywhere (custom shortcuts, default settings) and per-graph config for anything specific to one knowledge base.
13. Markdown Mirror & Interoperability
DB graphs can produce a Markdown Mirror — a Markdown representation of your DB content, so your notes remain readable and portable outside Logseq. Understanding its conventions helps when you read or sync these files:
- Page identity — mirror files begin with an id marker:
id:: 11111111-1111-4111-8111-111111111111. This links the file to its DB page; it is not a normal property. - Blocks use
-list items; two spaces per nested level define the hierarchy. - Properties use
*list items and keep thekey:: valuemarker. Page properties appear before the first block; block properties appear under their block. - References use
[[Page]]syntax (node property values export as[[Node title]], not((uuid))). - Tags appear inline on the block line:
- Call customer #sales. - Task status is encoded inline (
- TODO Write draft), not as a separate property.
Note
This is the on-disk text representation of a DB graph. For day-to-day use you edit in the app; the mirror exists for portability, diffing, and external tooling.
14. Troubleshooting
Error: Permission is not granted
Cause: The browser/web app needs read-write access to a folder via the File System Access API, and you declined or never granted the permission prompt.
Solution: Re-open the graph and approve the permission dialog. Grant read-write access to the folder.
Prevention: Use a compatible browser and don't dismiss the access prompt.
Logseq is slow to start or open
Cause: Very large graphs, or many heavy plugins, increase startup and load time.
Solution: Disable plugins you don't use; split rarely-touched archives into a separate graph; make sure you're on a recent build. Performance with large graphs is an area of active improvement.
Prevention: Keep an eye on plugin count and avoid embedding extremely large queries on your most-visited pages.
Editing a very large page lags
Cause: Pages with thousands of blocks, or many live queries/embeds, are expensive to re-render.
Solution: Break giant pages into linked sub-pages; collapse large branches; reduce the number of live queries on a single page.
Renderer stuck at 100% CPU / app becomes very slow
Cause: Occasionally a rendering loop or a problematic plugin/extension pins the CPU.
Solution: Restart the app. If it recurs, disable plugins one at a time to find the culprit, and update to the latest build.
Graph fails to load (folder name contains spaces, Windows)
Cause: Certain path edge cases (notably folder names with spaces on Windows in some versions) can prevent a file graph from loading.
Solution: Move the graph to a path without unusual characters, or update to a build where the issue is fixed.
Cannot install plugins (GitHub API check fails)
Cause: The plugin marketplace validates against the GitHub API, which can fail due to rate limits or network restrictions.
Solution: Wait and retry; ensure your network can reach GitHub; install the plugin manually from its release if needed.
CLI: graph not exists
Cause: A command that needs --graph named a graph that isn't in <root-dir>/graphs.
Solution: Run logseq graph list to see available graphs, and pass an existing --graph (or graph switch to set the current one). If you migrated from ~/.logseq, pass --root-dir / --config to point at your old locations.
CLI: e2ee-password-not-found
Cause: A sync command needs your end-to-end encryption password but none is stored.
Solution: Provide --e2ee-password <pw> on sync start or sync download. Run logseq login first so the password can be persisted for later calls.
CLI: graph-db-not-empty on sync download
Cause: The local target database already has data, so importing a remote snapshot would clobber it.
Solution: Download into a fresh graph name, or remove/rename the existing local graph first.
15. FAQ
Q: Is my data private? Where is it stored? Yes — Logseq is privacy-first and local-first. DB graphs are stored in a local SQLite database; file graphs are plain Markdown/Org files on your disk. Nothing leaves your device unless you opt into RTC sync (which is end-to-end encrypted).
Q: What's the difference between a DB graph and a file graph? DB graphs (the 2.0 default) use SQLite, are faster, and support typed properties, structured tasks, and RTC sync. File graphs store everything as Markdown/Org text files for maximum portability and longevity. Choose DB for power, file for plain-text purity.
Q: Is the DB version safe to put my real notes in? It's in beta (with mobile and RTC in alpha), so data loss is possible. Use it with automated backups, and consider a dedicated test graph before migrating critical notes.
Q: Do I have to use Markdown, or can I use Org-mode? File graphs support both Markdown and Org-mode. DB graphs use an internal model with a Markdown Mirror representation. You can write in whichever you prefer for file graphs.
Q: How do I move a note between pages?
You usually don't need to — references mean a block is "everywhere" it's linked. To physically relocate a block, drag its bullet, or use the CLI logseq move command.
Q: What's the journal for?
It's your daily capture page. Write everything there as it happens and link out with [[ ]]; topic pages then auto-collect their references. It removes the burden of deciding where to file things.
Q: How do queries stay up to date? Queries run live against the underlying database. When you add or change a matching block anywhere, the query result updates automatically — no refresh needed.
Q: Can I script Logseq?
Yes. The logseq CLI reads and edits DB graphs from the terminal (list, search, upsert, query, sync, export). It's ideal for automation, bulk edits, and integration with agents and other tools.
Q: How do flashcards work?
Tag a block #card (with the answer as a child block). Logseq schedules it with a spaced-repetition algorithm and surfaces it for review when you're about to forget it.
Q: What happens to a recurring task when I finish it?
Logseq computes the next occurrence based on the repeat cookie: .+ (from completion), ++ (keep the weekday — the default), or + (fixed calendar date). See Recurring tasks.
Q: Can I use Logseq on my phone and desktop together? Yes, via RTC sync (alpha). The new mobile app is on iOS first, with Android in development.
Q: Where do I get help and find plugins? The official docs are at docs.logseq.com, the community forum at discuss.logseq.com, and the Awesome Logseq list catalogs plugins and themes.