Table of Contents
Memento is a keyboard-first quick-capture app for Windows. Press Ctrl+Shift+Space anywhere, type what you want to remember, and press Enter:
call Anna tomorrow 3pm #work
Memento reads the deadline and the tags from the line as you type, stores the task on your device, and gets out of the way.
- Global hotkey overlay: a Fluent (Mica) capture window that opens instantly over any app and hides when you click away.
- Natural input: dates (
14-10-2026,2026-10-14), relative days (today,tomorrow,friday,tonight), times (15:00,3pm) and#tags, in English and Dutch. - Keyboard only: ↑/↓ select a task, Enter or Space completes it, F2 edits it in place, Esc closes.
- Private: everything is stored locally in SQLite under
%APPDATA%\Memento; nothing is sent anywhere. - Settings: capture shortcut, start with Windows, monitor, default deadline time and theme (light, dark or system).
- .NET 10 and WPF
- WPF-UI for the Fluent design
- CommunityToolkit.Mvvm
- Entity Framework Core with SQLite
- Windows 10 (version 2004 or later) or Windows 11
- .NET 10 SDK, only to build from source
-
Clone the repository:
git clone https://github.com/buning-software/memento.git cd memento -
Build, test and run:
dotnet build dotnet test dotnet run --project src/MementoMemento starts in the tray; press Ctrl+Shift+Space to open it.
dotnet testalso runs the UI tests (tests/Memento.UiTests). They type and click on the real desktop, so leave the keyboard and mouse alone while they run, and run only the unit tests withdotnet test --project tests/Memento.UnitTests(or one of the other unit test projects). Each UI test starts Memento on its own temporary data folder (MEMENTO_DATA_DIR) with its own capture shortcut, so it never touches your tasks or settings, even while your own Memento runs.Debug builds keep their data in
%APPDATA%\Memento.Dev, so developing never touches the database of an installed Memento, and they can run next to it. Both register the same global shortcut, so change one of them in the settings if you run both at once.
Each release has a signed MSIX per platform (x86, x64, ARM64) and Memento.cer, the certificate it is signed with.
-
Trust the certificate once, from an elevated PowerShell. Skip this if you already trust a Buning Software app such as Surveil: it is the same certificate.
Import-Certificate -FilePath .\Memento.cer -CertStoreLocation Cert:\LocalMachine\TrustedPeople
-
Open
Memento_<version>_<platform>.msixand choose Install.
"Start with Windows" in the settings works through the package's startup task. If you turn it off in Task Manager, Windows no longer lets Memento turn it back on; use Task Manager's Startup apps tab instead.
The installed app keeps its data in %APPDATA%\Memento, the same place as a build from source, so switching between the two keeps your tasks. Uninstalling the package leaves that folder in place.
A modular monolith in three projects; the dependencies point one way only: Memento → Memento.EntityFramework → Memento.Core.
| Project | Contents |
|---|---|
src/Memento |
WPF app and composition root (Program.cs): overlay and settings windows with their view models, tray icon, and the Windows adapters (global hotkey, and autostart through the Run registry key, or through the startup task when installed from the MSIX). Package.appxmanifest and Assets/ are the MSIX package definition. |
src/Memento.EntityFramework |
The data layer on EF Core and SQLite: MementoDbContext, the Tasks entity and its configuration, the ITaskRepository implementation, migrations, and the startup initializer (WAL, applying migrations). |
src/Memento.Core |
Everything without UI or database access, in feature folders: Tasks (input parser, task service, ITaskRepository), Settings, Hotkeys, Storage (paths, StorageException). No WPF, Win32 or EF Core. |
tests/Memento.Core.UnitTests |
Unit tests for Core. TestSupport/ holds the shared fakes. |
tests/Memento.EntityFramework.UnitTests |
Tests for the data layer against real SQLite files in a temp folder. |
tests/Memento.UnitTests |
Unit tests for the view models and presentation helpers. |
tests/Memento.UiTests |
End-to-end tests that launch the built Memento.exe and drive it through UI Automation with WinUia and NUnit. |
Views only bind to view models. View models and services reach the outside world through small interfaces (ITaskRepository, ISettingsStore, IHotkeyRegistrar, IDialogService, IAutostart, IShellLauncher) and TimeProvider, so the behaviour is tested without windows, disk or registry.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b features/feature-title) - Commit your Changes (
git commit -m 'Added feature') - Push to the Branch (
git push origin features/feature-title) - Open a Pull Request
Publishing a GitHub release runs .github/workflows/release.yaml: it runs the tests, then builds, signs and attaches an MSIX for x86, x64 and ARM64, plus Memento.cer.
-
Name the tag
v1.2.3(three numbers). The workflow rejects anything else, and the tag becomes the package version. -
Signing uses the
CERTIFICATE_BASE64(the.pfx, base64 encoded) andCERTIFICATE_PASSWORDsecrets. They are organization secrets ofbuning-software, shared with Surveil, and each repository that releases has to be allowed to use them (organization Settings, Secrets and variables, Actions). The certificate subject must equalPublisherinsrc/Memento/Package.appxmanifest(CN=BuningSoftware). -
The certificate is valid for one year. Generate a new one before it expires, update both secrets, and ask users to trust the new
Memento.cer. -
The test run (every pull request, and a release before it signs anything) also builds an unsigned x64 MSIX, so a broken manifest shows up early. The packaging is the
.github/actions/package-msixaction, shared with the release workflow. -
To try the packaging locally, run the same command as the workflow, without signing:
dotnet publish src/Memento/Memento.csproj -c Release -r win-x64 --self-contained true -p:Platform=x64 -p:GenerateAppxPackageOnBuild=true -p:AppxPackageSigningEnabled=false -p:AppxBundle=Never "-p:AppxPackageDir=out/"
The MSIX tooling is only active when
GenerateAppxPackageOnBuildis set, so normal builds anddotnet testdo not need a platform flag. -
To change the database schema, run
dotnet tool restoreonce, thendotnet ef migrations add Name --project src/Memento.EntityFramework. The tool version is pinned to match EF Core.
Distributed under the GNU Affero General Public License v3.0 License. See LICENSE for more information.
