Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/rules/code-styles.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Conventions for NoteRoot code. They describe how the code is written today. When

## Formatting

Prettier decides (`.prettierrc`): 2 spaces, double quotes, semicolons, line width 100, trailing commas where ES5 allows them, CRLF line endings (`.editorconfig`). Prettier is a dev dependency: run `npm run format` after editing and before finishing (`npm run format:check` only checks). `media/` (the webview page) is not formatted by it. Always use braces for `if`, `for` and `while` (`curly` is a lint rule). Use `===` (`eqeqeq`).
Prettier decides (`.prettierrc`): 2 spaces, double quotes, semicolons, line width 100, trailing commas where ES5 allows them, CRLF line endings (`.editorconfig`). Prettier is a dev dependency: run `npm run format` after editing and before finishing (`npm run format:check` only checks). `webview/` (the pages of the webviews: .js and .css) is not formatted by it. Always use braces for `if`, `for` and `while` (`curly` is a lint rule). Use `===` (`eqeqeq`).

## Naming

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ jobs:
- name: Package
run: npx vsce package --no-dependencies --out noteroot.vsix

# The package holds only the bundle, media/, README, CHANGELOG, LICENSE and package.json, and stays small
# The package holds only the bundle, media/, webview/, README, CHANGELOG, LICENSE and package.json, and stays small
# (the screenshots in docs/ must never end up in it).
- name: Check the package contents
if: runner.os == 'Linux'
shell: bash
run: |
unexpected=$(unzip -Z1 noteroot.vsix | grep -v '/$' | grep -v -E '^(\[Content_Types\]\.xml|extension\.vsixmanifest|extension/(package\.json|readme\.md|changelog\.md|LICENSE\.txt|dist/extension\.js|media/.+))$' || true)
unexpected=$(unzip -Z1 noteroot.vsix | grep -v '/$' | grep -v -E '^(\[Content_Types\]\.xml|extension\.vsixmanifest|extension/(package\.json|readme\.md|changelog\.md|LICENSE\.txt|dist/extension\.js|media/.+|webview/.+))$' || true)
if [ -n "$unexpected" ]; then
echo "::error::Unexpected files in the package:"
echo "$unexpected"
Expand Down
3 changes: 2 additions & 1 deletion .vscodeignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Ship only the bundle, media/, README, CHANGELOG, LICENSE and package.json.
# Ship only the bundle, media/, webview/, README, CHANGELOG, LICENSE and package.json.
# Source maps stay out: the production build has none, and an old dev map must not slip in.
**
!dist/extension.js
!media/**
!webview/**
!README.md
!CHANGELOG.md
!LICENSE
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ All notable changes to NoteRoot are documented in this file.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/).

## [0.2.0] - 2026-10-21

### Added

- **Settings page** (**NoteRoot: Open Settings Page**, or the pencil button in the title bar of the Settings view): every setting in a tab of the editor, grouped, with a search box and an **Only changed** filter. Each setting shows its default and where its value comes from (this notes folder or your settings), has a **Reset** link and its own editor: a dropdown, a checkbox, a text box, or one line per entry for a list. A change is checked and saved at once, with the same rules as the Settings view.
- **Tags & Categories page** (**NoteRoot: Open Tags & Categories Page**, or the pencil button in the title bar of the Tags & Categories view): the categories with their files and keywords, the categories of every file, the tags with the notes that use them, the tag patterns and what they found, and the two switches of the automatic features. New, Rename, Keyword, Change File, Remove File and Delete ask the same questions as the view, and a note or a file opens from its link.

- **Copy as Encrypted Text** (right-click a note) puts the encrypted text of a note on the clipboard without changing the file, and **Decrypt Text from Clipboard** (Command Palette, or the `...` menu of the Notes view) asks for the key and shows the decrypted text in a read-only tab. Both use the same encryption as **Encrypt…**.

### Changed

- Development tools updated (eslint, typescript-eslint, prettier, vsce and the Node types). Nothing changes for the user.
- The pages of the Quick Note and of the two new tabs moved from `media/` to a folder of their own, `webview/`. Nothing changes for the user.

## [0.1.0] - 2026-10-12

First release.
Expand Down
11 changes: 7 additions & 4 deletions CLAUDE.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions MANUAL-TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,13 @@ NoteRoot has no automated tests, so check these by hand before a release. Press
- [ ] Every row opens the right editor (choice, text, number, list, switch, action) and rejects bad input with a message.
- [ ] **Reset to Default** appears only on changed rows; the folder value is removed first, a second reset removes the user value. Rows show **· this folder** when the notes folder has its own value.
- [ ] A change made in the VS Code Settings editor shows up in the panel at once.
- [ ] The pencil button of the Settings view opens **NoteRoot Settings** in an editor tab (a second click shows the same tab). Every kind of row can be changed there (select, checkbox, text box on Enter or leaving it, list with **Apply** or Ctrl+Enter, **Change…** for the folder and the Quick Note file); a bad value shows a message under the row and is not saved; **Reset** and the search box and **Only changed** work; a change made in the Settings view shows up in the page and the other way round.

## Tags & Categories page

- [ ] The pencil button of the Tags & Categories view opens **NoteRoot Tags & Categories** in an editor tab (a second click shows the same tab). Categories, tags, patterns and the **Every file** list match the view; the counts appear a moment after the lists.
- [ ] New, Rename, Keyword, Change file, Remove file / keyword and Delete ask the same questions as the view and the page updates at once; the two switches turn the automatic features on and off; a note, a category file and a tag of a pattern open from their links.
- [ ] A change made in the view, in the Quick Note panel or in the config file shows up in the page; with no notes folder the page offers **Select Notes Folder**.

## Encryption

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ Your notes are plain files in a folder you pick. NoteRoot is built so you can tr

- **Sync.** Push your notes to GitHub and pull them on another computer, with no git and no other app. It can be encrypted. See below.
- **Settings panel.** Every setting is in one panel, with its value: click a row to change it, right-click to reset it or show it in the VS Code Settings editor. Settings that belong to your notes are saved in the notes folder, so they travel with it (and with Sync); those are not in the VS Code Settings editor. The panel has four groups:
- **Settings page.** The pencil button of the Settings panel opens all settings in an editor tab, with search, an *Only changed* filter, defaults and Reset.
- **Tags & Categories page.** The pencil button of the Tags & Categories panel opens everything in an editor tab: categories, tags, tag patterns, the categories of every file and the two automatic switches, with their notes and files.
- **Notes:** the notes folder, sort order, default extension, hidden files and folders, the large file warning, the note header and which file types count as notes.
- **Quick Note:** the Quick Note file, where new notes go (start or end), the heading and date format above each note, the line with the tags, and *Tag when saving*.
- **Tags & Categories:** the Advanced options, *Category for every file* and *Tag from pattern* switches (and whether they start on), and the files and folders that are never tagged automatically.
Expand All @@ -78,6 +80,8 @@ Open the **Actions** panel and choose **Connect to a Sync Service**. VS Code sig

Right-click a note and choose **Encrypt…**, then type a master key twice. The note is renamed `name.ext.enc` and shows a lock. Click it (or **Decrypt for Viewing…**) to read it in a read-only editor that exists only in memory; **Decrypt Permanently…** restores the note.

To send a note to someone, right-click it and choose **Copy as Encrypted Text…**: the encrypted text goes to the clipboard and the note stays as it is. The other person copies it and runs **NoteRoot: Decrypt Text from Clipboard…** (Command Palette, or the `...` menu of the Notes view; they need NoteRoot and the key).

- AES-256-GCM, with a key from your master key by scrypt. Tampering is detected. The file name and size stay visible.
- **The key is never stored and cannot be recovered. If you forget it, the note is lost.** Old copies (Local History, Git, backups) may still hold the plain text.
- Without the extension, `tools/decrypt.js` (Node.js) or `tools/decrypt.ps1` (PowerShell on Windows) decrypt a note. No independent security review yet.
Expand Down
Loading
Loading