Open-source project
vnotex/vnote avatar
vnotex/vnote

VNote: a Qt 6 note app with a native Typst backend and a heavier build

A pleasant note-taking platform in native C++.

13,041 stars1,299 forksC++LGPL-3.0

At a glance

What is it?
vnotex/vnote is an LGPLv3, C++ desktop note-taking application for Linux, Windows and macOS that now edits Markdown, Typst, plain text and mind maps and reads PDF. Recent versions raised the floor to Qt 6.9 and bundled a Rust-built Typst library, which widens what it can do and makes both old systems and source builds harder.
Who is it for?
VNote suits people who want a local, native desktop notebook that handles Markdown and Typst side by side, plus mind maps and PDF reading, on Linux, Windows or macOS. It is the wrong choice for Windows 7 machines or anyone tied to Qt 5.15.
Can I use it commercially?
Yes, with conditions. LGPL-3.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • vnotex/vnote13,041 ★ · +62
Star history
Repository2026-09-222026-11-13
vnotex/vnote13k13k

62 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

More than a Markdown editor: five document types in one notebook

VNote is a Qt-based, free and open source note-taking application that pairs note management with editors for several formats. Markdown notes can use the .md, .mkd, .rmd or .markdown extensions and are written, edited and previewed in the app. Typst documents (.typst) get a native Typst editor with a live PDF preview. Plain text and source files, including .txt, .log, .py, .cpp, .js, .json and .yaml, open as text notes, so logs and configuration files can live beside your writing. Mind maps in .mmm and .emind form have their own native editor. PDF files are handled by a built-in viewer for reading. That last distinction matters: the PDF support is a reader, not an editor, so annotated or edited PDFs still need another tool. The app runs on Linux, Windows and macOS.

The Qt 6.9 floor leaves Windows 7 and Qt 5.15 behind

Current VNote requires Qt 6.9 or newer, and Qt 5.15 and Windows 7 are no longer supported. For most users on a recent desktop this changes nothing, since the release builds come with what they need. It does matter in two situations. If you are on Windows 7, current releases are not for you, and you would need to stay on an older version with whatever problems that version had. If you package VNote for a Linux distribution that still ships Qt 5.15 or an older Qt 6, you cannot build current VNote against the system libraries, and you would have to provide a newer Qt yourself. The Qt modules needed are also specific: Core5Compat, SVG, WebChannel, WebEngineWidgets, PDF and LinguistTools, plus the matching Qt Gui private headers. A distribution that splits those into separate packages will need every one of them installed.

Stable releases and a continuous build that tracks master

There are two places to get binaries. Stable builds are at the latest release on GitHub or on the Gitee release page. The two newest stable tags are v4.13.0, published on 2 November 2026, and v4.12.0 from 29 October 2026, a gap of four days. Builds from the master branch are published under a release tagged continuous-build. That tag was created in December 2020, so its date in the release list looks old, but it is the slot where master builds are placed rather than a stale version. Pick continuous-build only if you want changes before they reach a stable tag and accept that it is whatever master holds at the time. The repository also has a Gitee mirror, which helps users who cannot reach GitHub reliably. The last push to master was on 2 November 2026.

Typst is compiled into VNote, not called as an external tool

VNote does not shell out to a typst CLI or a Tinymist installation; neither is needed. Instead, CMake builds the locked Rust dependencies into a shared library named vtextedit_typst, which is linked by VTextEdit, VNote's editor component, and bundled with the app. For anyone building from source, that means a Rust toolchain is mandatory. Install Rustup first, then the pinned toolchain, which is currently 1.99.0 as set in libs/vtextedit/tools/typst-backend/rust-toolchain.toml. On Linux and macOS:

bash
rustup toolchain install 1.99.0 --profile minimal
(cd libs/vtextedit/tools/typst-backend && cargo --version && rustc --version)

On Windows, PowerShell can call Rustup's binaries directly without a PATH change:

powershell
& "$env:USERPROFILE/.cargo/bin/rustup.exe" toolchain install 1.99.0 --profile minimal
Push-Location libs/vtextedit/tools/typst-backend
& "$env:USERPROFILE/.cargo/bin/cargo.exe" --version
& "$env:USERPROFILE/.cargo/bin/rustc.exe" --version
Pop-Location

The first build needs network access to fetch the Rust dependencies, so a fully offline build machine will fail on a clean checkout.

A stuck Typst call cannot be killed

The native Typst integration carries runtime trade-offs. Typst runs on bounded background threads inside VNote. When a compile hits a timeout, VNote discards the result, but it cannot forcibly stop the native call. On shutdown, the app waits for active calls to return. In practice, a Typst document that takes a long time to compile can keep working in the background after you have stopped caring about it, and can delay closing the app. The shared library is also required at startup, so a missing or broken vtextedit_typst library affects VNote as a whole, not just Typst notes. Native compiler faults can affect VNote too. Users who never touch Typst still depend on that library loading correctly.

Building from a fresh checkout: submodules, hooks and clean build directories

The development prerequisites are Git, CMake 3.21 or newer, Ninja, Python 3 and a compiler with C++20 support; the syntax indexer uses C++20 while VNote itself uses C++17. Windows builds need Visual Studio's Desktop development with C++ workload, the Windows SDK and a 64-bit MSVC Qt kit; the development setup uses Qt 6.10.3 MSVC2022 64bit with the x86_64-pc-windows-msvc Rust host. After cloning, run the initialization script, which initializes all git submodules, installs clang-format pre-commit hooks and sets up the vtextedit submodule hook:

bash
bash scripts/init.sh
cmd
scripts\init.cmd

In Qt Creator, open the root CMakeLists.txt, use Ninja, and give Debug and Release their own fresh build directories such as build-typst-debug and build-typst-release; reusing a stale cache from another toolchain is warned against. On Windows, add this CMake parameter to both profiles:

text
-DVTEXTEDIT_CARGO_EXECUTABLE:FILEPATH=%{Env:USERPROFILE}/.cargo/bin/cargo.exe

That parameter applies to new build directories only; an existing one needs its CMake configuration updated. Add -DVNOTE_BUILD_TESTS:BOOL=ON to Debug for tests, build the vnote and lrelease targets, and run vnote. A Windows smoke test for the Typst library runs from the repository root:

powershell
python scripts/e2e/smoke_typst_package.py --library build-typst-release/src/vtextedit_typst.dll

--no-single-instance does not protect your notes

VNote normally runs as a single instance. The --no-single-instance flag lets you start a second process by skipping the locking and IPC, which is useful when testing a development build next to your everyday copy. The flag does not isolate user data. Both processes still point at the same profile and notes, so a test build can write to the notebooks you rely on. For testing with throwaway data, follow the isolated GUI smoke recipe in tests/AGENTS.md, which sets up a disposable profile and notes.

LGPLv3 with separately licensed icon sets

VNote is licensed under the GNU LGPLv3, with the license text in COPYING.LESSER. Bundled third-party material carries its own terms: the Lucide icon set under ISC and MIT, and IconPark under Apache-2.0, both recorded in THIRD-PARTY-NOTICES.md. Anyone redistributing a modified build needs to carry those notices along with the LGPL obligations. The repository also contains a privacy_policy.md and a SECURITY.md at the root. Support runs through GitHub Issues and the maintainer's email address.

Editorial conclusion

VNote suits people who want a local, native desktop notebook that handles Markdown and Typst side by side, plus mind maps and PDF reading, on Linux, Windows or macOS. It is the wrong choice for Windows 7 machines or anyone tied to Qt 5.15. Before building from source, make sure you can install Qt 6.9+ with the WebEngine and PDF modules and the pinned Rust 1.99.0 toolchain, and that the first build has network access.

Frequently asked questions

What file formats can VNote open?

VNote edits Markdown (.md, .mkd, .rmd, .markdown), Typst (.typst) with a live PDF preview, plain text and source files, and mind maps (.mmm, .emind). PDF files open in a built-in viewer for reading.

What does VNote require to run or build?

VNote runs on Linux, Windows and macOS and requires Qt 6.9 or newer; Qt 5.15 and Windows 7 are no longer supported. Building from source also needs CMake 3.21+, Ninja, Python 3, a C++20 compiler and the pinned Rust 1.99.0 toolchain.

Where can I download VNote?

Stable builds are on the latest GitHub release or the Gitee release page; v4.13.0 was published on 2 November 2026. Builds from the master branch are in the continuous-build release.

Official sources

  1. License: LGPL-3.0
  2. Project website
  3. README
  4. Releases
  5. vnotex/vnote on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vnotex-vnote.svg)](https://hysenlabs.com/projects/vnotex-vnote)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/vnotex-vnote.svg)](https://hysenlabs.com/projects/vnotex-vnote)

Was this useful?