Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Syntax Tree Generator

maxime danielmaxime daniel53 downloads

Generate a syntax tree from text in your documents.

Add to Obsidian
Syntax Tree Generator screenshot
  • Overview
  • Scorecard
  • Updates2

this project is a port of syntree (also known as https://mshang.ca/syntree/) to an obsidian plugin.

how to use

Simply write your syntax tree in labelled bracket notation, and sourround it by three ticks (`) above and below, alongside the "syntree" indicator, like in the following example :

example text example diagram

Labelled bracket notation

Your basic constituent looks like this: [X Y]

X is the category label. Y represents the content. X can be any string of Unicode characters, not including square brackets or spaces. Typical examples might include NP, N', and N. The content Y is any string of Unicode characters, including spaces. The app looks for the first space to determine where X ends and Y begins. In addition, Y can contain any number of other constituents, which should also be given in labelled bracket notation. Here are a few examples:

[ [NP Alice] ] --- X is NP, Y is Alice.

[ [NP [N Alice] and [N Bob] ] ] --- Here, there are three constituents. The whole string is one constituent, with X = NP and Y = "[N Alice] and [N Bob]". Another constituent is [N Alice], with X = N and Y = Alice. The final constituent is [N Bob], with X = N and Y = Bob.

Triangles

Often, in linguistics, if you don't want to fully flesh out a tree, you indicate this with a triangle. In order to draw triangles with this app, include a caret ^ anywhere in the category label X. This indicates that a triangle should be drawn between the present node and any of its children, i.e. between the category label and the content.

example: [parent^ child] triangle

Movement lines and subscripts

This app has basic support for drawing movement lines. To show movement, mark the head of the movement with an underscore followed by a tag after the category label (e.g. [X_a Y]). Mark the tail with the same tag between angled brackets (e.g. [W tr<a>]). The head constituent can not be an ancestor of the tail. Tags can only consist of letters and numbers. Tags that consist of only numbers will appear in subscript after the category label. In other words, if NP_1 is a category label, it will appear as NP1.

Example: [CP [NP^_1 What] [C' [C_b did] [IP_2 [NP^ you] [I' [I tr<b>] [VP [V' [V eat] tr<1>]]]]]] subscript and movement lines

Although subscripts are technically only allowed in category labels, you can cheat by creating a constituent with no content, like this: [NP [PRO_1]]. This tricks the app into thinking that PRO is a category label, but in the resulting tree, it will look like content with a subscript. However, this only works if the "fake label" is only one word. Otherwise, it will be split up into label and content at the first space.

terminal lines

there is an option to enable or disable terminal lines. The term "terminal node" refers to an element of the tree that doesn't have any children. Any other node is a "non-terminal node." On: Terminal nodes are treated exactly the same as non-terminals with respect to placement and line drawing. Off: Terminal nodes are placed on a new line after their parents, and no lines will be drawn between them. This option only affects terminal nodes that have no siblings. Otherwise, it would look silly. Also, it does not affect terminal nodes that have triangles drawn to them.

misc quality of life features

add a silent head : [root \0] silent head

use brackets in node names : [root {child}] brackets in node

you can even use space and intendations in your labelled bracket notation

[CP [C'
    [C+V+T_2 \0+BE+{pres}]
    [TP
        [DP^ Sarah]
        [T'
            tT<2>_1
            [VP [V'
                tV<1>
                [VP
                    [V'
                        [V eating]
                        [DP^ fruit]
                    ]
                ]
            ]]
        ]
    ]
]]

becomes complex example

HealthExcellent
ReviewPassed
About
this project is a port of syntree to an obsidian plugin. Generate syntax trees for your documents in labelled bracket notation direclty in obisidian
VisualizationUtilitiesMarkdown
Details
Current version
1.1.0
Last updated
3 weeks ago
Created
3 weeks ago
Updates
2 releases
Downloads
53
Compatible with
Obsidian 1.13.0+
Platforms
Desktop only
License
MIT
Report bugRequest featureReport plugin
Author
maxime danielmaxime danielmax-208
GitHubmax-208
  1. Community
  2. Plugins
  3. Visualization
  4. Syntax Tree Generator

Related plugins

Chessboard Viewer

Render chess positions diagrams in note preview.

Excalidraw

Visual PKM powerhouse. Create and edit Excalidraw drawings.

Advanced Canvas

Supercharge your canvas experience. Create presentations, flowcharts and more.

ExcaliBrain

An interactive, structured mind-map of your Obsidian vault.

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Breadcrumbs

Visualise the hierarchy of your vault using a breadcrumb trail or matrix view.

Mermaid Tools

Improved Mermaid.js experience: visual toolbar with common elements and more.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Maps

Adds a map layout to bases so you can display notes as an interactive map view.

Lazy Loader

Load plugins with a delay on startup, so that you can get your app startup down into the sub-second loading time.