A dark, terminal-styled notepad for Windows that looks like a simple mobile notepad app. Notes have a title and a body, the list shows titles only, and notes are organised with tags.
TermiNote is a notebook that works like the notepad on your phone, but on your Windows PC. You write notes, each one has a title and the note itself. The list of notes only ever shows the titles — like sticky notes labelled on the front, where you open one to read what's inside. You sort notes into groups with tags (small labels like "home" or "work") instead of folders. Everything is black with white writing and red buttons, like an old computer terminal. Your notes are saved on your own computer the moment you type them. Nobody else can see them, and it works with no internet at all.
- Title and body for every note. Each note is a title plus the note text. The title is what the list shows.
- Titles-only list. The main list never shows any body text — no previews, no snippets. You only see what a note is called until you open it.
- Tags, not folders. Give a note any number of tags, then tap a tag chip to see just those notes. There are no folders anywhere.
- Looks like a phone app. One simple layout that fills the whole window: a header, a big red "Add note" button, and your notes as rounded cards with the date and time on each one.
- Terminal theme. Near-black background with a faint scanline texture, white text, red highlights, and a monospace (typewriter-style) font everywhere.
- Drag to reorder. Grab the handle on a note card and drag it up or down to put your notes in your own order.
- Search. The search button looks through titles, bodies, and tags — but the results still only show titles.
- Autosave. Notes save as you type. Close the program whenever you like; nothing is lost.
- No lost work. If you close a note, or quit, with changes that have not saved yet, TermiNote asks first: save them, throw them away, or keep working.
- Turn notes into lists. In the editor, the "1." and "•" buttons turn the selected lines — or the whole note — into a numbered or bullet list. Press the same button again to turn it back into plain text.
- Markdown, written and read. Notes are written in Markdown (a plain-text way of marking headings, bold, lists, and so on). The bar under the editor toolbar has buttons that add the marks for you — B for bold, I for italic, S for strikethrough, H for a heading (press it again to step #, ##, ###, then plain), </> for code, LINK for a link, > for a quote, and ☑ for a checklist — applied to the text you select, and the same button again takes most of them off. Ctrl+B, Ctrl+I, and Ctrl+K (link) work too. Tables written as
| a | b |pipe rows render as a real grid. The marks are all that is stored, in the note's plain Markdown file, so the note reads the same in any Markdown program. - A Ferrite-style editor. The note editor works like a full Markdown editor while the rest of the program keeps its own look: EDIT, SPLIT (raw text beside the rendered note), and PREVIEW modes; the raw text is syntax-highlighted in the app's colours with line numbers down the left side; a strip of the note's headings sits under the tags line — click one to jump to it. Find is Ctrl+F, find-and-replace is Ctrl+H (with an optional
.*pattern mode), Ctrl+G goes to a line, Ctrl+Shift+D copies the current line, Alt+↑ / Alt+↓ move lines, brackets and quotes close themselves as you type and wrap a selection, typing;date,;time, or;nowexpands to that stamp, and Ctrl+Shift+U builds a table of contents from the headings. The count line under the note adds a reading time. - Minimize to the tray. The minimize button can tuck TermiNote into the tray by the clock instead of the taskbar. The tray icon's menu opens it, starts a new note, or quits; turn the behaviour off in Settings if you prefer a normal minimize.
- You choose what the X button does. Clicking X asks whether to tuck TermiNote into the tray or quit, with a "Don't ask again" box to remember the answer. A remembered choice can be changed any time in Settings.
- Drag files in. Drop .md or .txt files onto the window and they become notes — a file in TermiNote's own format keeps its title, tags, and pin.
- Rename a tag everywhere. Settings lists every tag with its note count; rename one there and it changes on every note at once.
- Editor extras. Press F5 to stamp the current date and time into a note, and use the FILE button to see the note's Markdown file in Explorer.
- Find inside a note. Press Ctrl+F while editing to search the note you are in, with a match count and next/previous stepping.
- Keyboard-friendly list. The up and down arrow keys move a highlight between note cards, Enter opens the highlighted note, and Delete moves it to the trash (with the usual undo).
- Crash recovery. While you edit, a recovery copy of your latest text is kept. If the program closes suddenly, the next start offers the unsaved text back instead of losing it.
- One window at a time. Starting TermiNote again while it is running brings the window you already have to the front.
- Pin important notes. Pinned notes stay at the top of the list.
- Trash with second chances. Deleted notes go to a trash list first, where you can bring them back or delete them for good. Deleting for good, and emptying the trash, ask first.
- Text size controls. Make the writing in the editor bigger or smaller with the A− and A+ buttons, and see the word and character count as you write.
- Fast with many notes. The window opens straight away while your notes load behind it, and search stays quick however large the notebook grows.
- Full command line. Everything you can do in the window can also be done from a terminal window, with the same results.
- Portable mode. Put the program on a USB stick and it can keep its notes right next to itself.
- Notes stored as Markdown files. Every note is its own
.mdfile in a notes folder — readable in any text editor, easy to copy, back up, or put under version control. Only the notes you changed are written, in the background, so the window stays smooth.
- Windows 10 or Windows 11, 64-bit (x64).
- Admin rights: not needed. It installs for your user account only.
- Internet: not needed, for installing or for using it.
- Open the latest release page.
- Download one of the two files:
TermiNote-Setup-x64.exe— the installer. Run it and it puts TermiNote in your Start Menu.TermiNote-Portable-x64.zip— the portable version. Unzip it anywhere and runTermiNote.exeinside.
- The builds are unsigned (there is no paid code-signing certificate), so Windows may show a blue SmartScreen box the first time. Choose "More info", then "Run anyway".
- If you used an older TermiNote, your notes are converted automatically the first time this version runs (see "Your data" below).
- Add a note. Press the red "Add note" button. Type a title, any tags (separated by commas), and the note itself. Press the tick at the top right, or just go back — it saves as you type either way.
- Open a note. Tap its card in the list, or tap the pencil button on the card.
- Find a note. Press the search button and type. Matching notes appear as cards showing their titles.
- Filter by tag. Tap a tag chip under the toolbar: "All notes" shows everything, "Untagged" shows notes with no tags, and each tag shows its own notes.
- Reorder notes. Drag a card by its handle (the lines icon on the card) to move it. Your order is remembered.
- Delete a note. Tap the trash button on its card. Deleted the wrong one? Open Settings (the gear) and use the Trash list to restore it.
- Delete everything. The "All Delete" button moves every note to the trash. They are not gone for good until you empty the trash in Settings.
- Change text size. In the editor, the A− and A+ buttons in the bottom bar change the writing size.
- Back up your notes. In Settings, "Back up notes" copies the whole notes folder (trash included) to a folder you choose, and "Restore backup" brings such a backup back — restored notes are added alongside yours, nothing is overwritten. Export and Import also live there: they move notes through a single JSON file, and importing skips any note you already have (same title and same text) instead of duplicating it.
- Make a list. In the editor, select the lines you want (or select nothing, for the whole note) and press "1." for a numbered list or "•" for bullets in the bottom bar. Press the same button again to go back to plain text.
- Write and preview Markdown. Select text and press B, I, S, H, </>, LINK, >, or ☑ in the bar under the toolbar to format it as bold, italic, strikethrough, a heading, code, a link, a quote, or a checklist. Press SPLIT in the same bar to write with the rendered note beside your text, PREVIEW to read it on its own, and EDIT to go back to writing alone.
- Work like an editor. Use Ctrl+F to find, Ctrl+H to find and replace, Ctrl+G to jump to a line, and the heading strip under the tags line to jump between sections. Run
terminote export-html ID FILEto save a note as a finished web page in the app's theme. - Tuck it into the tray. Press the minimize button and TermiNote sits in the tray by the clock. Double-click the tray icon to bring it back, or right-click it for Open, New note, and Quit. Turn this off in Settings ("Minimize to the system tray") if you would rather it minimized to the taskbar.
Run TermiNote.exe with a command instead of double-clicking it, and it works in the terminal without opening the window. List commands print the note id, its title, and its tags — never body text. Only show prints a note in full.
| Command | What it does |
|---|---|
add "title" [--body TEXT] [--tags a,b] |
Add a note |
list [--tag TAG] [--untagged] [--search TEXT] [--sort NAME] [--json] |
List notes, titles only |
show ID [--json] |
Print one note in full |
edit ID [--title T] [--body B] [--tags a,b] |
Change a note |
search WORDS [--json] |
Find notes, titles only |
delete ID |
Move a note to the trash |
duplicate ID |
Copy a note |
listify ID numbered / bullets / plain |
Make the note body a numbered list, a bullet list, or plain text again |
format ID bold / italic / strike / code / heading / link / quote / checklist |
Apply that Markdown format to the whole note body (the wrap formats undo when applied again; heading steps #, ##, ###, then plain) |
render ID |
Print the note the way the preview shows it, without the Markdown markers |
toc ID |
Build (or rebuild) the note's table of contents from its headings |
export-html ID FILE |
Write the note as one finished, self-contained web page in the app theme |
pin ID / unpin ID |
Pin or unpin a note |
tag ID TAG / untag ID TAG |
Add or remove a tag on a note |
rename-tag OLD NEW |
Rename a tag on every note |
tags [--json] |
List tags with their note counts |
trash [--json] |
List the trash, titles only |
restore ID |
Bring a note back from the trash |
delete-forever ID |
Delete a trashed note for good |
empty-trash |
Empty the trash |
delete-all --yes |
Move every note to the trash |
export FILE |
Write all notes to a JSON file |
import FILE |
Merge notes from a JSON file |
stats [--json] |
Counts for the whole notebook |
help |
Print the built-in help |
Sort names for --sort: modifiedDesc (newest changed first), titleAsc, createdDesc, manual (your drag order). Exit codes: 0 means fine, 1 means not found or failed, 2 means the command line itself was wrong.
- Every note is its own Markdown (
.md) file, in a notes folder you can open, read, copy, and back up yourself:- Normal install:
%LOCALAPPDATA%\TermiNote\notes\ - Portable version: a
notesfolder next toTermiNote.exe(this is what theportable.txtfile in the zip switches on).
- Normal install:
- Each file is named after its note (for example
3-non-negotiable.md) and starts with a small header block holding the note's title, tags, pin state, and dates; the rest of the file is the note text exactly as you typed it, in plain Markdown. Trashed notes sit in atrashsubfolder until you restore them or delete them for good. Settings shows the exact folder location. - You can point the program at a different data folder by setting the
TERMINOTE_DATAenvironment variable. (Older versions expected it to name the oldnotes.jsonfile; that still works — the file's folder is used.) - Upgrading from 0.2.x or 0.1.0: the first time this version runs, it converts your old
notes.jsoninto the new per-note files automatically. The old file is not deleted: it is renamed tonotes.json.migrated.bak(or.bak2, and so on, if that name is taken) and kept in the same folder as a backup. - Saving is done carefully and per note: only the notes that changed are written, each new file is written next to the old one first and then swapped in, so a crash or power cut cannot leave you with half a file. Saving happens in the background, so typing never waits on the disk.
- If the old
notes.jsonis ever found damaged during the conversion, the program does not throw it away. It renames it with.corrupt-and the time added to the name, keeps it in the same folder, and starts with an empty notebook so you can rescue the text by hand. Individual damaged note files are read as tolerantly as possible — their text is kept as the note's body. - Export and import (in Settings, and on the command line) still use a single JSON file. That JSON file is the interchange format for moving notes between copies of TermiNote; it is no longer how notes are stored day to day.
- Uninstalling the program does not delete your notes.
From a real run of version 0.3.0 on Windows:
The note list — titles only, tag chips, and the full-width layout:
The editor — ruled lines, the list buttons, and the character count:
Settings — sort order, text size, the system tray toggle, trash, and export/import:
Further captures still to be added are listed in CAPTURE.md.
You need the Flutter SDK (stable channel) and Visual Studio with the "Desktop development with C++" workload, which is what Flutter needs for Windows apps.
flutter pub get
flutter analyze
flutter test
flutter build windows --release
The built program lands in build\windows\x64\runner\Release. The installer script is installer\TermiNote.iss (built with Inno Setup); it expects the Release folder's contents staged in an installer\payload folder next to it, plus LICENSE — the release workflow in .github\workflows\release.yml shows the exact steps, and CI compiles the installer on every change so a broken script fails early.
lib/note_store.dart— the note model, the store, every note operation, and reading/writing the per-note Markdown files (plus the one-time conversion of the old single-file store). No screen code in here.lib/theme.dart— the terminal theme in one place: colours, button styles, the styled scrollbar, and the phone-style page transition.lib/main.dart— the window: header, toolbar, tag chips, and the note card list.lib/editor_screen.dart— the note editor page.lib/markdown.dart— Markdown parsing (now with tables and images), the plain-text rendering, the table-of-contents builder, note statistics, the themed HTML export, and the formatting operations shared by the editor toolbar and the CLI. No screen code in here.lib/markdown_view.dart— the editor's read-only Markdown preview, painted in the app theme from the parse inlib/markdown.dart.lib/editor_ops.dart— the small editor operations as pure functions: duplicate/move lines,;date-style snippet expansion, and bracket/quote auto-pairing while typing.lib/settings_screen.dart— settings, trash, export/import, and about.lib/cli.dart— the command line, using the same store code as the window.lib/window_channel.dart— the small bridge to the Windows runner for the system tray behaviour and the window's remembered size and position.lib/update_service.dart— the silent auto-update: the launch check against the newest GitHub release, the installer download, and the hand-over that lets the installer replace the program and reopen it.test/— tests for the store, the screens, and the golden (picture) tests.windows/— the standard Flutter Windows runner, with small changes so the command line can print to the terminal and the window can minimize to the system tray.installer/— the Inno Setup installer script.
flutter test
This runs the store tests (including a round-trip of a 0.1.0 data file and a damaged-file test). Screen tests — including the widget test that proves the list shows titles and no body text, and the golden picture tests that render the screens to preview/ — live alongside the screen code in test/.
- Windows says the program is unsigned / shows SmartScreen. That is expected: the builds are not code-signed. Choose "More info", then "Run anyway".
- My notes are gone and the list is empty. Check the data folder for a file with
.corrupt-in its name. That is your old notes file from before the Markdown conversion, kept safe; the program started a fresh notebook because the file was damaged. Your text is still inside the renamed file. Also check the notes folder itself (Settings shows where it is) — your notes are one.mdfile each in there. - The command line prints nothing. Run it from a terminal window (so there is a console to print to), and make sure the first word after the program name is one of the commands in the table above.
- Two copies of the program disagree about my notes. One of them is probably the portable version keeping its notes next to itself, or
TERMINOTE_DATAis set. Check which notes folder each copy is using (Settings shows the location).
TermiNote works fully offline. It has no accounts, shows no ads, sells no data, and collects nothing. Your notes never leave your computer unless you export them yourself. The one network use is the update check at launch: it asks GitHub whether a newer version exists and, unless you switch "Install updates automatically" off in Settings, installs it silently — it sends nothing about you or your notes. The program is free; optional donations never unlock anything.
- No folders — that is deliberate. Organisation is tags only.
- No sync between computers. Notes are plain Markdown files in one folder, so you can copy that folder yourself.
- Updates install themselves at launch (Settings can switch this off); there is no manual "check for updates" button.
- Windows x64 only.
MIT — see LICENSE. Free software: use it, copy it, change it.


