ProGit is an ultra-fast, single-binary, self-hosted Git collaboration platform engineered in pure Go with zero CGO dependencies and an embedded modern React frontend.
Core Mission & Philosophy
ProGit provides development teams and enterprises with an ultra-lightweight, resilient, and beautiful alternative to bloated Git platforms. It runs on any machine with less than 50 MB of RAM, boots in under 50 milliseconds, and operates without external database servers like PostgreSQL or MySQL.
Complete Tutorial Available
New to Git, ProGit, or CI/CD? Check out our dedicated, step-by-step masterclass: Git, ProGit & GitHub Actions CI/CD Tutorial → covering Git internals, staging, branching, conflict resolution, ProGit setup, and 4 production YAML pipeline recipes.
Single Binary Simplicity
Everything — the HTTP REST engine, the Smart Git protocol handler, the built-in SSH server (port 2222), the SQLite WAL database engine, and the production React single-page frontend — is embedded into a single, compact, static binary.
Key Capabilities at a Glance
Pure Go & Zero CGO: Cross-compiles instantaneously to Linux, macOS, and Alpine containers without native GCC toolchains.
High-Concurrency SQLite WAL: Uses modernc.org/sqlite with Write-Ahead Logging (WAL) and automated checkpoint maintenance.
GitHub-Class Developer Experience: Complete with Pull Request line-by-line review comments, native Git merge engine, fork mechanics, and Kanban project boards.
Built-in ProGit Pages: Host static websites, documentation, and Jekyll/Markdown sites directly from your repository branches with zero setup.
Dual-Interface Wiki Engine: Edit documentation through the web interface or clone and push directly as a Git bare repository (<repo>.wiki.git).
In-Browser Code Editor & Prettier: Create files, edit code online, upload entire folder structures, and format with 8 built-in themes.
The Modern Git Service for Teams & Enterprises
ProGit serves as a direct, private, self-hosted replacement for public cloud services like GitHub and GitLab, as well as an upgraded modern alternative to legacy platforms like Gogs and Gitea. It requires zero cloud subscriptions, keeps 100% of your source code and intellectual property on your own infrastructure, and runs seamlessly behind enterprise firewalls or in air-gapped networks.
Git Services Comparison: ProGit vs GitHub vs Gogs vs Gitea vs GitLab
Choosing the right Git service or self-hosted platform: A comprehensive technical comparison of ProGit against GitHub, Gogs, Gitea / Forgejo, and GitLab.
Overview of Git Services & Self-Hosted Solutions
Whether you are seeking a private Git server, evaluating self-hosted Git services to safeguard enterprise source code, or looking for a modern, lightweight GitHub alternative or Gogs/Gitea successor, understanding the architectural differences is critical.
ProGit was engineered to solve the primary drawbacks of existing Git services: eliminating massive RAM footprints, removing complex CGO and external database dependencies, modernizing the web UI with React 19, and providing turnkey containerization with Docker and Podman.
Technical Comparison Matrix
Feature / Capability
ProGit
GitHub
Gogs
Gitea / Forgejo
GitLab CE
Deployment Model
Self-Hosted / Cloud
Cloud SaaS / Enterprise Server
Self-Hosted
Self-Hosted
Self-Hosted / Cloud SaaS
Memory Footprint (Idle)
< 40 MB RAM
N/A (Multi-Tenant Cloud)
~80 MB RAM
~150 - 300 MB RAM
4 GB - 8 GB RAM
Binary Architecture
Single Pure-Go Binary
Proprietary Monolith
Single Go Binary
Single Go Binary
Complex Multi-Process Omnibus
CGO Dependencies
Zero CGO (Pure Go)
Proprietary
CGO Optional
CGO Optional
Extensive Native Libraries
Database Requirement
Embedded SQLite WAL (Zero Setup)
Proprietary MySQL Cluster
MySQL / PostgreSQL / SQLite
MySQL / PostgreSQL / SQLite
Dedicated PostgreSQL + Redis
Frontend Technology
Modern React 19 SPA + Vite
Hybrid Rails / React
Legacy Go html/template
Fomantic-UI + Server Templates
Vue.js + Ruby on Rails
Git Smart Protocol
Native HTTP & Built-in SSH (2222)
HTTPS & OpenSSH
HTTPS & OpenSSH
HTTPS & Built-in / OpenSSH
HTTPS & OpenSSH / Gitlab Shell
Git-Backed Wiki Engine
Native Bare Git Repo (.wiki.git)
Native Bare Git Repo
Basic Markdown
Git-backed Wiki
Git-backed Wiki
Static Site Hosting
Built-in ProGit Pages
GitHub Pages
Not Supported
Basic Pages via add-on
GitLab Pages (Requires Runner)
Container Support
Docker & Rootless Podman (~37 MB)
N/A
Docker Image
Docker Image
Heavy Docker Container (~2.5 GB)
Enterprise SSO / OIDC
Turnkey Google, Keycloak, Okta
SAML (Enterprise Only)
Basic PAM / LDAP
OAuth2 / OpenID Connect
OmniAuth / SAML / LDAP
Code Review & Merges
Unified Diffs, Merge/Squash/Rebase
Full Review Suite
Basic PR Merges
PR Reviews & Branch Protection
Extensive Merge Requests
Open Source License
MIT License
Proprietary
MIT License
MIT License
MIT (CE) / Proprietary (EE)
Deep-Dive: ProGit vs Other Git Services
1. ProGit as a Self-Hosted GitHub Alternative
While GitHub is the industry standard for public open-source hosting, many organizations, defense contractors, healthcare entities, and privacy-conscious teams cannot store proprietary source code on third-party cloud servers. ProGit offers a faithful, modern GitHub-like user experience (React 19 single-page application, dark mode, pull requests, unified syntax-highlighted diffs, Kanban boards, and branch protection) while remaining 100% self-hosted on your own on-premise hardware, private VPC, or air-gapped network.
2. ProGit vs Gogs: The Modernized Successor
Gogs (Go Git Service) proved that a self-hosted Git platform could be fast and lightweight. However, Gogs relies on legacy server-side HTML templates, lacks modern single-page reactivity, does not offer native static site hosting (ProGit Pages), and lacks integrated Git-backed wiki bare repository cloning. ProGit builds upon the proven Gogs architecture, modernizing it with a pure-Go zero-CGO SQLite engine, an embedded React 19 frontend, automated HTTPS, and enterprise OIDC Single Sign-On.
3. ProGit vs Gitea & Forgejo
Gitea and its fork Forgejo originated as forks of Gogs that accumulated significant feature breadth over time. However, this growth introduced operational overhead: larger memory consumption (150-300+ MB idle), complex build pipelines, and hundreds of configuration permutations. ProGit retains a laser focus on high performance, booting in 50ms with less than 40 MB of RAM, embedding all static UI assets into a single executable, and providing first-class rootless Podman and Docker container isolation.
4. ProGit vs GitLab: 100x Lower Resource Requirements
GitLab Community Edition is an all-in-one DevOps platform, but its resource demands are notorious: requiring a minimum of 4 GB to 8 GB of RAM, a dedicated PostgreSQL database, Redis, Puma web server, and Gitaly sidecars. Running GitLab for small-to-medium teams or edge computing environments is frequently cost-prohibitive. ProGit delivers lightning-fast Git hosting, issues, pull requests, wikis, and static pages with less than 1% of GitLab's memory footprint.
Migrating from GitHub, Gogs, Gitea & GitLab to ProGit
A seamless guide to migrating your Git repositories, branches, tags, and commit histories from any Git service to ProGit.
Seamless Git Mirroring (Recommended)
Because ProGit is fully compliant with the standard Git Smart HTTP and SSH protocols (Git v2), you can mirror any existing repository from GitHub, Gogs, Gitea, or GitLab with zero data loss:
Step 1: Create Target Repository on ProGit
Sign in to your ProGit instance (e.g. https://progit.co.in or your private server) and click + New Repository. Name the repository with the desired owner and slug.
Step 2: Mirror Push from Your Existing Git Service
# 1. Clone a bare mirror of your existing repository from GitHub, Gogs, or Gitea
git clone --mirror https://github.com/your-org/your-repo.git /tmp/mirror-repo
cd /tmp/mirror-repo
# 2. Push all branches, tags, and commit references to ProGit
git push --mirror https://progit.co.in/your-user/your-repo.git
# 3. Clean up temporary mirror clone
cd ~ && rm -rf /tmp/mirror-repo
Step 3: Update Local Developer Workstations
Developers on your team can update their existing Git remotes in one command:
# Update remote URL to point to ProGit
git remote set-url origin https://progit.co.in/your-user/your-repo.git
# Or using SSH:
git remote set-url origin ssh://git@progit.local:2222/your-user/your-repo.git
# Verify remote configuration
git remote -v
Batch Migration for Organizations
If you are migrating dozens or hundreds of repositories from an existing Gogs or Gitea server, ProGit's storage format is standard bare Git (<owner>/<repo>.git). You can copy the bare repository directories directly into ProGit's /data/repositories volume and run the administrative sync command.
Open your browser and navigate to https://progit.local (or https://progit.local:3443).
Fill in your desired Super Administrator username, email, and password.
Click Complete Installation & Create Super Admin. ProGit locks the setup and takes you immediately to the dashboard.
Step 3: Create & Push to Your First Repository
# Create test directory and initialize git
mkdir my-project && cd my-project
git init
echo "# Hello ProGit" > README.md
git add README.md
git commit -m "Initial commit"
# Push over Smart HTTP (HTTPS)
git remote add origin https://progit.local/<your-username>/my-project.git
git push -u origin main
SSH Support Out of the Box
You can also push over native SSH at ssh://git@progit.local:2222/<your-username>/my-project.git once you add your public key in User Settings > SSH Keys.
Understand how ProGit achieves maximum portability, concurrency, and security with zero CGO dependencies.
Pure Go SQLite WAL Engine
Traditional Git web applications that use SQLite rely on CGO bindings to the C SQLite library (such as mattn/go-sqlite3). This causes several critical operational headaches: slow cross-compilation, reliance on host GCC/Clang toolchains, and complex multi-architecture container setups.
ProGit completely eliminates CGO by using modernc.org/sqlite — a 100% pure Go translation of SQLite. Features include:
Zero CGO (CGO_ENABLED=0): Single static Go binary without libc/musl dependency conflicts.
Deploying ProGit with production-grade container isolation and persistent volumes.
Official Container Images (GHCR)
ProGit publishes official multi-architecture container images to GitHub Container Registry (ghcr.io), verified for Linux x86_64 (AMD64) and ARM64 (Apple Silicon & AWS Graviton):
# Pull the official multi-architecture image (auto-selects amd64 or arm64)
podman pull ghcr.io/sanjeevsenapati/progit:latest
podman pull ghcr.io/sanjeevsenapati/progit:1.8.0
# Or pull platform-specific tags
podman pull ghcr.io/sanjeevsenapati/progit:1.8.0-linux-amd64
podman pull ghcr.io/sanjeevsenapati/progit:1.8.0-linux-arm64
# Run immediately with persistent storage and standard HTTPS / SSH ports
podman run -d --name progit \
--restart=unless-stopped \
-p 443:3443 -p 80:3000 \
-p 3443:3443 -p 3000:3000 \
-p 2222:2222 \
-v progit-data:/data/db:Z \
-v progit-repositories:/data/repositories:Z \
-v progit-config:/data/config:Z \
-v progit-logs:/data/logs:Z \
ghcr.io/sanjeevsenapati/progit:latest
Automated Multi-Arch Build Scripts
ProGit includes dedicated scripts for one-click multi-architecture building and deployment using Podman or Docker:
# Build multi-architecture image manifest (amd64 + arm64)
./podman/build.sh all
# Build native Linux x86_64 on Mac and export standalone progit-linux-amd64.tar
./podman/build.sh amd64 --save
# Deploy container with persistent volumes and healthcheck validation
./podman/deploy.sh ghcr.io/sanjeevsenapati/progit:latest
Volume Persistence
ProGit stores all state in /data inside the container. We recommend mapping named volumes to ensure seamless data persistence across container updates:
Internal Path
Volume Purpose
/data/db
SQLite database file (progit.db) and WAL journal
/data/repositories
Bare Git repositories (.git)
/data/config
Custom app.ini configuration overrides and SSL certs
/data/ssh
Host SSH keys for built-in port 2222 server
Manual RHEL 9 / Rocky Linux 9 Installation Process
For enterprise Red Hat Enterprise Linux 9 (RHEL 9), Rocky Linux 9, or AlmaLinux 9 environments, follow this manual step-by-step procedure:
1. Verify Server Architecture
Ensure you pull the container matching your server's CPU architecture:
# Check host architecture
uname -m
# If output is 'x86_64': use ghcr.io/sanjeevsenapati/progit:1.8.0-linux-amd64
# If output is 'aarch64': use ghcr.io/sanjeevsenapati/progit:1.8.0-linux-arm64
Architecture Mismatch Warning
Running an ARM64 image on an x86_64 CPU produces an immediate exec format error crash. On x86_64 servers, pull 1.8.0-linux-amd64 or the multi-arch tag 1.8.0.
3. Create Volumes & Run Container with SELinux (:Z)
On RHEL 9, SELinux runs in Enforcing mode. The :Z flag assigns the container_file_t context to prevent permission denied errors on SQLite and Git repositories:
Deploying ProGit v1.8.0 on production Kubernetes clusters and testing locally with native Podman kube play.
Kubernetes Architecture Overview
ProGit runs as a sovereign, rootless pod (UID:GID 1000:1000) backed by a PersistentVolumeClaim (ReadWriteOnce) for bare Git repositories and high-speed SQLite WAL database. Due to single-writer database integrity, the deployment uses strategy.type: Recreate.
Production Design Highlights
• Deployment Strategy (Recreate): Guarantees old pods unmount storage before the replacement pod mounts it, eliminating WAL locking conflicts.
• Dual Health Probes: Liveness probe against /api/health checks database and repository health; readiness probe against /api/ready checks traffic readiness.
• Git Push Buffer Support: Ingress annotations include proxy-body-size: "1024m" and 1800s timeout for large commits and multi-gigabyte packfiles.
Manifest Files Structure
Kubernetes deployment manifests are provided in the repository under deploy/k8s/:
Manifest File
Description
deploy/k8s/progit-deployment.yaml
All-in-one manifest: PVC, ConfigMap, Secret, Deployment, Service, and Ingress
deploy/k8s/kustomization.yaml
Kustomize manifest for overlays, secret management, and namespace scoping
deploy/k8s/test-podman-kube.sh
Automated Podman integration test script (100% pass verification)
docs/KUBERNETES_DEPLOYMENT.md
Detailed production runbook, TLS ingress, and disaster recovery procedures
Local Testing with Podman (podman kube play)
Validate the Kubernetes deployment locally without running a heavyweight cluster:
# 1. Run the end-to-end automated test suite
./deploy/k8s/test-podman-kube.sh
# 2. Or manually deploy with Podman Kube Play
podman kube play deploy/k8s/progit-deployment.yaml
# 3. Verify running pod and health endpoints
curl -k https://localhost:3443/api/health
curl -k https://localhost:3443/metrics | head -n 15
# 4. Execute in-container ProGit Doctor
podman exec -it progit-pod-progit /usr/local/bin/progit doctor
# 5. Teardown
podman kube down deploy/k8s/progit-deployment.yaml
Production Kubernetes Deployment
Deploy to any certified Kubernetes cluster (EKS, GKE, AKS, k3s, OpenShift):
# 1. Create sovereign production secrets
kubectl create secret generic progit-secrets \
--from-literal=PROGIT_SECRET_KEY="$(openssl rand -hex 32)" \
--from-literal=PROGIT_ADMIN_USER="admin" \
--from-literal=PROGIT_ADMIN_PASSWORD="StrongProductionPassword123!" \
--from-literal=PROGIT_ADMIN_EMAIL="admin@yourdomain.com" \
--dry-run=client -o yaml | kubectl apply -f -
# 2. Apply deployment manifests via Kustomize or kubectl
kubectl apply -k deploy/k8s/
# OR
kubectl apply -f deploy/k8s/progit-deployment.yaml
# 3. Monitor rollout status
kubectl rollout status deployment/progit
kubectl get pods -l app.kubernetes.io/name=progit
Build both the React UI and Go backend from the official repository.
Prerequisites
Go 1.24 or higher
Node.js 22+ and npm
Git CLI installed on system
Build Instructions
# 1. Clone repository
git clone https://github.com/sanjeevsenapati/progit.git
cd progit
# 2. Build Frontend UI
cd web
npm ci
npm run build
cd ..
# 3. Copy built frontend assets into internal/ui/dist
cp -r web/dist/* internal/ui/dist/
# 4. Compile Pure Go Binary (Zero CGO)
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o progit ./cmd/progit
# 5. Start ProGit
./progit web
Configure your instance parameters and initialize the Super Administrator.
Wizard Fields
Field
Default
Description
Application Name
ProGit
Branding shown on navbar and titles
Domain
localhost
Domain name used for clone URLs
HTTP Port
3000
Port for web traffic
Root URL
http://localhost:3000/
Full canonical base URL
Admin Username
admin
Super administrator username
Admin Email
admin@example.com
Super administrator email address
Admin Password
(required)
Super admin login password (min 6 chars)
Automatic Installation Lock
Once installation finishes, ProGit permanently sets INSTALL_LOCK = true in conf/app.ini. The wizard endpoint (/install) is immediately disabled and returns HTTP 403 to prevent unauthorized reconfiguration.
ProGit automatically generates an ECDSA P-256 self-signed certificate on initial boot if no certificate exists. The certificate includes full Subject Alternative Names (SANs) for:
progit.local & *.progit.local
localhost & *.localhost
127.0.0.1 & ::1
Local machine hostnames and discovered interface IPs
Certificates are saved persistently in /data/config/https/cert.pem and automatically renewed if the domain name changes in the Admin Settings.
Seamless HTTP to HTTPS Redirection
When REDIRECT_OTHER_PORT = true, ProGit starts an HTTP redirect listener on port 3000 (or 80) that automatically redirects all incoming browser traffic with 301 Moved Permanently directly to https://progit.local/. Health check probes to /api/health respond with 200 OK immediately on both ports without redirection latency.
In WAL mode, writes are committed to a temporary journal file (progit.db-wal) and periodically merged into the main database file. Administrators can trigger a manual checkpoint at any time via the admin endpoint:
curl -X POST http://localhost:3000/api/v1/admin/maintenance/wal-checkpoint \
-H "Authorization: Bearer <admin_token>"
Enable one-click corporate login via Google Workspace, GitHub, Microsoft 365, Keycloak, or any OpenID Connect identity provider.
Zero Third-Party SaaS Dependencies
ProGit contains a pure Go OIDC and OAuth2 authentication engine. No external proxy, sidecar, or paid SaaS subscription is required. All token verification, standard discovery, and JIT provisioning run locally inside ProGit.
Supported Identity Providers
Provider
Preset Value
Default Auth Endpoint
Notes
Google Workspace
google
accounts.google.com
One-click Google Workspace login with domain filtering
GitHub
github
github.com/login/oauth
Standard developer OAuth2 authentication
Microsoft 365
microsoft
login.microsoftonline.com/common
Azure AD / Entra ID enterprise tenant authentication
Keycloak / Okta / Generic
generic or keycloak
Auto-discovered via ISSUER_URL
Standard /.well-known/openid-configuration discovery
When using a self-hosted Keycloak realm or Okta domain, provide the ISSUER_URL. ProGit automatically queries /.well-known/openid-configuration on startup to discover authorization, token, and userinfo endpoints:
Domain Filtering (ALLOWED_DOMAINS): Restricts authentication strictly to corporate domains. If an employee attempts to sign in with a personal account (e.g. alice@gmail.com), the login is blocked and an unauthorized domain alert is displayed.
Cryptographic CSRF Mitigation: Every login request generates a random 32-byte state stored in an HttpOnly, SameSite=Lax, Secure cookie. Mismatched or forged callbacks are rejected.
Just-In-Time (JIT) Provisioning: New employees logging in for the first time automatically have their ProGit account created with matching username and email.
Emergency Local Login Fallback: Disabling OIDC via PROGIT_OIDC_ENABLED="false" immediately disables the SSO button, and local database credentials remain available so teams are never locked out during IDP outages.
Wiki HTTP: http://localhost:3000/<owner>/<repo>.wiki.git
Wiki SSH: ssh://git@localhost:2222/<owner>/<repo>.wiki.git
Personal Access Tokens for CLI
When pushing over HTTP, developers can authenticate using Personal Access Tokens (PATs) instead of their primary account password. Create PATs in Settings > Access Tokens.
Blank Repository Quick Setup (GitHub-Style)
When creating a repository without an initial README (or when a bare repository has zero commits), ProGit displays a comprehensive setup guide matching GitHub's workflow:
Quick Setup Bar: Instant toggle between HTTPS and SSH clone URLs with one-click clipboard copying.
Create a new repository on the command line: Ready-to-copy terminal commands initializing Git, adding a README, committing, setting main branch, and pushing to ProGit.
Push an existing repository from the command line: Copyable commands to add ProGit as remote and push existing branches.
Import code from another repository: Direct shortcut button linking to the repository import wizard.
Repository Import
ProGit allows importing external Git repositories directly via /new/import or POST /api/v1/repos/import. The server clones the entire history (all commits, branches, and tags) using Git mirror replication and seamlessly binds it to your personal or organization account.
Feature-rich in-browser editing with real-time syntax highlighting and 8 Prettier themes.
8 Curated Themes
Theme ID
Name
Palette Description
github-dark
GitHub Dark (Default)
Base dark theme matching #0d1117 with emerald accents
github-light
GitHub Light
Crisp, high-contrast light theme
dracula
Dracula
Famous dark purple, pink, and cyan palette
monokai
Monokai Pro
Iconic vibrant amber, magenta, and green
nord
Nordic Frost
Calm arctic blues and teals
one-dark
One Dark Pro
Balanced Atom/VS Code dark styling
solarized-dark
Solarized Dark
Ethan Schoonover's legendary solarized palette
synthwave-84
Synthwave '84
Neon glowing 80s cyberpunk aesthetic
Live Colorful Syntax Highlighting & Language Switcher
The ProGit web editor features an integrated live code engine with real-time syntax tokenization:
Vibrant Token Highlighting: Syntax is colorized live as you type — keywords in purple, strings in green, functions in blue, numbers/booleans in orange, tags/properties in coral, and comments in italic gray.
Language Auto-Detection & Manual Override: Automatically detects programming languages from file extensions (TypeScript, JavaScript, Go, Python, Rust, C, C++, Java, Shell, SQL, JSON, YAML, HTML, CSS, Markdown, Dockerfile, INI) or lets you switch parsers from the Language dropdown.
Live Syntax Toggle: Switch seamlessly between live colorful syntax highlighting and plain text mode with 1 click.
Real-Time Status Coordinates: Status footer displays live line & column cursor coordinates (Ln X, Col Y), total line count, character count, file size, active language chip, tab indentation selector (2 vs 4 spaces), and auto light/dark theme adaptation.
Online Commits
Edit any file, provide a custom commit message and optional extended description, and choose between committing directly to the active branch or creating a new feature branch.
When creating a new file online, type the entire target path (e.g., src/controllers/auth.go). ProGit automatically creates intermediate directories and commits the file atomically.
Directory Uploads with Subdirectory Preservation
ProGit supports dragging and dropping whole folders or using the Upload a directory picker. Folder structures like assets/icons/logo.svg are preserved and committed in a single atomic Git tree update.
Full GitHub-style code collaboration with unified diffs, inline comments, and native merges.
Branch Comparison
Compare any two branches across commits. The compare view highlights added, modified, and deleted lines with unified diff formatting.
Formal Code Review States
Approve: Submit an approval to authorize merging.
Request Changes: Indicate blocking feedback that must be addressed.
Comment: General feedback without explicit approval/rejection.
Native Git Merges
Authorized reviewers and repository owners can execute a native Git merge with a single click. ProGit performs the merge on the server side and commits the merge commit to the target branch.
Public Visibility & Role-Based Merge Controls
Pull requests on public repositories are accessible to the public without requiring a login, allowing open-source communities to browse code reviews, compare diffs, and inspect conversations.
Public Viewing: Unauthenticated visitors can view discussions, commit history, line diffs, and reviews without logging in.
Role-Based Merge Gating: Merge options (Create merge commit, Squash and merge, Rebase and merge) are strictly restricted to repository collaborators with write permissions OR the original author (requester) of the pull request.
API Defense: Direct HTTP POST merge attempts require authentication (401 Unauthorized) and verify collaborator / requester authorization (403 Forbidden). Anonymous visitors see a login prompt, while third-party authenticated users see a restricted notice.
Pull Request Creation Gating: The "New pull request" button is visible exclusively to logged-in users.
Navigate to your repository Settings (or the Pages tab — configuration is restricted to the repository owner and repository administrators).
Toggle Enable ProGit Pages on.
Choose your source branch (e.g. main or docs) and source directory (/ or /docs).
Click Save Pages Settings.
Public Website URL
Once enabled, the published live ProGit Pages URL is visible to all authorized repository viewers on the repository Code page without exposing configuration controls:
https://localhost:3443/pages/<owner>/<repo>/
Automatic Markdown Rendering
If your repository only has a README.md and no index.html, ProGit Pages automatically parses your Markdown and serves it as a beautifully styled HTML webpage!
Manage company repositories, team assignments, and fine-grained collaborator permissions.
Roles & Access Levels
Organization Owner: Complete control over the organization, all its teams, members, and repositories.
Team Permissions:
view_only: Web UI inspection only — view files, commits, and issues in browser while blocking Download ZIP, raw downloads, forks, and Git clone/pull.
read: Can clone, download ZIPs, and view code, issues, and wiki.
write: Can push commits, create branches, edit online, and manage project boards.
admin: Full settings and collaborator management on team repositories.
External Collaborators: Invite individual users to private repositories with granular view_only, read, write, or admin permissions without adding them to an organization.
Trigger CI/CD pipelines, Slack/Discord notifications, and custom webhooks automatically on Git push, issue, and pull request events.
Overview
ProGit features an asynchronous, pure-Go webhook dispatch engine. When events occur in your repository (such as code pushes over HTTP or native SSH, issue creation, or pull request reviews), ProGit queues and delivers HTTP POST payloads with cryptographic HMAC signatures to your subscribed endpoints.
Supported Event Triggers
Event
Trigger Condition
Payload Contents
push
Code committed or branch pushed via Git CLI (Smart HTTP / SSH) or online file editor
When you configure a secret token on a webhook, ProGit calculates a cryptographic HMAC-SHA256 signature for every payload and transmits it in both standard GitHub-compatible and ProGit headers:
Repository administrators can trigger an immediate test ping from the Repository Settings → Webhooks tab to verify network connectivity and signature verification. Each delivery is logged with full request/response diagnostics, HTTP status codes, and execution duration.
Built-in developer communication system for private messaging, peer feedback, and sprint coordination.
Overview
ProGit includes an integrated messaging system that allows developers and contributors to communicate privately within the platform without leaving their code workspace. Whether coordinating code reviews, discussing sprint priorities, or providing private feedback, developers can exchange messages directly.
Key Capabilities
Recipient Discovery & Privacy: Strict anti-enumeration design — usernames are never dumped in bulk dropdowns. Developers search by username or numeric User ID, and the system verifies account existence.
Mutual Consent & Request Acceptance: Initial messages arrive as pending requests. Recipients can Accept to unlock two-way messaging or Decline to block future messages and automatically notify the sender.
Platform Feature Toggle (ENABLE_MESSAGING): Server administrators can enable or disable direct developer messaging via [features] ENABLE_MESSAGING = false in app.ini or environment variable PROGIT_ENABLE_MESSAGING=false. Disabling hides UI navigation icons, stops polling, and blocks API endpoints with 403 Forbidden.
Real-time Unread Badge: The top navigation bar displays a live unread message counter that updates as messages arrive.
Inbox & Outbox: Clean tabbed interface separating received messages from sent communications.
One-Click Reply: Reply directly to sender with automated subject prefixing (Re: ...) and conversation continuity.
Markdown Formatting: Messages support rich Markdown text, code blocks, lists, and inline links.
Instant Access
Access your messaging portal anytime by clicking the Messages icon in the navigation bar or visiting /messages in the web client.
Built-in, zero-overhead developer utilities at /toolbox with instant search, Favorites, and Recently Used history.
Zero Core Overhead Architecture
Two-Level Code Splitting: Both /toolbox and every individual tool chunk load lazily via dynamic imports. Users browsing code, issues, PRs, or Admin pages pay 0 KB extra JS.
Browser-First Compute (10/11 Tools): Runs locally via crypto.getRandomValues, Web Crypto crypto.subtle, DOMParser, and lazy parsers. Favorites and Recently Used tools persist in localStorage with zero database writes.
Bounded DNS Resolver: Live DNS lookup (A, AAAA, CNAME, MX, TXT, NS, PTR, ALL) requires authentication, caps concurrency at 8 slots, times out at 3 seconds, and rate-limits at 30 req/min.
Located in the Settings → Danger Zone tab of every repository, these operations protect high-stakes repository transitions:
Action
Behavior
Security Safeguards
Change Visibility
Toggle between Public and Private status.
Requires repository administrator privileges. Immediately restricts access in Web UI, REST API, Git HTTP, and native SSH.
Archive Repository
Places repository into permanent read-only status.
Enforces strict read-only mode across all layers: rejects Git CLI pushes (receive-pack), online commits, file edits, uploads, and issue creation with HTTP 400. Can be unarchived at any time by owner.
Transfer Ownership
Reassigns repository to another developer or organization.
Atomically moves the Git bare repository folder on disk to the new owner namespace and reassigns database records. Validates target account existence and prevents collisions.
Delete Repository
Permanently purges repository and bare Git storage.
Requires typing repository name to confirm in a themed dialog. Destroys all issues, PRs, wiki pages, webhooks, and disk assets permanently.
Collaborator-Scoped Issue Assignees
Security Hardening: Strict Collaborator Scoping
To eliminate information disclosure and unauthorized assignment risks, ProGit strictly restricts issue assignees to confirmed repository owners and collaborators:
The GET /api/v1/repos/{owner}/{repo}/assignees endpoint returns exclusively users with valid collaborator or owner privileges.
Assigning an issue to any external user or stranger is blocked at the backend API layer with HTTP 400 Bad Request ("user must be a collaborator or owner of this repository").
ProGit provides a responsive, debounced search bar embedded in the global top navigation on every page:
Real-Time Autocomplete: Matches repositories dynamically across repository names, descriptions, owner handles, and combined owner/repo paths (e.g., cbdc/website or cbdc/) as you type.
Canonical Git Path Search: Developers can search in owner/repository format directly, allowing instant filtering of specific organizations or owners.
Root Query & Clean Shortcut Handling: Typing / cleanly focuses the input without character leakage, or returns all accessible repositories when queried directly.
Rich Dropdown Feedback: Results display the repository owner, name, visibility badges (Private lock or Public), description snippet, and star counts.
Direct Navigation: Clicking any search result or selecting it via keyboard navigates instantly to the target repository overview.
Keyboard Shortcuts
Designed for power users and keyboard-first developer workflows:
Key / Shortcut
Context
Action
/
Global (outside input/textarea)
Instantly focuses the navbar search bar and selects existing text
ArrowDown / ArrowUp
Search input active
Navigates through dropdown search results
Enter
Search input active
Jumps directly to the selected repository; if none is highlighted, navigates to /explore?q=...
Escape
Search dropdown open
Dismisses the autocomplete dropdown and blurs the search input
Explore Page Search & Pagination
The Explore page (/explore) allows comprehensive repository discovery with server-side pagination:
URL Query & Page Binding: Directly open or bookmark /explore?q=keyword&page=2 to immediately navigate to filtered results.
Interactive Pagination Controls: Displays total repository counts, previous/next controls, and direct page jumps with smooth scrolling.
Live Browser History: Searching inside the Explore view automatically updates the browser's URL using window.history.replaceState, enabling instant copy-paste sharing with team members.
Multi-Tenant Access Control & Privacy
Zero Information Leakage Guarantee
Repository search is fully multi-tenant and access-controlled directly at the database engine layer:
Anonymous / Unauthenticated Users: Can only discover public repositories (is_private = false).
Authenticated Developers: Can discover all public repositories, plus private repositories where they are the owner, a confirmed collaborator, or an organization member.
System Administrators: Hold global visibility across all public and private repositories.
Administer user accounts, security tokens, and SSH public keys.
Administrative Powers
Search & Filter Users: Filter accounts live by username, email, or full_name, and narrow results with status filters (All, Admins, Standard, Suspended, and Download Restricted).
Restrict / Allow Code Downloads (can_download): Globally disable or restore Download ZIP, raw file downloads, release asset downloads, forking, and HTTP/SSH Git clone/pull per non-admin user while preserving Web UI browsing.
Activate / Suspend: Temporarily lock user accounts without deleting repository data.
Promote / Demote: Grant or revoke system administrator rights. (Self-demotion and self-download restriction are blocked to prevent accidental lockouts).
Delete User: Purge account and associated user repositories from the server.
Global repository management and disk usage telemetry.
Global Repository List & Feature Controls
In /admin > Repositories, administrators can inspect all repositories hosted across all user accounts and organizations, including visibility status and disk usage, and configure the instance-wide Global Default Branch in Admin → Configuration (PROGIT_DEFAULT_BRANCH / [repository] DEFAULT_BRANCH). Repository owners and administrators can set the per-repository Default Branch during creation, in Settings → General Settings, or from the Branches page (PATCH /api/v1/repos/:owner/:repo/settings), alongside feature toggles in Settings → Features for Allow Downloads (ZIP / Clone) & Pull Requests (allow_download_and_pulls), Wikis (enable_wiki), and ProGit Pages (enable_pages).
Administrative Deletion
Administrators can delete any repository directly from the admin panel. ProGit purges the metadata from SQLite and permanently removes the .git directory from disk.
Interact programmatically with ProGit using the REST v1 API.
Base URL
http://localhost:3000/api/v1
Authentication Methods
ProGit supports two primary authentication schemes for API interaction:
Personal Access Tokens (Bearer PAT): Ideal for scripts, CI/CD runners, and automated tools.
Authorization: Bearer pgt_34f8a92...
Web Session Cookie: Sent automatically by browsers when authenticated (`progit_session`). SameSite is enforced with HttpOnly security.
IP Rate Limiting
To neutralize credential brute-force attacks while preserving automated test throughput, authentication routes (/api/v1/auth/login and /api/v1/auth/register) enforce an IP-based sliding window rate limit of 120 requests per minute. Requests exceeding this threshold receive HTTP 429:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{
"error": "Too many authentication attempts. Please try again later."
}
Standard JSON Error Format
All client and server errors return structured JSON with an explanatory error key:
{
"error": "resource not found or access denied"
}
Health & Readiness Probes
GET/api/health
Verifies Go HTTP server, pure-Go SQLite WAL database connectivity, and repository disk access.
Retrieves the authenticated developer's personalized dashboard context including their active repositories, paginated recent activity stream, affiliated organizations, and starred projects.
REST API Reference (v1)/Repositories & Branches API
Repositories & Branches API
Endpoints for repository creation, metadata inspection, stars, collaborators, and branch lifecycle.
List Repositories
GET/api/v1/repos
Lists repositories. Optional query parameters include ?owner={username} to filter by owner handle, or ?q={query} to perform keyword filtering.
Search Repositories
GET/api/v1/repos/search?q={query}&limit=20&page=1
Global repository search supporting keyword matching against repository name, description, owner username, and combined owner/repo paths (e.g. cbdc/website or cbdc/). Supports ?q=/ to discover all accessible repositories without filter elimination. Includes strict access control: unauthenticated users only discover public repositories; authenticated users discover public repositories and private repositories where they are the owner, a confirmed collaborator, or an organization member.
Retrieves paginated repositories and platform highlights for the Explore page. Supports keyword search via ?q={query}, current page selection via ?page={page}, and page size via ?limit={limit}.
Clones an external Git repository from GitHub, GitLab, Bitbucket, or any Git remote URL directly into ProGit with complete commit history, branches, and tags. Supports optional authentication credentials for private repositories.
{
"clone_url": "https://github.com/octocat/Hello-World.git",
"owner": "dev_alice",
"name": "Hello-World",
"description": "Imported repository with full history",
"private": false,
"auth_username": "",
"auth_password": ""
}
Returns tree entries, root README content (if available), total commits count, and the latest commit details for the requested ref and path (matching GitHub's repository code view).
Returns only users eligible for issue assignment: confirmed repository owners and collaborators. External users and platform strangers are strictly excluded.
Requires repository owner or administrator privileges (returns 401/403 for non-owners). When enabled, the live pages_url is exposed to all authorized repository viewers in GET /api/v1/repos/{owner}/{repo}, and static content is served at /pages/{owner}/{repo}/.
Requires valid Bearer token or session cookie. Supports A, AAAA, CNAME, MX, TXT, NS, PTR, and ALL. Enforces a 30 req/min limiter, 8-slot concurrency cap, and 3-second resolver timeout.
Simple, reliable procedures to backup, diagnose, and restore ProGit data.
Atomic Hot Backup CLI (VACUUM INTO)
ProGit provides a native hot backup engine that produces a consistent SQLite snapshot with SHA-256 integrity verification while active transactions are running:
# Run atomic hot backup with manifest generation
progit backup --output=/backups/progit-backup-$(date +%F).tar.gz
# Restore from backup archive
progit restore /backups/progit-backup-2026-11-14.tar.gz
ProGit Doctor CLI Diagnostics
Run embedded self-diagnostics to verify database integrity, permissions, git version, ports, and security:
progit doctor
Prometheus Telemetry & Metrics
Scrape runtime metrics, Git operations, and HTTP request latencies via the standard Prometheus exposition endpoint:
curl -s http://localhost:3000/metrics
# or through the API:
curl -s http://localhost:3000/api/v1/metrics
Manual Backup Procedure
Alternatively, archive directories directly after an administrative checkpoint:
Answers to common operational questions and error resolutions.
Q: Why do Git pushes over HTTP fail with 401 Unauthorized?
Ensure you authenticate with a valid username and password, or use a Personal Access Token (PAT) created from Settings > Access Tokens.
Q: How do I change the default SSH port from 2222?
Set SSH_PORT = <port> and SSH_LISTEN_PORT = <port> under [server] in app.ini, or pass PROGIT_SSH_PORT=<port> as an environment variable.
Q: How does ProGit Pages resolve file MIME types?
ProGit has a built-in MIME-type registry covering HTML, CSS, JavaScript, SVG, PNG, WebP, JSON, and WebAssembly. It delivers assets with proper Content-Type headers.
ProGit Enterprise: Multi-Node High Availability & Commercial Strategy
Architecture blueprint for multi-node clustering, disaster recovery, target market fit, and commercial monetization.
Executive Summary
ProGit has evolved into a high-performance, single-binary enterprise Git platform with low resource consumption, an embedded React interface, full SSH/HTTPS Git mechanics, and zero external runtime dependencies.
While the single-node architecture delivers industry-leading simplicity (< 100 MB RAM, sub-second startup), mid-market IT firms and enterprise engineering teams require Multi-Node High Availability (HA) to eliminate single points of failure (SPOF), achieve 99.99% service level agreements (SLAs), and support disaster recovery (DR). Furthermore, enterprise Dev/QA environments often require independent, air-gapped, or ephemeral staging Git clusters where per-seat pricing models from GitHub Enterprise ($21/user/mo) or GitLab Ultimate ($99/user/mo) are cost-prohibitive.
Key Architectural Objectives
Deliver active-active clustering, zero-downtime rolling upgrades, sub-second RPO, and a developer-friendly commercial pricing model (~40% to 80% savings vs. legacy platforms).
Multi-Node High Availability (HA) Architecture
A scalable, resilient ProGit HA cluster splits concerns into four distinct tiers:
HTTPS Traffic (Port 443 / 3000): Terminated at cloud load balancers or HAProxy. Continuous health probing against GET /healthz verifies database and storage health.
Git SSH Traffic (Port 22 / 2222): Layer-4 TCP balancing with PROXY protocol v2 to preserve client IP addresses in audit logs. Compute nodes share synchronized SSH Host Keys mounted via shared secrets to eliminate client host key mismatch warnings.
B. Stateless Compute Nodes (progit-core)
Application instances maintain zero local disk state.
User authentication tokens (JWT) are signed with asymmetric ECDSA keys.
Repository write locking and brute-force protection are coordinated via Redis.
C. Clustered Database Backend
Pluggable Store: Abstract database access to support SQLite (single-node) and PostgreSQL (clustered HA).
Patroni + PgBouncer: Primary PostgreSQL handles writes; read replicas handle heavy browsing queries. Automatic failover occurs in < 10 seconds.
Air-Gapped Embedded Option: LiteFS or rqlite (distributed SQLite over Raft) for edge environments desiring zero external DBMS dependencies.
D. Distributed Git Storage Options
Storage Model
Architecture
Complexity
Best Suited For
Model 1: Shared POSIX Storage
NFS v4.2 with lock leasing, CephFS, GlusterFS, or AWS EFS mounted at /data/repositories.
Low to Medium
Small and Mid-size businesses, on-premise VMs, rapid turnkey HA deployment.
Model 2: Storage RPC Daemons
Dedicated lightweight progit-storage nodes communicating with compute nodes via gRPC with Raft consensus.
High
Large hyperscale enterprises with massive multi-region write concurrency.
Automated health probes trigger LB node deregistration (5s); Patroni DB failover (10-15s).
Uptime SLA
99.95% – 99.99%
N+1 compute redundancy; automated zero-downtime rolling schema migrations.
Target Market Personas & Competitive Analysis
Persona 1: Small & Midsize Enterprises (SMEs) & Software Agencies
SaaS bills for GitHub ($21/user/mo) and GitLab ($99/user/mo) cost ₹10 Lakhs to ₹50+ Lakhs annually in perpetual per-seat rent. Self-managed GitLab is notoriously resource-heavy (demands 16 GB RAM minimum). ProGit provides an ultra-lightweight standalone alternative (< 200 MB RAM) with GitHub-standard UX, one-time turnkey implementation, and 75–85% 3-year cost savings.
Persona 2: Enterprise Dev, QA & Ephemeral Test Enclaves
Fast-growing engineering teams cannot afford per-seat licensing for ephemeral test environments, CI/CD runners, and bot accounts. ProGit's standalone platform provides unlimited users and repositories with zero per-seat taxes.
Feature / Metric
ProGit Standalone
GitHub Enterprise Server
GitLab Self-Managed
Gitea / Forgejo
Resource Footprint
Ultra-Low (< 200 MB)
Heavy (32 GB RAM min)
Heavy (16 GB RAM min)
Low (< 500 MB)
Startup / Boot Time
< 2 Seconds
10–15 Minutes
5–10 Minutes
< 5 Seconds
Single-Binary Simplicity
Yes (Pure Go + React)
No (Multi-VM Appliance)
No (Omnibus / 20+ services)
Yes
Multi-Node HA Mode
Stateless Compute + SQLite WAL / DB
Yes (High Tier)
Yes (Premium/Ultimate)
Limited / Complex
Air-Gapped Deployment
100% Native
Supported
Supported
Supported
Licensing Model
₹5L One-Time Standalone (Unlimited Seats)
Per-Seat SaaS ($21/seat/mo)
Per-Seat SaaS ($29–$99/seat/mo)
Free / Community
Installation & Handover
Turnkey Setup + Training + Handover
DIY / Extra Consultant Cost
DIY Omnibus / Complex
DIY Forum Support
Commercial & Operating Model Strategy
ProGit operates on a 100% Standalone Self-Hosted Delivery Model — never a SaaS rental. Customers maintain permanent ownership of their code, infrastructure, and running platform without ongoing per-seat licenses:
Full on-prem / cloud installation, developer training, operations runbooks & formal IT handover.
Small & Midsize Enterprises (SMEs) and high-security IT departments. Unlimited developers, unlimited repositories, zero seat tax forever.
Security Patches & Enhancements
Minimal Cost per Update On-demand / periodic
Critical CVE hotfixes, security patches, Go / React engine upgrades, and platform enhancements.
Production teams needing vendor-maintained stability while retaining complete IT autonomy and local control.
3-Year Total Cost of Ownership (TCO) Comparison (50 Engineers)
Cost Component
GitHub Enterprise Cloud / Server
GitLab Premium
ProGit Standalone Self-Hosted
Year 1: Licensing / Implementation
₹10.5 Lakhs (~$12,600 recurring)
₹14.5 Lakhs (~$17,400 recurring)
₹5.0 Lakhs (Turnkey Setup + Handover)
Year 2: Seat Renewal / Operations
₹10.5 Lakhs
₹14.5 Lakhs
~₹0.5 Lakhs (Minimal Security Patches)
Year 3: Seat Renewal / Operations
₹10.5 Lakhs
₹14.5 Lakhs
~₹0.5 Lakhs (Minimal Security Patches)
3-Year Cumulative Total
₹31.5 Lakhs
₹43.5 Lakhs
₹6.0 Lakhs (~81% to 86% Savings)
Capital Breakeven Period
Never (Perpetual SaaS drain)
Never (Perpetual SaaS drain)
~6 Months
Air-Gapped Cryptographic Offline Licensing
Zero Phone-Home Verification
For strictly air-gapped and defense environments, ProGit does not require outbound internet connectivity to validate licenses. Customers receive an offline JSON payload cryptographically signed with ProGit's 4096-bit RSA / Ed25519 private key:
Complete version release history for ProGit adhering to Semantic Versioning.
v1.8.0 — High Performance & Autonomous Zero-Ops Latest
Release Date: November 14, 2026
SQLite MMAP Direct I/O: 256MB direct kernel memory-mapping bypasses userspace buffer copying for microsecond-level query response.
Git Commit-Graph & Bloom Filters: Accelerated commit traversals (git log -- <path>) by 10x–50x with generation numbers.
Prometheus Telemetry: Zero-dependency native metrics at /metrics and /api/v1/metrics exposing Go runtime, HTTP latencies, Git operations, and DB connection pool gauges.
Developer Toolbox (/toolbox): 11 offline-first developer utilities including JSON/YAML validator, JWT inspector, Regex tester, Base64/Hash generator, UUID v4/v7, Unix timestamp converter, side-by-side diff, curl to fetch/go, DNS lookup, and Markdown previewer.
v1.5.0 — Default Branch Governance
Release Date: November 8, 2026
Global default branch setting (trunk, main, master) in app.ini and per-repository default branch switcher with automatic HEAD symref update.
v1.4.0 — DLP Download Restrictions & ProGit Pages
Release Date: November 5, 2026
Download restriction mode (can_download: false) protecting intellectual property while preserving web review access. Static site hosting via ProGit Pages at /pages/{owner}/{repo}/.
v1.0.0 – v1.3.0 — Platform Foundations
Automated ECDSA TLS and Let's Encrypt ACME (v1.3.0), rootless Podman/Docker deployment (v1.2.0), pure-Go Smart HTTP and native SSH daemon on port 2222 (v1.1.0), and initial sovereign platform release (v1.0.0).