Skip to main content

VersionSec

VersionSec was formerly ForgeGuard. Releases up to and including 0.6.0 were published as forgeguard and remain available and unchanged. From 0.7.0 the canonical name is VersionSec (pip install versionsec). forgeguard==0.7.1 is a compatibility bridge and the forgeguard CLI/import keep working. Stable FG-* finding IDs are unchanged. See MIGRATION.md.

CI PyPI Python License: Apache-2.0

OpenSSF Scorecard Security and trust evidence documents the project's policies and automated checks. No certification or badge level is claimed.

Read-only posture assessment for one explicitly authorized self-hosted Gitea or Forgejo instance, or an explicitly supplied anonymized configuration snapshot.

VersionSec — 0.7.1

The ForgeGuard → VersionSec rebrand. No capability was removed: the separate Gitea or Forgejo providers, read-only live posture assessment, offline configuration review, offline runner review, Markdown/JSON/SARIF exports and deterministic completeness semantics all carry over unchanged. Canonical CLI is versionsec, canonical import is versionsec; the forgeguard CLI and import forgeguard continue to work through a compatibility shim that resolves to the same implementation. Machine-readable schema identifiers (forgeguard.assessment.v1, forgeguard.config-snapshot.v1, forgeguard.runner-snapshot.v1) and all FG-* finding IDs are deliberately unchanged so existing report consumers keep working. See MIGRATION.md.

Control Plane Hardening — 0.6.0

Adds an offline runner posture review (versionsec runner review) for the trust boundaries that matter most to a Gitea or Forgejo administrator: execution engine isolation, privileged mode, host volume mounts, Docker socket exposure, job network mode, ephemeral registration, and the experimental Forgejo plugin engine. Runner review is zero-network, evaluates only an explicitly supplied forgeguard.runner-snapshot.v1 snapshot, and never reads runner credentials, .runner files, or Docker/registry secrets. Runner qualification targets are Gitea Runner 3.4.2 and Forgejo Runner 13.0.0 / 13.1.0 — see upstream evidence and runner review.

Multi-Forge Support — 0.5.0

Adds Gitea or Forgejo as separate providers, with operator-declared product identity, finite provider-specific advisory catalogs, exposure intent, request profiles, offline configuration review of an explicitly supplied snapshot, and JSON/Markdown/SARIF exports. It does not scan application source code or private artifact contents.

Qualification targets are Gitea 1.26.4 / 1.27.3 and Forgejo 15.0.8 / 16.0.4 — these are the exact tested targets, not a universal support promise; see release notes and the CI evidence linked from the release.

Install

python -m pip install versionsec

Or pin the exact release:

python -m pip install versionsec==0.7.1

Usage

versionsec providers
versionsec checks
versionsec scan --url https://git.example.com/team --authorized --product forgejo --profile standard --policy public --dry-run
versionsec scan --url https://git.example.com/team --authorized --product forgejo --profile standard --policy public --format json
versionsec config review --snapshot anonymized-snapshot.json --policy private --format json
versionsec runner review --snapshot runner-snapshot.json --format json

Use minimal for one version request, standard for five bounded existing requests, or extended for those requests plus root. The profiles change scope, not aggressiveness. Exposure intent (public/private/unspecified) is independent; unspecified is the default.

The operator declares product identity. Compatible APIs and inventory versions alone do not identify a product. Opposing markers, conflicting versions, unknown syntax and unsupported evidence remain explicitly incomplete. No Gitea advisory is applied to Forgejo.

Evidence boundaries

HTTP 200 on a checked path is only a status observation, not proof of repository readability, private data access or loaded configuration. Public-by-design status observations are informational. Private intent creates a bounded review warning. HTTP 401/403 may support denial on that path only. Errors, redirects, 404, 429, malformed version JSON, timeouts and truncation remain incomplete.

Incomplete assessments have null score, N/A grade and assessed=false, even when another check warns. Skipped checks remain listed. Version 2 scores are not comparable with 0.2.2. No score is security certification or a claim of no vulnerabilities.

Offline review performs zero requests and evaluates only the supplied snapshot. It supports a closed key list for registration, sign-in, new-repository privacy and product-specific MFA. It never reads app.ini, production files, tokens, databases or private keys. See config review.

Transport and reports

One target, GET only, finite allowlist, no retries or redirects, serial requests, at most 12 requests, 10 seconds each and 60 seconds overall. Responses are streamed with a 256 KiB decompressed limit. HTTPS verifies certificates; --ca-bundle explicitly supplies a private CA. Ambient proxy/CA settings are ignored. HTTP never transmits a token. Anonymous requests do not inherit authentication or cookies.

Prefer VERSIONSEC_TOKEN for the optional version-read token. The legacy --token option warns because shell history/process listings may retain it. Reports do not contain the token.

Use --format md,json,sarif with --out reports/result.md for separate files. The directory must exist. Existing files, symlinks and collisions are refused, and writes are atomic. Multiple formats require files; single machine-readable stdout is clean.

JSON uses forgeguard.assessment.v1 with a packaged schema. SARIF 2.1.0 is schema-validated against frozen OASIS errata01. No source locations are invented. No DevGuard or GitHub Code Scanning importer integration is claimed.

Documentation

Historical 0.2.2 before/after examples remain in examples/ for migration context. Current examples use the golden- prefix and are synthetic offline fixtures, not production scans.

Commercial hardening

Gexiro offers a paid Hardening Report for authorized Gitea operators who want human review of bounded evidence, explicit limitations, prioritized findings, and a practical remediation plan.

A Remediation Sprint is a separate engagement: scope and acceptance criteria are frozen first, changes begin only after explicit approval, and the result includes before/after verification. Scope expansion, third-party targets, and remote changes require separate written authorization.

VersionSec remains usable as a free OSS CLI without a hosted account or control plane. Heavy SaaS and recurring monitoring are not offered at this stage.

Request a scoped VersionSec Hardening Report

License

Apache-2.0. See LICENSE.

Built and maintained by Gexiro Global Enterprises Ltd.

Part of the Gexiro open-source toolkit.

VersionSec by Gexiro

Not affiliated with Gitea, Forgejo, Codeberg, GitHub, or GitLab.

Metadata

Release files for versionsec 0.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for versionsec 0.7.1
File Size Uploaded
versionsec-0.7.1.tar.gz 91.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for versionsec 0.7.1
File Interpreter ABI Platform
versionsec-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 163.7 kB

Release files / versionsec-0.7.1.tar.gz

Download URL versionsec-0.7.1.tar.gz
Size 91.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ab3670a4e46f1b3fdcbf63b8c845b641a44523454335fbc66195f21e8bd8cd14
BLAKE2b-256 checksum
How to use checksums
4f1ce96d864d5b45e11009fe1b9c3cd71203dc05a2ac881535a2c97380720c36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / versionsec-0.7.1-py3-none-any.whl

Download URL versionsec-0.7.1-py3-none-any.whl
Size 71.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9289e543a55335f0f77bdaa69950bbf314244f380b7cecb070f6a28fac2d9cc1
BLAKE2b-256 checksum
How to use checksums
893c12f5e5893da20dfa38e895d1ca4c2843ae5127924ecd85aa229f7e4f62e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.2

2 release files

This release

0.7.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page