Skip to content
buning-softwarePublic

About

Keyboard-first quick-capture for Windows. Press a global hotkey, type "call Anna tomorrow 3pm #work", and Memento files the task with its deadline and tags. Local-first with SQLite, built with .NET 10 and WPF.

Topics

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Contributors Forks Stargazers Issues GNU Affero General Public License v3.0 License

Table of Contents
  1. About The Project
  2. Getting Started
  3. Architecture
  4. Contributing
  5. License

About The Project

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.

Features

  • 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).

Built With

Getting Started

Prerequisites

  • Windows 10 (version 2004 or later) or Windows 11
  • .NET 10 SDK, only to build from source

Installation

  1. Clone the repository:

    git clone https://github.com/buning-software/memento.git
    cd memento
  2. Build, test and run:

    dotnet build
    dotnet test
    dotnet run --project src/Memento

    Memento starts in the tray; press Ctrl+Shift+Space to open it.

    dotnet test also 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 with dotnet 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.

Install a release

Each release has a signed MSIX per platform (x86, x64, ARM64) and Memento.cer, the certificate it is signed with.

  1. 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
  2. Open Memento_<version>_<platform>.msix and 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.

Architecture

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.

Contributing

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b features/feature-title)
  3. Commit your Changes (git commit -m 'Added feature')
  4. Push to the Branch (git push origin features/feature-title)
  5. Open a Pull Request

Publishing a release

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) and CERTIFICATE_PASSWORD secrets. They are organization secrets of buning-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 equal Publisher in src/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-msix action, 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 GenerateAppxPackageOnBuild is set, so normal builds and dotnet test do not need a platform flag.

  • To change the database schema, run dotnet tool restore once, then dotnet ef migrations add Name --project src/Memento.EntityFramework. The tool version is pinned to match EF Core.

License

Distributed under the GNU Affero General Public License v3.0 License. See LICENSE for more information.

(back to top)

About

Keyboard-first quick-capture for Windows. Press a global hotkey, type "call Anna tomorrow 3pm #work", and Memento files the task with its deadline and tags. Local-first with SQLite, built with .NET 10 and WPF.

Topics

Resources

Code of conduct

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages