# Security policy
## Reporting a vulnerability
Please report security issues privately through
[GitHub's private vulnerability reporting](https://github.com/writingdeveloper/Notro/security/advisories/new)
rather than opening a public issue. Include the Notro version, your Windows
version, and steps to reproduce. Expect a first response within a few days; this
is a hobby project maintained by one person.
## What Notro does on your machine
Notro is a clipboard utility, so it is fair to ask exactly what it touches.
**It reads your clipboard continuously.** A background thread polls the clipboard
sequence number every 0.4 s and reads the contents only when they change. It handles
oversized images and copied video files. Images larger than the upload limit are
re-encoded to a file in `%TEMP%\Notro`, and the clipboard is replaced with that file.
For a copied video file, Notro may inspect its path, extension, and size; an oversized
video proceeds through the confirmation UI before processing. Other clipboard content
is ignored and never stored.
**It does not store clipboard contents unless you ask it to.** "Automatically save
new clipboard images" in picker settings is **off by default**. With it off, the
only images written to your library are the ones you register explicitly.
**It simulates Ctrl+V** (and Enter, if you turn on
auto-send) using the Windows `SendInput` API — the same mechanism as the built-in
Windows emoji panel. It does not read your keystrokes.
**It never touches the Discord client, your account, or your token.** There is no
self-bot behaviour, no injection, and no patching of any application.
## Network access
Notro contacts only the services documented below:
| Endpoint | When | Why |
|---|---|---|
| `api.github.com/repos/writingdeveloper/Notro/releases/latest` | Every 24 h (can be disabled in the tray menu) | Check for updates |
| `github.com/.../releases/download/...` | When an update is found | Download the installer, **verified against its published SHA-256 before running** |
| `cdn.discordapp.com`, `media.discordapp.net` | Only when you register an emoji or sticker by link | Download that image from Discord |
| `pypi.org/pypi/imageio-ffmpeg/json` + the wheel URL | Only the first time you compress a video, after you confirm | Obtain ffmpeg, **verified against the SHA-256 published by PyPI** |
| `go.microsoft.com/fwlink/p/?LinkId=2124703` | During installation only, if Microsoft Edge WebView2 is missing | Download Microsoft's Evergreen bootstrapper over HTTPS. The bootstrapper runs as a Microsoft-signed installer; it is not verified against a Notro-published SHA-256. |
**There is no telemetry, analytics, crash reporting, or account of any kind.** No
clipboard content, file name, or usage data is ever transmitted.
A local HTTP server binds to `127.0.0.1` on a random port while the picker is
running, so the WebView2 control can display your library images. It serves only
files already in your own library and is not reachable from outside your machine.
## Where your data lives
| Path | Contents |
|---|---|
| `%APPDATA%\Notro` | Your emoji/sticker library, `library.json`, and downloaded ffmpeg |
| `%TEMP%\Notro` | Compressed output and resized paste copies, auto-deleted after one day |
| `HKCU\Software\Notro` | Settings (hotkey, language, upload limit, paste sizes) |
Uninstalling removes the program but **deliberately keeps `%APPDATA%\Notro` and
the registry settings**, so reinstalling does not lose your library. Delete them
manually if you want them gone.
## Code signing
Releases are currently **unsigned**, so Windows SmartScreen may warn and some
antivirus products may flag the installer as a false positive. The policy that
governs how releases are built and signed is in
[CODE_SIGNING.md](CODE_SIGNING.md). Verify what you downloaded against the
`NotroSetup.exe.sha256` published with each release:
```powershell
(Get-FileHash NotroSetup.exe -Algorithm SHA256).Hash
```
Reproducing a build from source is also possible: `pip install -r requirements.txt`
then `build.bat`.