VNote

app.vnote.fun/en_us
VNote

A free, open-source note-taking application built with Qt, focused on providing a pleasant Markdown editing experience. It manages notes directly as plain text files on your local system.

Open Source

VNote Source Code

Author

vnotex

Description

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

#editor#markdown#mathjax#note#note-taking#uml#vim#vnote

Homepage

https://app.vnote.fun

License

LGPL-3.0

Created

05 Oct 16

Last Updated

25 Jun 26

Latest version

v3.20.1

Primary Language

C++

Size

72,440 KB

Stars

12,841

Forks

1,293

Watchers

12,841

Language Usage

Language Usage

Star History

Star History

Recent Commits

  • Le Tan (24 Jun 26)

    refactor(assets): use short hex random names for inserted images and attachment folders FileUtils2::generateRandomFileName now emits a lowercase hex number in 0x0-0xffff (e.g. a3f.png) instead of a long timestamp+decimal name. Per-note vx_assets/ folders make short names viable; collisions are handled downstream (vxcore _N for images, generateUniqueFileName _N for attachment folders). Rewired the two image/attachment call sites from legacy FileUtils to FileUtils2.

  • Le Tan (24 Jun 26)

    fix(notebook): disable DB/recycle-bin menu actions when no notebook Rebuild Database, Open Recycle Bin and Empty Recycle Bin are gated on an active notebook. Empty Recycle Bin is additionally disabled for read-only notebooks. Initial state is applied at menu setup so the actions start disabled on launch with no notebook.

  • Le Tan (23 Jun 26)

    fix(vxcore): reconcile notebook session-record id (fix notebook reappearing after close) Bumps libs/vxcore to d0c947a so a closed notebook no longer reappears on restart when its session-record id diverged from vx_notebook/config.json (e.g. OneDrive overwrote config.json on another device).

  • Le Tan (23 Jun 26)

    test(notebook): regression for NotebookNodeModel empty-state reset

  • Le Tan (23 Jun 26)

    fix(notebook): clear explorer when last notebook is closed

  • Le Tan (23 Jun 26)

    feat(mainwindow): wire FirstRunController and surface default notebook

  • Le Tan (23 Jun 26)

    feat(controllers): add FirstRunController for default notebook bootstrap

  • Le Tan (23 Jun 26)

    feat(config): expose isVersionChanged() accessor on ConfigMgr2

  • Le Tan (23 Jun 26)

    test(core): assert App != Local config dirs; bump vxcore submodule Bump libs/vxcore: GetSessionConfigPath now resolves via the SSOT filename constants (fixing the session.json/vxsession.json drift), and the app/local data dirs are split into distinct subfolders in portable and test modes. Tighten testGetSessionConfigPath to require the real "vxsession.json" file name, and testGetDataPath to require App != Local unconditionally (the previous "|| contains(test)" escape hatch is obsolete now that test mode also splits the namespaces).

  • Le Tan (23 Jun 26)

    docs: add v4.1.0 changelog entry for VNote 4 release

  • Le Tan (22 Jun 26)

    fix(sync): persist and refresh Last Sync timestamp on two-phase sync The Sync Info dialog showed Last Sync as Never even after a successful Sync Now. The per-device last_sync_utc was never written on the production sync path: both manual and auto-sync use the two-phase API (StageOnly + NetworkPhaseOnly), neither of which persisted the timestamp (only the unused bundled TriggerSync did). Persist it on the GUI thread in SyncService::onSyncFinished (the shared completion tail for manual, auto, bootstrap-initial and post-conflict syncs) on VXCORE_OK, before emitting syncFinished. This keeps metadata.db single-threaded per notebook; writing from the sync worker would race the GUI-thread metadata.db accesses (open buffer, tags, getLastSyncUtc reads). NotebookSyncInfoDialog2::onSyncFinished now re-reads lastSyncTime() and updates the label live (without loadInitialData, so in-progress URL edits are preserved). Adds NotebookCoreService::setLastSyncUtc wrapping the new vxcore_sync_set_last_sync_utc C API. Bumps vxcore submodule.

  • Le Tan (22 Jun 26)

    fix(core): silence C4858 on fire-and-forget QtConcurrent::run Discard the [[nodiscard]] QFuture from the reorder worker with a (void) cast, matching the existing pattern in opennotebookcontroller.cpp. Avoids QThreadPool::start(Callable&&) since that overload is Qt 6.3+ only and VNote targets Qt 5/6.

  • Le Tan (22 Jun 26)

    build(vxcore): bump submodule for MaybeEnqueueSync comment fix

  • Le Tan (22 Jun 26)

    docs: document autoSyncDebounceSeconds debounce + autoSyncEnabled gate Correct the stale 'no Qt-side debounce timer' note; document the SyncService trailing-throttle debounce, read-on-demand cadence, bypass rules, and the boolean autoSyncEnabled gate.

  • Le Tan (22 Jun 26)

    test(sync): debounce test + rename updates + config round-trip Add test_sync_service_debounce (7 trailing-throttle cases via test seams). Add ConfigCoreService autoSyncDebounceSeconds round-trip + clamp coverage to test_configservice. Migrate clone/sync tests to the boolean autoSyncEnabled key.

  • Le Tan (22 Jun 26)

    feat(sync): global auto-sync debounce + autoSyncEnabled gate rename Add a global autoSyncDebounceSeconds setting (vxcore.json) consumed by SyncService as a per-notebook trailing-throttle debounce on the auto-sync path (re-check-and-re-arm at fire; manual Sync Now and post-reconcile bypass). Expose it as a General-settings spinbox via new ConfigCoreService accessors (clamped 0..86400; 0=immediate). Rename the clone-flow writer field intervalSeconds->autoSyncEnabled. Bumps libs/vxcore submodule pointer.

  • Le Tan (22 Jun 26)

    feat(controllers): reduced context menu for missing nodes

  • Le Tan (22 Jun 26)

    build(vxcore): bump submodule for phantom structural-op error code

  • Le Tan (22 Jun 26)

    fix(controllers): route phantom nodes to removal in paste/pin, flag missing on reopen

  • Le Tan (21 Jun 26)

    build(vxcore): bump submodule for missing-folder delete fix

  • Le Tan (21 Jun 26)

    test(integration): add Qt missing-node detection tests

  • Le Tan (21 Jun 26)

    feat(widgets): batch 'remove missing from index' prompt

  • Le Tan (21 Jun 26)

    feat(controllers): detect missing nodes + batch removal wiring

  • Le Tan (21 Jun 26)

    feat(views): render missing nodes dimmed in node delegate

  • Le Tan (21 Jun 26)

    feat(models): add IsMissingRole + populate/clear isMissing

  • Le Tan (21 Jun 26)

    feat(services): surface NODE_NOT_EXISTS + exists flag in notebook service

  • Le Tan (21 Jun 26)

    feat(services): surface NODE_NOT_EXISTS from buffer open

  • Le Tan (21 Jun 26)

    feat(core): add NodeInfo.isMissing transient flag

  • Le Tan (21 Jun 26)

    build(vxcore): bump submodule for missing-node detection API

  • Le Tan (21 Jun 26)

    feat(sync): prompt to complete sync info after opening a partial-sync notebook When a notebook is opened from a local folder and its sync backend is configured on disk but the PAT is missing from the keychain (sync state S2), auto-open NotebookSyncInfoDialog2 in bootstrap mode so the user can supply the PAT right away instead of having to find the Sync button. The prompt is driven off the authoritative reconcileFinished signal (emitted after the async credential lookup) rather than a synchronous classify after the open dialog closes, which would deterministically false-positive on a cold credential cache. A per-id pending set scopes the prompt to interactively-opened notebooks only, so the startup reconcile sweep never triggers a dialog storm, and a classify() re-check guards against transient keychain faults that also surface as VXCORE_ERR_SYNC_AUTH_FAILED. Adds real-classifier S2 detection plus prompt-gating mirror tests in test_notebook_explorer_sync_state (6 new cases, all passing).

VNote Security

4.5/10

Repo Security Summary

Updated 15 Jun 26

  • Security-Policy 10/10
  • Code-Review 0/10
  • Dangerous-Workflow 10/10
  • Maintained 10/10
  • Token-Permissions 0/10
  • Packaging N/A
  • CII-Best-Practices 0/10
  • SAST 0/10
  • Binary-Artifacts 10/10
  • License 10/10
  • Pinned-Dependencies 0/10
  • Branch-Protection N/A
  • Signed-Releases 0/10
  • Fuzzing 0/10

Security Advisories (2)

  • high Patched CVSS 8.6

    CVE-2024-41662 Markdown XSS leads to RCE

  • high Patched

    CVE-2024-39904 Code Execution Vulnerability via Local File Path Traversal in Vnote

VNote Website

Website

Viki - A simple Wiki page in Markdown from notebook of VNote

Redirects

Does not redirect

Security Checks

1 security checks failed (64 passed)

  • Top-Level Domain Highly Abused

Server Details

  • IP Address 185.199.108.153
  • Hostname cdn-185-199-108-153.github.com
  • Location California, Pennsylvania, United States of America, NA
  • ISP GitHub Inc.
  • ASN AS54113

Associated Countries

  • US US

Safety Score

Website marked as risky

70%

Blacklist Check

app.vnote.fun was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

VNote Reviews

More Digital Notes

  • Cryptee

    Cryptee

    crypt.ee

    Private & encrypted rich-text documents. Cryptee has encryption and anonymity at its core, it also has a beautiful and minimalistic UI. You can use Cryptee from the browser, or download native apps. Comes with many additional features, such as support for photo albums and file storage. The disadvantage is that only the frontend is open source. Pricing is free for starter plan, $3/ month for 10GB, additional plans go up-to 2TB.

    No Security Audit Not Open Source cryptee/web-client
  • Joplin

    Joplin

    joplinapp.org

    Cross-platform desktop and mobile note-taking and todo app. Easy organisation into notebooks and sections, revision history and a simple UI. Allows for easy import and export of notes to or from other services. Supports synchronisation with cloud services, implemented with E2EE.

    Security Audited Open Source laurent22/joplin
  • Logseq

    Logseq

    logseq.com

    Privacy-first, open-source knowledge base that works on top of local plain-text Markdown and Org-mode files. Supports lots of different note modes, including task management, PDF annotation, flashcards, whiteboards strong markdown support and more. Includes themes and extensions, backed by a strong community

    No Security Audit Open Source logseq/logseq
  • Notable

    Notable

    notable.md

    An offline markdown-based note editor for desktop, with a simple, yet feature-rich UI. All notes are saved individually as .md files, making them easy to manage. No mobile app, built-in cloud-sync, encryption or web UI. But due to the structure of the files, it is easy to use your own cloud sync provider, and additional features are provided through extensions.

    No Security Audit Open Source notable/notable
  • Obsidian

    Obsidian

    obsidian.md

    A powerful knowledge base that works on top of local plain-text Markdown files. It has a strong community, and a lot of plugins and themes. Generally privacy-respecting, but no encryption out of the box, and some of the code is obfuscated or not fully open source

  • Standard Notes

    Standard Notes

    standardnotes.com

    S.Notes is a free, open-source, and completely encrypted private notes app. It has a simple UI, yet packs in a lot of features, thanks to the Extensions Store, allowing for: To-Do lists, Spreadsheets, Rich Text, Markdown, Math Editor, Code Editor and many more. You can choose between a number of themes (yay, dark mode!), and it features built-in secure file store, tags/ folders, fast search and more. Standard Notes is actively developed, and fully open-source.

  • Turtle

    Turtle

    turtlapp.com

    A secure, collaborative notebook. Self-host it yourself, or use their hosted plan (free edition or $3/ month for premium).

    Security Audited Open Source turtl/desktop

About the Data: VNote

Change History

API

You can access VNote's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/vnote

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share VNote

Help your friends compare Digital Notes, and pick privacy-respecting software and services.
Share VNote and Awesome Privacy with your network!

View Digital Notes (8)