English | Español
Created by Kevin Charpentier.
Early preview, not stable yet. Expect rough edges and breaking changes between versions. Settings and data may be migrated or reset, so back up anything you care about.
Screenshots with annotations, built for GNOME on Wayland. Knivchit freezes your screen, lets you draw a rounded selection, mark it up with arrows, text and mosaic, then copy, save or pin the result. Everything stays on your machine: no accounts, no telemetry, and no network except when you ask it to check for updates.
Website: https://knivchit.pages.dev · Repository: https://github.com/kevincharp/knivchit
Version 0.1 does one thing: screenshots.
| Feature | Status |
|---|---|
| Rounded or sharp selection, movable and resizable | Available |
| Annotate: arrow, rectangle, ellipse, pen, editable text, mosaic brush, eraser; undo and redo | Available |
| Copy, save, save as, pin on screen | Available |
| Configurable shortcut, dark and light themes | Available |
| Clipboard history | Coming soon |
| OCR (text from the screen) and translation | Coming soon |
| Emoji panel and stickers | Coming soon |
"Coming soon" means planned, with no dates. Tested on GNOME 50 on Wayland; the extension declares support for GNOME 50 only. The app's interface is in Spanish for now; an English interface is planned.
There are good screenshot tools for Linux, and Knivchit does not claim to do something they can't.
- Flameshot is mature, widely used and works on GNOME.
- Waytator adds video editing and OCR, and is aimed first at wlroots compositors.
- Spectacle is KDE's.
Knivchit is a smaller bet:
- GNOME first: a Shell extension handles the global shortcut and window placement, because Wayland doesn't let an app do it on its own.
- One app for the small tools around a screenshot: today it captures and annotates; clipboard history, an emoji picker, OCR and translation are planned, with no dates.
- Local by design: no accounts, no telemetry; its only network request is the optional "check for updates" button.
- A modern look as a goal, not just a feature list.
It is an early alpha: if one of the tools above already does what you need, use it. What this section says about other tools comes from their READMEs as of October 2026; tell us if something is out of date.
- GNOME Shell on Wayland (X11 and other desktops are untested).
- Xwayland available (on by default in Fedora and Ubuntu). The AppImage starts in X11 mode (
GDK_BACKEND=x11); on a Wayland session the app switches towayland,x11, so Xwayland is the fallback it relies on. fuse3to run AppImages, or start it with--appimage-extract-and-run.- To build: Node 24, pnpm 12.4.1, Rust stable ≥ 1.77.2 and Tauri v2's system dependencies (WebKitGTK 4.1, etc.).
The script downloads the latest release and verifies its SHA-256 sums (SHA256SUMS) before touching anything. Download it first, read it, then run it:
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/kevincharp/knivchit/main/install.sh -o install.sh
less install.sh
bash install.shIt installs the AppImage in ~/.local/bin, the application menu entry, the D-Bus activation and the GNOME Shell extension. Then log out and back in (on Wayland, GNOME only loads new extensions at session start) and assign your shortcut in Settings. To uninstall: bash install.sh --uninstall (your captures and data are left alone). If Knivchit is running, the installer asks before closing it (or pass --close-app to close it without asking); it never touches other processes.
While no stable release exists, the script installs the latest release even if it is a pre-release and says so first ("installing PRE-RELEASE v0.1.0-alpha.4"). bash install.sh --stable requires a stable version (it fails if there are only pre-releases); bash install.sh --version v0.1.0-alpha.4 pins one. To test a local candidate offline: bash install.sh --from-dir <folder with the AppImage, the extension zip and SHA256SUMS>.
By hand:
- From the release page (https://github.com/kevincharp/knivchit/releases; pre-releases don't show as "Latest") download the AppImage, the extension zip and
SHA256SUMS, and check the sums:sha256sum -c SHA256SUMS --ignore-missing. chmod +xthe AppImage and run it wherever you like.- Install the extension with
gnome-extensions install --force <file.zip>, log out and back in, and enable it withgnome-extensions enable knivchit@knivchit.dev.
Without the extension the capture tool works from the main window's button, but there is no global shortcut and pinned captures don't stay on top.
The first time you capture, GNOME asks (through the desktop portal) whether Knivchit may take screenshots. The answer is remembered per application id, knivchit (the name of knivchit.desktop, which is also the window class), so it is the same whether Knivchit was started from the application menu or by the shortcut through D-Bus activation. To make GNOME forget the answer and ask again:
flatpak permission-reset knivchit
# without flatpak installed, the same thing through the permission store:
gdbus call --session --dest org.freedesktop.impl.portal.PermissionStore \
--object-path /org/freedesktop/impl/portal/PermissionStore \
--method org.freedesktop.impl.portal.PermissionStore.DeletePermission screenshot screenshot knivchit- If the window misbehaves (position, scale, focus), try forcing the backend:
GDK_BACKEND=wayland ./Knivchit.AppImage. The app only replaces thex11value set by the AppImage; any other value you set is respected.
There is no default shortcut. You record one in the app's Settings and it warns you if it clashes with a GNOME one. The extension registers it in the Shell and starts the capture over D-Bus.
In the overlay: drag to select, move or resize with the eight handles, pick a tool from the toolbar, and finish by copying, saving or pinning. Esc cancels.
cd app && pnpm install --frozen-lockfile
pnpm tauri dev # development (app + frontend)
APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 pnpm tauri build --bundles appimage # AppImageA plain cargo build --release does not produce a usable binary (it doesn't rebuild the frontend). The two environment variables avoid real failures on machines without libfuse.so.2 or with a modern ld emitting .relr.dyn.
The gate that must pass before anything is considered done:
cd app && pnpm exec tsc --noEmit && pnpm exec biome check . \
&& cargo test --manifest-path src-tauri/Cargo.toml && pnpm exec vitest runThe extension is tested separately, on a private D-Bus: dbus-run-session -- gjs -m extension/tests/<file>.test.js. The website: node landing/scripts/check.mjs.
Two pieces with different stacks, on purpose:
app/: Tauri v2 (Rust) + React. It is the whole product (capture, annotation, settings). The frontend composes the final image; the backend only validates, saves, copies and pins.extension/: a GNOME Shell extension (GJS) that does what only the compositor can do on Wayland (global shortcut, window placement, keeping pinned windows on top). No UI and no business logic.
They talk over D-Bus. More in docs/architecture.md.
Knivchit is built by a human maintainer who uses AI coding assistants as a development tool. The maintainer decides what gets built, tests each release by hand and is responsible for what ships. The app itself contains no AI and makes no requests to AI services; its only network request is the optional "check for updates" button, which asks the GitHub API.
Bug reports and pull requests are welcome whether or not AI tools were involved, and everything merged is reviewed by the maintainer. See About using AI.
Knivchit is issues-first: open an issue with the bug or feature template. Pull requests are accepted only against an issue the maintainer has approved, or for very small fixes. See CONTRIBUTING.md, docs/branches.md and the code of conduct. Report vulnerabilities privately: SECURITY.md.
app/: MIT (app/LICENSE).extension/: GPL-3.0-or-later (extension/LICENSE), because it runs inside GNOME Shell.- Website typefaces (Inter, Bricolage Grotesque): SIL OFL 1.1.
landing/,docs/and everything else: MIT, © 2026 Kevin Charpentier (seeLICENSE).