Design the way
you
think
Verbweaver
is a writing and design platform that thinks in relationships (graphs). It's designed for writers, artists, engineers, developers, analysts, and anyone who wants to design things while linking every idea together and turning those ideas into manageable tasks. Think and take notes in a way that is natural to you. Then, when it comes time to communicate your ideas or information to other people, use the Compiler and the powerful templating engine to generate a linear document in various common filetypes.
Currently, the desktop application is in Beta and your feedback is greatly appreciated. The Desktop app works on Windows, MacOS, and Linux.
A self-hosted web server version with collaboration features is under development.
While Verbweaver is and will remain freely available, when version 1.0 of the desktop app is published it will be available on the Windows Store and Apple Store for those who wish buy a copy to support development or want the convenience of owning it in their operating system’s app store.
Everything is a node; a node is everything
Verbweaver uses a unified data model where every node (idea or piece of information) is a Markdown file with YAML metadata. Write whatever you want. Daily notes, task details, chapters of a book, technical findings, etc. That is the “content” of the node.
The content is written in Pandoc formatting, which supports advanced formatting such as tables, lists, images, links, and more. This formatting will be preserved when you export your project to your preferred filetype.
Meanwhile, the YAML metadata is used to track the status of the node as a Task, recording its status, start/due dates, assignee, comments, and more. You can also store custom variables in the metadata (such as chapter
and tension
in the example) that may be referenced by other nodes and document templates when it comes time to generate a document from your project.
--- id: node-1757717171182-23xpd5w title: Chapter 2 type: node description: A blank starting point. tags: - empty - basic created: '2025-09-12T22:46:11.182Z' modified: '2025-09-12T22:57:45.325Z' position: x: 987.3333333333335 'y': 178.48888888888888 links: - node-1757717219476-h6i6eb6 task: status: in-progress priority: medium assignee: '' dueDate: '2025-09-11' startDate: '2025-09-01' comments: [] files: [] priority: medium assignee: '' chapter: 2 tension: 2 --- # $title$ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi consequat diam eros, non sodales risus molestie ut. Quisque ipsum lorem, finibus laoreet consequat molestie, congue a orci. Quisque eu tincidunt odio. Sed at tempor urna. Nunc sem ante, aliquam quis finibus vestibulum, sollicitudin at lacus. Nunc vitae enim vitae ligula lacinia pulvinar. Aenean mattis turpis odio, eu tristique dui suscipit ut. Sed egestas lectus velit, id commodo nisi pellentesque ac. Etiam eget dignissim odio, at lacinia magna. Sed ut lectus porttitor, porttitor lorem ut, pretium orci. Nunc posuere diam turpis, eu ullamcorper lacus lobortis non. Quisque interdum ut mauris eget feugiat.
Task Management
Since nodes can have metadata, they can be tracked as tasks using a powerful suite of task management features.
Kanban Board: Track and visualize the state of each node as a Task using (customizable) columns
Calendar: See when tasks and easily schedule them
To-Do: Check off today’s tasks and see overdue tasks
Charts: Common project management charts (Gantt & Burndown) are automatically generated and can be exported to PNG
Version Control
All changes in a project are tracked (via Git). You can revert a file to a previous version, reset it to before it was changed, see a history of changes, and pull changes that others have made.
Since all of Verbweaver’s are flat, text-based files in a Git repository, you can easily make use of all of the powerful features of Git for collaboration and version control.
Procedurally generate documents
Once you have brain-dumped your ideas in whatever format works best for you, you may want to communicate (some) of it to other people. That’s the job for your favorite linear document format (Markdown, Word, PDF, ODT, EPUB). File type conversion is accomplished using Pandoc.
But how do you translate your nonlinear project to a linear format? Using the Compiler!
Select your nodes
Order your nodes
Pick a filetype
Pick from a (customizable) document template
Plug in variables used by the template
Procedurally generate a document
This powerful, template-based engine lets you construct flexible templates, reference variables, and embed logic to generate a document that is organized and formatted the way that you would prefer.
Note: Pandoc and some LaTeX tool are required in order to use the Compiler.
Template-driven
Compiler templates provide great flexibility and control over the structure and format of your document.
In the example to the right, we have a “Technical Report” template. This is designed to fill the need of a technical corporate report, such as a project update, penetration test or red team report, or documentation.
Since these templates are stored as Markdown files they may easily be copied and shared
--- title: $title$ author: $author$ date: $date$ summary: $summary$ variables: summary: type: string description: Executive summary paragraph. changelog: type: array item: type: object fields: date: { type: string } version: { type: string } author: { type: string } note: { type: string } stakeholders: type: array item: type: object fields: name: { type: string } role: { type: string } contact: { type: string } raci: type: table columnsDefault: ["Task"] nodeVariables: appendix: type: boolean label: Appendix description: Treat this node as an appendix section path: metadata.appendix default: false cvss_vector: type: string description: Optional CVSS v3 vector string from node metadata. path: metadata.cvss_vector cvss: type: number description: Optional CVSS base score from node metadata. path: metadata.cvss --- # $title$ ## Executive Summary $if(summary)$ $summary$ $endif$ ## Document Changelog | Date | Version | Author | Change | |------|---------|--------|--------| $for(changelog)$ | $it.date$ | $it.version$ | $it.author$ | $it.note$ | $endfor$ ## Stakeholder Registry | Name | Role | Contact | |------|------|---------| $for(stakeholders)$ | $it.name$ | $it.role$ | $it.contact$ | $endfor$ ## RACI Matrix $raci_markdown$ $for(nodes)$ $ifnot(nodes.vars.appendix)$ ## $nodes.title$ $nodes.content$ $endif$ $endfor$ $if(nodes)$ ## Appendices $for(nodes)$ $if(nodes.vars.appendix)$ ### $nodes.title$ $nodes.content$ $endif$ $endfor$ $endif$