nvPY is a cross-platform Simplenote client that treats ugliness as a feature
Simplenote syncing note-taking application, inspired by Notational Velocity and ResophNotes, but uglier and cross-platformerer.
At a glance
- What is it?
- nvPY is a Tkinter note taking app that syncs with Simplenote, keeps its own database on disk, and searches with a tag and phrase syntax. The interface is deliberately plain, the last tagged release is from 2023, and the repository license is filed as a custom one.
- Who is it for?
- nvPY fits a keyboard-first user on Linux, Windows or OS X who wants a local database of Simplenote notes and a tag aware search syntax without opening a web interface, and it installs through pip or a git clone with no build toolchain.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 69 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A Tkinter client with a deliberately plain interface
nvPY is a note taking tool that syncs with Simplenote, inspired by Notational Velocity on OS X and ResophNotes on Windows, and the README says the inspiration was diluted a little by nvALT. The author is blunt about the result: it is significantly uglier, but it is cross-platform. The README states you can run it on Linux, which was tested, on Windows, also tested, and on OS X, which was lightly tested.
The interface is built on Tkinter, and the setup metadata lists the keywords as simplenote, note-taking, tkinter, nvalt and markdown, with the GUI entry point declared as nvpy = nvpy.nvpy:main. There is a screenshot in the README from just before the 0.9.7 release, taken with the clam theme and the droid font, which is a fair representation of the visual style the author had in mind.
The project history is worth knowing because it explains the odd tone. Charl Botha wrote it because he needed a Simplenote client on Linux and did not mind ugliness. Sjaak Westdijk contributed significantly after the 0.8.5 release, and since version 1.0.0 the maintainer has been yuuki0xff, who is listed as the maintainer in the setup metadata.
A full sync on startup, then a local database in your home directory
The syncing model is the core of the design and the README explains it in plain terms. When nvPY starts, it performs a full sync automatically. The first run takes a while because it downloads all of your Simplenote notes, and later startups are much faster because the app maintains its own database on disk in your home directory.
While running, nvPY saves and syncs continuously, so there is no save command to remember. If you edit the same note in nvPY and in the web interface at the same time, the changes are merged as you work.
There is one gap in that story. If you add or delete notes from a completely different location, nvPY will not see it until the next full sync, and the README says that in the future this will happen automatically. Until then, a note deleted on another device stays visible in your local list until a restart.
That first full sync has a second cost beyond time. The theme section of the README warns that automatic full synchronisation at startup can reach the API rate limit, and recommends setting simplenote_sync = 0 while you customise things. A note-taking client that syncs on every launch will hit that limit if you restart it repeatedly while editing notes.
Account details live in a .nvpy.cfg file in your home directory
The configuration file is called.nvpy.cfg and sits in your home directory. The README shows the minimum version, which is only the account credentials.
[nvpy]
sn_username = your_simplenote_username
sn_password = your_simplenote_passwordThe example configuration shipped in the package, nvpy/nvpy-example.cfg, shows what else can be set: the font family and size, the widget theme, saving and loading notes as clear text, and disabling Simplenote syncing entirely.
Installation is not covered in the README itself, which points to a separate installation guide at docs/installation.rst. The README does mention the pip route, and says that after installing that way you start the application by typing nvpy. If you prefer to run from a git clone, you can invoke python on nvpy.py or on the nvpy package directory.
nvpyThe setup metadata lists the requirements as Python 3.10 or newer, with hard dependency on simplenote>=2.1.4, and Markdown and docutils marked as soft requirements that only affect the Markdown and reStructuredText rendering feature.
Search understands tags, words and quoted phrases
The keyboard handling is the part the project is actually built around, and the README frames it as lightning-speed note taking and management. As you type in the search bar, the list of matching notes is refined continuously.
The default search mode is called gstyle. It finds notes containing all the words you type, and it also understands tag filters and quoted phrases.
t:work t:leads python imaging "exact phrase"That query finds notes tagged with both work and leads that contain the words python and imaging in any order and anywhere, plus the exact phrase. The t: prefix is the tag filter, and the quoted string is matched literally.
Searching is case-sensitive by default, and the README notes that this has a significant effect on search speed, which is why a CS checkbox exists to toggle it. The repository also carries a benchmarks directory with sorter and notes list scripts, and the Makefile exposes a benchmark target that runs both. The screencast linked in the README shows the gstyle search mode in use.
The downside of the gstyle syntax is that it is not the same as what the web interface accepts, so a query that works in one place may behave differently in the other.
Two themes, and the warning to turn syncing off while you edit them
The README says nvPY was prepared with two themes, and they are configured in nvpy.cfg as a set of colour keys. The light theme is white on black text with a light blue selected note, and the dark theme inverts that with black background and white text.
text_color = black
selected_note_color = light blue
note_info_color = dark gray
highlight_note_info_color = light yellow
url_color = blue
background_color = white
highlight_background_color = yellowColour values accept three formats: a hex triplet such as #rrggbb, a shorthand hex triplet such as #rgb, and colour names. The README also carries a specific instruction for anyone editing themes, which is to set simplenote_sync = 0 to disable sync, because that prevents hitting the API rate limit through automatic full synchronisation at startup.
On Linux there is a separate short section about making the app less ugly, which involves setting the ttk theme to clam instead of default and choosing nicer fonts.
theme = clam
font_family = droid sans mono
font_size = 12
list_font_size = 12On Debian based systems the fonts-droid package has to be installed before droid sans mono can be selected, and the README suggests ubuntu mono as an alternative that works out of the box on Ubuntu.
Format, type check and test all live in the Makefile
The Makefile is short and shows how the project is developed. The default target runs formatting and then the tests, with yapf applying the formatting pass and mypy checking types across the package, the tests, the benchmarks and the debug utilities.
PYTHONPATH=.:$$PYTHONPATH mypy nvpy tests benchmarks debug-utilsThe test step runs the unittest discovery over the tests directory with coverage, then produces a coverage report and an HTML report.
PYTHONPATH=.:$$PYTHONPATH coverage run -m unittest discover -s tests -p '*.py'There are also benchmark targets for the sorters and the notes list, a docs target that serves the package documentation with pdoc on localhost port 8080. The presence of a debug-utils directory alongside the tests suggests the debugging scripts are kept in the repository on purpose.
The setup file also defines a dev extra with mock, yapf, pdoc3, mypy and coverage, plus type stub packages for Markdown, certifi, docutils and mock. That is the toolchain you need if you intend to contribute rather than only run the app.
Release history is old, licence classification is unclear
Maintenance status has to be read carefully here. The repository is not archived and the last push was on 2026-08-15, so work is still landing. The tagged releases tell a different story: v2.3.1 on 2023-09-29, v2.3.0 on 2023-09-24 and v2.2.0 on 2022-07-03. There is no release newer than September 2023, even though the code has moved since.
That gap matters for anyone who wants a pinned, reproducible install. The pip route gives you whatever the index holds, and the README points support questions at a public Google group with an RSS topic feed rather than at an issue tracker, so the project community lives off GitHub.
The licence is the other loose end. The repository licence field is recorded as a custom licence that GitHub cannot classify, and the LICENSE.txt file sits at the top level. The setup metadata declares the licence as BSD, and the disclaimer in the README refers to a liability clause at the end of the new BSD licence text in the COPYRIGHT file. So the metadata says BSD while the repository filing says something GitHub cannot categorise. If the licence terms matter to you, read LICENSE.txt directly rather than relying on either label.
Where nvPY beats the web interface, and where it loses
The honest comparison is against the Simplenote web interface and the vendor's own clients, and the difference in approach is what nvPY is built around. The web interface keeps your notes on a server and gives you the same search anywhere. nvPY keeps a local database in your home directory, gives you a full text query language with tags and exact phrases, and is driven entirely from the keyboard with no browser in the loop.
That buys offline access to your notes, a search speed the README is happy to discuss, and a program that starts fast after the first run because it is not re-downloading everything. It also gives up the zero-install nature of a web app and adds a dependency on a Tkinter toolchain being present on your system.
The cost of the local database is that it is a second copy of your notes on disk, and the README's disclaimer is emphatic about the consequences: if nvpy blows up your computer, loses your job or deletes all your notes, the author is not liable for anything. There is no documented encryption of the local database and no documented backup path beyond Simplenote itself.
If you only ever read notes on one machine, the web interface is simpler. If you take notes in bursts, search across years of them by tag, and want to stay on Linux, nvPY is the more specific tool.
Editorial conclusion
nvPY fits a keyboard-first user on Linux, Windows or OS X who wants a local database of Simplenote notes and a tag aware search syntax without opening a web interface, and it installs through pip or a git clone with no build toolchain. It does not fit anyone who wants a maintained release line, since the newest tag is v2.3.1 dated 2023-09-29 while the last push to the repository was on 2026-08-15, and it does not fit a team that needs a clear licence position without reading LICENSE.txt yourself. Before adopting it, create a .nvpy.cfg with your sn_username and sn_password, wait through the first full sync, and set simplenote_sync = 0 while you tune the theme so you do not hit the API rate limit.
Frequently asked questions
How do I install and configure nvPY?
The README points to an installation guide at docs/installation.rst and mentions installing with pip, after which you start the app by typing nvpy. Configuration lives in a .nvpy.cfg file in your home directory, and you can run from a git clone by invoking python on nvpy.py.
What Python version and packages does nvPY need?
The setup metadata declares python_requires of 3.10 or newer, with simplenote>=2.1.4 as a hard requirement. Markdown and docutils are listed but described as optional, affecting only the Markdown and reStructuredText rendering feature.
How does the nvPY search syntax work?
The default gstyle mode finds notes containing all the words you type, supports t: prefix filters for tags and matches quoted strings as exact phrases. Searching is case-sensitive by default, and the README notes that case sensitivity has a significant effect on search speed, so a CS checkbox toggles it.
Does nvPY keep my notes on my own machine?
Yes. After the first run, which downloads all notes and can take a while, nvPY maintains its own database on disk in your home directory, and it continuously saves and syncs changes to disk and to Simplenote while running.
When was the last nvPY release?
The newest tagged release is v2.3.1 dated 2023-09-29, before v2.3.0 on 2023-09-24 and v2.2.0 on 2022-07-03. The repository itself is not archived and the last push was on 2026-08-15.
Official sources
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.
[](https://hysenlabs.com/projects/cpbotha-nvpy)Was this useful?