RepoPilotOpen in app →

flameshot-org/flameshot

Powerful yet simple to use screenshot software :desktop_computer: :camera_flash:

Healthy

Healthy across the board

weakest axis
Use as dependencyConcerns

copyleft license (GPL-3.0) — review compatibility

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit 1d ago
  • 22+ active contributors
  • Distributed ownership (top contributor 35% of recent commits)
Show all 7 evidence items →
  • GPL-3.0 licensed
  • CI configured
  • Tests present
  • GPL-3.0 is copyleft — check downstream compatibility
What would change the summary?
  • Use as dependency ConcernsMixed if: relicense under MIT/Apache-2.0 (rare for established libs)

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/flameshot-org/flameshot)](https://repopilot.app/r/flameshot-org/flameshot)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/flameshot-org/flameshot on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: flameshot-org/flameshot

Generated by RepoPilot · 2026-05-09 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/flameshot-org/flameshot shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO — Healthy across the board

  • Last commit 1d ago
  • 22+ active contributors
  • Distributed ownership (top contributor 35% of recent commits)
  • GPL-3.0 licensed
  • CI configured
  • Tests present
  • ⚠ GPL-3.0 is copyleft — check downstream compatibility

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live flameshot-org/flameshot repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/flameshot-org/flameshot.

What it runs against: a local clone of flameshot-org/flameshot — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in flameshot-org/flameshot | Confirms the artifact applies here, not a fork | | 2 | License is still GPL-3.0 | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | Last commit ≤ 31 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>flameshot-org/flameshot</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of flameshot-org/flameshot. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/flameshot-org/flameshot.git
#   cd flameshot
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of flameshot-org/flameshot and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "flameshot-org/flameshot(\\.git)?\\b" \\
  && ok "origin remote is flameshot-org/flameshot" \\
  || miss "origin remote is not flameshot-org/flameshot (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(GPL-3\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"GPL-3\\.0\"" package.json 2>/dev/null) \\
  && ok "license is GPL-3.0" \\
  || miss "license drift — was GPL-3.0 at generation time"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 31 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~1d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/flameshot-org/flameshot"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

Flameshot is a cross-platform screenshot utility written in C++ with Qt that captures, annotates, and shares screenshots via a graphical editor. It runs on Linux, macOS, and Windows, providing tools for drawing, blurring, adding text, and exporting to clipboard or file with keyboard shortcuts and CLI support. Monolithic C++ application with CMake build system (CMakeLists.txt at root, modular cmake/ config includes for StandardProjectSettings, Sanitizers, StaticAnalyzers). Source likely organized by feature modules (not visible in file list but typical: src/gui, src/cli, src/core). Data files (icons, desktop entry, D-Bus service definitions) in data/ directory. Platform-specific packaging configs (PKGBUILD for Arch, appveyor.yml for Windows CI).

👥Who it's for

Linux/macOS/Windows power users and system administrators who need fast screenshot capture with in-app annotation, clipboard integration, and scriptable CLI access—particularly those who want escape from heavyweight tools like Greenshot or built-in OS screenshot apps.

🌱Maturity & risk

Production-ready and actively maintained. The project has stable releases, multi-platform CI/CD via GitHub Actions (.github/workflows/), extensive localization via Weblate, and packaging across snap, flatpak, and native installers. Recent workflows show active builds for Linux ARM, Linux x86, macOS, and Windows.

Low risk overall—mature codebase with 730KB C++ and established build infrastructure. Risks: single organization (flameshot-org) with distributed maintainers; relies on Qt which has occasional breaking changes between major versions; no visible automated test suite in the file list (typical for older GUI projects). Monitor Qt version constraints in CMakeLists.txt.

Active areas of work

Active cross-platform build improvements—recent workflows for Linux ARM packaging, macOS, Windows, and CMake build validation. Code quality checks via clang-format and clang-tidy enabled (.clang-format, .clang-tidy in root). Nightly development builds are available. D-Bus integration (data/dbus/org.flameshot.Flameshot.xml) suggests ongoing desktop integration refinement.

🚀Get running

git clone https://github.com/flameshot-org/flameshot.git
cd flameshot
mkdir build && cd build
cmake ..
make -j$(nproc)
./flameshot

See CMakeLists.txt for Qt6/Qt5 detection and platform-specific dependencies (likely libxcb on Linux, native frameworks on macOS/Windows).

Daily commands: After build above: ./flameshot starts the GUI with system tray integration. For CLI: ./flameshot screenshot --help (config file at ~/.config/flameshot/flameshot.ini). D-Bus service auto-registers for global hotkey integration.

🗺️Map of the codebase

🛠️How to make changes

Core GUI code likely in src/gui (not listed but inferred); CLI in src/cli; platform-specific capture in src/core/. To add a new annotation tool: modify GUI widget hierarchy in src/gui/tools/. To add a new export format: modify export handlers (likely src/core/export/). Configuration schema in CMakeLists.txt affects Qt resource files. Always run cmake-format on CMakeLists.txt before commit.

🪤Traps & gotchas

Qt version compatibility: CMakeLists.txt likely conditionally uses Qt5 vs Qt6 APIs; verify your Qt installation matches. X11/Wayland detection on Linux: screenshot capture code requires xdotool or equivalent; build may fail silently on Wayland-only systems. No explicit dependency lock file visible—CMakeLists.txt references external packages that may have breaking updates. D-Bus service requires dbus-daemon running for hotkey support on Linux (fails gracefully but features reduced).

💡Concepts to learn

  • D-Bus Service Activation — Flameshot's hotkey capture on Linux relies on D-Bus auto-activation (data/dbus/); understanding this is essential for debugging why global hotkeys don't work or app won't start
  • Platform-Specific Display Server APIs — Screenshot capture must use native X11 (XGetImage), Wayland (zwlr_screencopy), or Windows/macOS APIs; the codebase conditionally compiles these paths and you'll encounter #ifdef WIN32, #ifdef Q_OS_MAC
  • Qt Resource System (QRC) — Icons and images are compiled into the binary via data/graphics.qrc; modifying artwork requires rebuilding and understanding Qt's resource compiler
  • Cross-Platform Build Configuration (CMake) — CMakeLists.txt and cmake/ subdirectory use feature detection and conditional linking; understanding generator expressions and target properties is critical for platform-specific changes
  • Desktop Entry Specification — org.flameshot.Flameshot.desktop and .metainfo.xml control Linux desktop integration (menus, icons, MIME types); non-compliant entries cause packaging failures
  • AppData/MetaInfo for Linux Distributions — data/appdata/org.flameshot.Flameshot.metainfo.xml feeds app store listings and package managers; required for snap/flatpak/distro repos
  • Clipboard MIME Type Handling — Flameshot exports screenshots to system clipboard in multiple formats (PNG, JPEG); cross-platform clipboard APIs differ significantly and require Qt's QMimeData abstraction
  • maim/maim — Lightweight X11 screenshot utility with similar annotation-free approach; shows alternative architecture for capture-only tools
  • ShareX/ShareX — Windows/Mac screenshot and sharing tool with comparable feature set; reference for cross-platform GUI patterns
  • naiveproxy/naiveproxy — Not directly related but shows CMake + native platform APIs pattern for cross-platform C++ apps
  • Qt/qtbase — The Qt framework itself; essential dependency and source of truth for GUI API and platform integration
  • freedesktop/dbus — D-Bus specification and reference implementation; critical for Linux hotkey/service activation integration

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add unit tests for screenshot capture and annotation modules

The repo has comprehensive CI/CD workflows (Linux-pack.yml, Windows-pack.yml, MacOS-pack.yml) and uses clang-tidy for static analysis, but there's no evidence of unit tests in the file structure. Given Flameshot's core functionality involves capturing screenshots and applying annotations, adding tests for these critical modules would prevent regressions and improve code confidence across platforms.

  • [ ] Create tests/unit/ directory structure mirroring src/ layout
  • [ ] Add unit tests for screenshot capture logic (platform-specific: Linux/Windows/macOS)
  • [ ] Add unit tests for annotation tools (drawing, text, shapes from material icons in data/img/material/)
  • [ ] Integrate test execution into build_cmake.yml workflow with coverage reporting
  • [ ] Update CMakeLists.txt to enable test builds with optional enable_testing()

Add GitHub Actions workflow for code quality checks on all platforms

The repo has clang-format.yml for formatting checks, but no unified CI workflow that runs clang-tidy, CMake format validation, and compiler warning checks across Linux/Windows/macOS simultaneously. The existing cmake/StaticAnalyzers.cmake and cmake/CompilerWarnings.cmake are set up but not systematically gated in CI.

  • [ ] Create .github/workflows/code-quality.yml that runs on PRs
  • [ ] Configure clang-tidy analysis step using cmake/StaticAnalyzers.cmake settings
  • [ ] Add cmake-format validation step for CMakeLists.txt and cmake/ files against .cmake-format.yaml
  • [ ] Add compiler warnings step across GCC/Clang (Linux), MSVC (Windows), and Apple Clang (macOS)
  • [ ] Link workflow to prevent merge until all quality gates pass

Create installation and configuration documentation for data files and desktop integration

The data/ directory contains critical desktop integration files (data/desktopEntry/, data/dbus/, data/appdata/) and icon assets (data/img/hicolor/) but these aren't documented. New contributors may not understand how these files are packaged or why icons exist at multiple resolutions, causing packaging mistakes across platforms.

  • [ ] Create docs/DESKTOP_INTEGRATION.md explaining DBus service setup (data/dbus/org.flameshot.Flameshot.service.in)
  • [ ] Document appdata/metainfo.xml purpose for app store integration (data/appdata/org.flameshot.Flameshot.metainfo.xml)
  • [ ] Add icon scaling guide explaining why multiple resolutions exist in data/img/hicolor/ and when each is used
  • [ ] Document PKGBUILD and platform-specific packaging (Linux-arm-pack.yml, Windows-pack.yml, MacOS-pack.yml references)
  • [ ] Link documentation from README.md and CONTRIBUTING.md (if it exists)

🌿Good first issues

  • Add unit tests for screenshot capture paths: src/core/capture/ likely lacks automated test coverage for different display server types (X11 vs Wayland). Create test fixtures in tests/ directory using Qt Test framework.
  • Document CLI examples: README.md mentions 'CLI configuration' but file list shows no docs/cli-examples.md. Add concrete examples for screenshot-to-clipboard, batch export, and config override workflows.
  • Internationalization completeness check: data/appdata/org.flameshot.Flameshot.metainfo.xml and .desktop file may have untranslated strings. Extract new i18n keys and update po files in i18n/ directory (if it exists).

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 410cfae — screengrabber: pass non-empty parent_window to xdg-desktop-portal (#4664) (artefaktor93)
  • 46e4a7d — Revert "Revert "Uniformize both spec files + ninja build openSUSE (#4658)" (#…" (#4676) (borgmanJeremy)
  • 0025da3 — Revert "Uniformize both spec files + ninja build openSUSE (#4658)" (#4675) (borgmanJeremy)
  • 1534a89 — Uniformize both spec files + ninja build openSUSE (#4658) (QuentiumYT)
  • c549f7b — fix issue with screen selection in non interactive mode (#4667) (borgmanJeremy)
  • a6694bf — Updata GH actions (old action versions are using Node.js 20 which will be decrecated June 2026) (#4660) (ElTh0r0)
  • e497f47 — fix(macos): make fullscreen capture overlay configurable (#4622) (Mitnitsky)
  • caf1703 — Translations update from Hosted Weblate (#4642) (weblate)
  • 55c04e8 — Option to disable tray icon on Windows (#4634) (ElTh0r0)
  • f500885 — feature(macos): show dock icon when any app window is open (#4628) (Mitnitsky)

🔒Security observations

Flameshot, being a desktop screenshot application, has a relatively good security posture with no critical vulnerabilities identified in the visible codebase structure. However, there are several areas requiring attention: (1) Secure handling of sensitive image data and temporary files, (2) Proper input validation for configuration and image metadata, (3) D-Bus service authorization controls, and (4) Dependency version management. The application should implement strict input validation, secure file handling with proper permissions, D-Bus security policies with PolicyKit integration, and maintain pinned dependency versions. No hardcoded secrets or obvious injection vulnerabilities were detected in the file structure analysis. The presence of security scanning tools in the CI/CD pipeline (.clang-tidy, Sanitizers) suggests good security practices are already in place.

  • Medium · Potential Insecure Deserialization in Qt Application — Application-wide (Qt application handling user data). As a Qt-based screenshot application that handles image data and potentially processes configuration files, there is a risk of insecure deserialization if the application loads untrusted configuration or image metadata without proper validation. Fix: Implement strict input validation for all configuration files and image metadata. Use Qt's safe serialization methods and avoid deserializing untrusted data directly.
  • Medium · Missing Security Headers in Desktop Application — Desktop application with potential network communication. While this is a desktop application rather than a web service, if any embedded web functionality exists (notifications, help documentation), it may lack proper security headers and Content Security Policy. Fix: If the application communicates with web services or displays web content, ensure proper SSL/TLS certificate validation, CSP headers, and secure communication protocols.
  • Low · Potential Information Disclosure via Screenshots — Screenshot capture and storage mechanisms. As a screenshot application, sensitive information in captured images could be inadvertently exposed if clipboard handling or temporary file storage is not properly secured. Fix: Ensure temporary screenshot files are stored securely with restricted permissions, implement secure clipboard clearing, and provide users with warnings about capturing sensitive content.
  • Low · No Visible Dependency Pinning in Package Management — CMakeLists.txt and dependency management files. The provided dependency file content is empty. Without explicit dependency version constraints, the build could be vulnerable to supply chain attacks or breaking changes in dependencies. Fix: Implement strict version pinning for all external dependencies. Use CMake's find_package() with specific version constraints and maintain a lock file for reproducible builds.
  • Low · D-Bus Service Potential Security Risk — data/dbus/org.flameshot.Flameshot.service.in and related D-Bus XML definitions. The application exposes D-Bus service (org.flameshot.Flameshot.service.in), which could be exploited if the service doesn't properly validate callers or implement authorization checks. Fix: Implement proper D-Bus security policies using PolicyKit for sensitive operations. Restrict D-Bus method calls to authorized users and validate all inputs from D-Bus requests.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Healthy signals · flameshot-org/flameshot — RepoPilot