Skip to content

Differences from Notepad++

This document lists the deliberate deviations from Notepad++. Nothing here is an omission by accident; the design traded the full Notepad++ feature set for a browser-compatible, minimal implementation built on Theia/Monaco.

Platform and architecture

Difference Rationale
No standalone multi-instance The browser app runs in a single tab and the desktop app runs one instance; workspace is shared, not per-instance.
Shared server/workspace model When served, the workspace is the directory on the server; Open from Computer / Save To This Computer... / Upload to Workspace... are the explicit bridges between local disk and the server workspace.
Browser-first target Some accelerators the browser claims can never reach the page - alternate chords are provided and the desktop build behaves like Notepad++ for those chords.
Built on Theia + Monaco 1.75 No fork of the editor engine; we adapt the UI and commands to match Notepad++'s UX.

UI and chrome

Difference Rationale
No activity bar, no right-hand panel (default), no breadcrumbs Shell chrome is reduced to Notepad++'s shape (menu, toolbar, editor area, status bar, folder/workspace panel, function list).
No Style Configurator Visual theming is limited to Notepadia Classic light/dark themes via CSS. No custom style schemes editor.
No Document List "Move To Another View" context quirks Only two panes are supported; Clone to Other View / Move to Other View are offered, with synchronized scrolling.
No separate multi-root Project Panels 1-3 Only Folder as Workspace is implemented (a single tree).
Document Map is preference-backed Mirrors editor.minimap.enabled and persists per profile; the code keeps it in sync across all editors.
Tab icons Red/blue floppy for saved/dirty, padlock for read-only; matches Notepad++'s visual language rather than VS Code's dot.
Show Wrap Symbol not offered Monaco 1.75 has no wrapping-indicator option the UI can bind. Show All Characters remains available from the toolbar and View ▸ Show Symbol.
Folding stops at level 7 Notepad++ lists eight fold levels; Monaco registers folding actions only for levels 1-7, so View ▸ Fold Level offers Alt+1..7 rather than binding an action that does not exist. Fold All / Unfold All (Alt+0 / Alt+Shift+0) are unaffected.
Difference Rationale
. matches newline is disabled The editor's search engine matches within a single line. The checkbox is shown disabled with an explanation rather than silently doing nothing.
Find-in-Files results header The workspace search backend reports the matches it found but never how many files it looked at; the header stops at in N files (no of N searched).
Incremental Search bar Live per-keystroke jumping from caret with wrap-around, Highlight all, red no match announced via aria-live, and Escape restores caret until a jump is accepted - this matches Notepad++'s behavior while adapting to Monaco.
Search Results window behavior F4/Shift+F4 walk hits with wrap-around, starting from caret when nothing is focused. A polite live region announces new counts when groups are added.

Languages, Function List, Mark

Difference Rationale
Curated language set (not all Monaco languages) 21 common languages with lightweight Monarch tokenizers to keep startup small and to match the Language menu Notepad++ shows.
Function List is regex-based Built by matching each language's declaration syntax, not by parsing the file. Declarations the patterns miss will not be listed.
Mark styles Five styles via marker decorations; Purge for each search and the Select and Find Next flow follow Notepad++.

Commands and filesystem

Difference Rationale
Session files are explicit (Save Session... / Load Session...) Sessions save open tabs, order, active tab, caret positions and bookmarks to a named file; no automatic session autosave beyond Theia's core where applicable.
Local-file commands use the runtime's dialog In the browser, Open from Computer / Save To This Computer... use the File System Access API where available and fall back to a hidden file input / Blob download; in the desktop app the same commands use the OS's native Open/Save dialogs, so there is no kept file handle and Ctrl+S writes back to the chosen path.
Dialogs open in the user's home folder; the browser starts at the last folder used In the desktop app, Open from Computer / Save To This Computer... / the upload conflict's Save As start in the user's home folder. A browser cannot address $HOME through the File System Access API (its startIn accepts only well-known folders or a kept handle), so the browser picker reopens at the folder used last in this profile and otherwise falls back to the browser's own default (documents).
Print is an in-browser print window — in place in the desktop app A browser cannot print arbitrary local files the way a desktop app can, so a web session opens a dedicated print window that renders the document as plain text with line numbers and a file-name header, then invokes window.print(). The desktop app prints the renderer's own window in place instead, because the Electron core intercepts window.open.
Rename restricts to relative path inside workspace Refuses .. and absolute paths - "Rename" should not be a cross-workspace move.
Save a Copy As leaves the tab on the original Preserves the open document's identity; the next Ctrl+S still goes to the original file.
Crash recovery is IndexedDB-backed (browser) Theia 1.75's StorageService is localStorage-only (small synchronous string store). Unsaved changes are persisted to IndexedDB a few seconds after typing stops, restored on next launch, marked dirty, and oversized copies are dropped. This never writes to the server.
Macros are in-memory only Macro recordings do not survive restart. No "Manage macros" persistence to disk beyond the session.
Run... browser limitation In the browser, only http:///https:// commands open in a new tab; starting a program requires the desktop build and notepadia.run.allowProcessLaunch preference (off by default).

Browser-specific chords

Difference Rationale
Browser-safe alternates for claimed chords Ctrl+N, Ctrl+W, Ctrl+Shift+W, Ctrl+O, F5, Ctrl+F5 are trapped by the browser. We provide Ctrl+Alt+N, Ctrl+F4, Ctrl+Alt+Shift+W, Ctrl+Alt+O, Ctrl+Alt+D, Ctrl+Alt+Shift+D. In the desktop app, the original chords work - Ctrl+N and F5 / Ctrl+F5 are asserted over CDP in scripts/electron-smoke.mjs, which is the only place a browser-reserved chord can actually be delivered.
Editor zoom wins on editor focus Ctrl+= / Ctrl+- / Ctrl+0 zoom the editor text when the editor has focus, leaving page zoom to the browser elsewhere.
File System Access API constraints Ctrl+S write-back to the same local file only works in Chromium with a secure context and a kept file handle. Firefox/Safari fall back to Save As/download.

Encoding and line endings

Difference Rationale
Only LF/CRLF offered in EOL conversion UI Monaco's line model splits on \n; classic CR cannot be a separator inside the editor. CR files are detected and shown as CR in the status bar.
UTF-8 BOM encoding patch Upstream utf8bom gets collapsed to utf8 at write time, so the BOM is patched after write to survive round-trips.

Miscellaneous

Difference Rationale
Column Editor Edit ▸ Line Operations ▸ Column Editor... inserts text, sequential numbers or cycled repeated text down the selected lines, including rectangular blocks. It is a dialog, like Notepad++. Column Mode (Alt+C) converts the current selection to a rectangular block directly, with no dialog.
Extended search escapes Implements Notepad++'s escapes (\n, \r, \t, \0, \\, \xHH, \oOOO, \dDDD, \bBBBBBBBB); unrecognised escapes pass through literally, as in Notepad++.
Notepad++ plugins are not supported No plugin host; the feature set is fixed to what the notepadia extension provides.
Style/formatting off by default Deliberate to match a "plain text" Notepad++ behavior profile (no suggestions, no auto-format, no auto-closing).
No multi-select drag of arbitrary blocks in all cases We rely on Monaco's Alt+drag for rectangular selection; Alt+C converts the current selection to a block. Some edge cases differ slightly from Notepad++.

If something looks like an omission, check this page first. Bug reports that are really expectation mismatches are far easier to close once this list is acknowledged.