Go to file
Admin 5832d93f0a
Some checks failed
Build and Release / Create Release (push) Has been skipped
Build and Release / Integration Tests (PostgreSQL) (push) Successful in 1m34s
Build and Release / Lint (push) Failing after 1m53s
Build and Release / Build Binaries (amd64, darwin) (push) Has been skipped
Build and Release / Build Binaries (amd64, linux) (push) Has been skipped
Build and Release / Build Binaries (amd64, windows) (push) Has been skipped
Build and Release / Build Binaries (arm64, darwin) (push) Has been skipped
Build and Release / Build Binaries (arm64, linux) (push) Has been skipped
Build and Release / Unit Tests (push) Successful in 2m5s
fix: hide Actions/Activity for non-contributors, hide PRs/Projects for non-logged-in users
2026-01-11 03:49:30 +00:00
.devcontainer bump devcontainer to go 1.25 (#35404) 2025-09-04 04:21:00 +00:00
.gitcleaner feat: add Phases 3-5 enhancements (org profiles, pages, wiki v2 API) 2026-01-09 15:14:27 -05:00
.gitea fix: Minio tests and release upload URL 2026-01-10 16:35:54 -05:00
.github Convert locale files from ini to json format (#35489) 2025-12-19 09:50:48 -08:00
assets fix: Go linter issues in v2 API 2026-01-10 08:22:37 -05:00
build Use flatten translation keys (#36225) 2025-12-25 12:51:33 -08:00
cmd fix: use WaitGroup.Go() for modernize linter 2026-01-09 18:11:52 -05:00
contrib Intorduce "config edit-ini" sub command to help maintaining INI config file (#35735) 2025-10-25 10:54:55 +08:00
custom/conf Replace CSRF cookie with CrossOriginProtection (#36183) 2025-12-25 12:33:34 +02:00
docker Intorduce "config edit-ini" sub command to help maintaining INI config file (#35735) 2025-10-25 10:54:55 +08:00
docs docs: comprehensive testing guide covering all 5 phases 2026-01-09 15:24:40 -05:00
models fix: org overview stats field names and add star count 2026-01-11 02:30:54 +00:00
modules fix: org overview stats field names and add star count 2026-01-11 02:30:54 +00:00
options fix: RelAvatarLink ctx arg, GitCaddy branding in error message 2026-01-11 03:15:33 +00:00
public Update JS deps (#35978) 2025-11-20 21:53:44 +00:00
routers fix: small icons for recent activity, hide private repos from non-members 2026-01-11 03:32:29 +00:00
sdk fix: use WaitGroup.Go() for modernize linter 2026-01-09 18:11:52 -05:00
services fix: add IsOrganizationMember check for pin to org dropdown 2026-01-11 02:34:34 +00:00
snap add pnpm to Snapcraft (#35778) 2025-10-29 19:34:40 +01:00
templates fix: hide Actions/Activity for non-contributors, hide PRs/Projects for non-logged-in users 2026-01-11 03:49:30 +00:00
tests Make "commit statuses" API accept slashes in "ref" (#36264) 2026-01-01 09:56:07 +08:00
tools Replace lint-go-gopls with additional govet linters (#36028) 2025-11-29 14:13:22 +00:00
web_src fix: prevent 100% width radio buttons (#36262) 2025-12-29 09:51:10 +02:00
.air.toml Update JS deps, fix deprecations (#36040) 2025-11-27 23:58:10 +00:00
.changelog.yml Update .changelog file to add performance label group (#33472) 2025-02-02 06:40:39 +00:00
.dockerignore Add cache to container build (#35697) 2025-11-02 09:42:25 +00:00
.editorconfig Allow empty commit when merging pull request with squash style (#35989) 2025-11-22 06:02:25 +00:00
.envrc Enable direnv (#31672) 2024-07-23 12:07:41 +00:00
.gitattributes Add ability for local makefile with personal customizations that wouldnt affect remote repo (#35836) 2025-11-08 20:23:55 +00:00
.gitignore Add ability for local makefile with personal customizations that wouldnt affect remote repo (#35836) 2025-11-08 20:23:55 +00:00
.gitpod.yml Remove sqlite-viewer and using database client (#31223) 2024-06-03 10:41:29 +00:00
.golangci.yml chore: increase golangci-lint timeout to 30m 2026-01-09 18:33:36 -05:00
.ignore Clean bindata (#34728) 2025-06-16 12:03:51 +00:00
.mailmap [chore] add git mailmap for proper attribution of authorship (#33612) 2025-02-16 20:49:28 +08:00
.markdownlint.yaml Enable markdownlint no-trailing-punctuation and no-blanks-blockquote (#29214) 2024-02-17 13:18:05 +00:00
.npmrc Switch to pnpm (#35274) 2025-09-04 01:17:14 +00:00
.spectral.yaml Add spectral linter for Swagger (#20321) 2022-07-11 18:07:16 -05:00
.yamllint.yaml fully replace drone with actions (#27556) 2023-10-11 06:39:32 +00:00
ai_enhancements.md docs: add feature enhancement specifications 2026-01-08 10:16:33 -05:00
BSDmakefile Fix build errors on BSD (in BSDMakefile) (#27594) 2023-10-13 15:38:27 +00:00
CHANGELOG-archived.md Fix changelog (main) (#30582) 2024-04-19 06:08:30 +00:00
CHANGELOG.md Front port changelog (#36193) 2025-12-18 14:05:49 -08:00
CODE_OF_CONDUCT.md Fixed minor typos in two files #HSFDPMUW (#34944) 2025-07-06 09:27:26 -07:00
CONTRIBUTING.md Update JS deps (#35978) 2025-11-20 21:53:44 +00:00
crowdin.yml Convert locale files from ini to json format (#35489) 2025-12-19 09:50:48 -08:00
DCO Remove address from DCO (#22595) 2023-01-24 18:52:38 +00:00
Dockerfile Revert "Bump alpine to 3.23 (#36185)" (#36202) 2025-12-18 23:18:01 -08:00
Dockerfile.rootless Revert "Bump alpine to 3.23 (#36185)" (#36202) 2025-12-18 23:18:01 -08:00
enhancements.md feat: add Phases 3-5 enhancements (org profiles, pages, wiki v2 API) 2026-01-09 15:14:27 -05:00
eslint.config.ts Update JS deps and eslint enhancements (#36147) 2025-12-17 17:35:33 +00:00
eslint.json.config.ts Add JSON linting (#36192) 2025-12-19 06:27:21 +00:00
flake.lock Port away from flake-utils (#35675) 2025-11-04 16:28:59 +00:00
flake.nix Port away from flake-utils (#35675) 2025-11-04 16:28:59 +00:00
go.mod feat(api): Add v2 API for public releases and app updates 2026-01-10 08:10:41 -05:00
go.sum feat(api): Add v2 API for public releases and app updates 2026-01-10 08:10:41 -05:00
LICENSE Fix typo 2016-11-08 08:42:05 +01:00
main_timezones.go add timetzdata build tag to binary releases (#33463) 2025-02-05 04:17:08 +00:00
main.go Fix shutdown waitgroup panic (#35676) 2025-10-25 00:02:58 -07:00
MAINTAINERS apply as maintainer (#35424) 2025-09-06 09:56:18 -07:00
Makefile fix: use Go 1.25 in CI workflows 2026-01-09 16:43:06 -05:00
package.json Add date to "No Contributions" tooltip (#36190) 2025-12-19 09:48:53 +01:00
playwright.config.ts Add initial typescript config and use it for eslint,vitest,playwright (#31186) 2024-06-28 16:15:51 +00:00
pnpm-lock.yaml Add date to "No Contributions" tooltip (#36190) 2025-12-19 09:48:53 +01:00
pyproject.toml Replace poetry with uv (#35084) 2025-07-15 21:19:39 +00:00
README.md feat(api): Add v2 API for public releases and app updates 2026-01-10 08:10:41 -05:00
README.zh-cn.md docs: add Chinese translations for README files (#34132) 2025-04-07 11:11:48 -07:00
README.zh-tw.md docs: add Chinese translations for README files (#34132) 2025-04-07 11:11:48 -07:00
SECURITY.md Upgrade security public key (#34956) 2025-07-05 10:11:41 -04:00
stylelint.config.ts Migrate tools and configs to typescript, require node.js >= 22.18.0 (#35421) 2025-09-06 12:58:25 +00:00
suggestions.md docs: add architectural review and suggestions 2026-01-08 09:09:08 -05:00
tailwind.config.ts Fix a number of strictNullChecks-related issues (#35795) 2025-11-03 20:17:06 +00:00
tsconfig.json Enable TypeScript strictNullChecks (#35843) 2025-12-03 02:13:16 +00:00
types.d.ts Clean up npm dependencies (#35508) 2025-09-17 21:39:44 +00:00
updates.config.ts Clean up npm dependencies (#35484) 2025-09-15 16:34:54 +02:00
uv.lock Update dependencies (#35733) 2025-10-23 08:35:48 +00:00
vitest.config.ts Convert frontend code to typescript (#31559) 2024-07-07 15:32:30 +00:00
webpack.config.ts Fix a number of strictNullChecks-related issues (#35795) 2025-11-03 20:17:06 +00:00

GitCaddy

The AI-native Git platform. Self-hosted, fast, and designed for the age of AI-assisted development.

What is GitCaddy?

GitCaddy transforms Git hosting into an AI-ready platform. While traditional Git servers treat AI tools as an afterthought, GitCaddy is built from the ground up with structured APIs, capability discovery, and intelligent context that AI assistants need to write correct code, generate valid CI/CD workflows, and understand your projects deeply.

Key differentiators:

  • V2 API - Modern, AI-optimized endpoints with batch operations, streaming, and structured errors
  • Runner Capability Discovery - AI tools query runner capabilities before generating workflows
  • Action Compatibility Database - Curated compatibility matrix prevents workflow errors
  • AI Context APIs - Rich, structured repository and issue intelligence
  • Workflow Validation - Pre-flight checks for CI/CD workflows before commit

Features

V2 API - Modern, AI-Optimized Interface

A complete API redesign focused on AI tool consumption:

Feature Description
Batch Operations Fetch up to 100 files in a single request
Streaming NDJSON streams for progressive processing
Idempotency Built-in support for safe request retries
Structured Errors Machine-readable error codes, not just HTTP status
Request Tracking Every request gets a unique ID for debugging
Health Checks Kubernetes-compatible liveness/readiness probes
Operation Progress Server-Sent Events for long-running operations
GET  /api/v2/batch/files          # Bulk file retrieval
POST /api/v2/stream/files         # NDJSON streaming
GET  /api/v2/operations/{id}      # Operation status
GET  /api/v2/health/ready         # Readiness probe

AI Context APIs - Repository Intelligence

Purpose-built endpoints that give AI tools the context they need:

Repository Summary (/api/v2/ai/repo/summary)

{
  "name": "my-project",
  "primary_language": "Go",
  "project_type": "application",
  "build_system": "go modules",
  "test_framework": "go test",
  "suggested_entry_points": ["cmd/main.go", "internal/app/"],
  "config_files": ["go.mod", "Makefile", ".gitea/workflows/"],
  "language_stats": {"Go": 45000, "YAML": 2000}
}

Repository Navigation (/api/v2/ai/repo/navigation)

  • Directory tree with depth control
  • Important paths ranked by priority (entry points, tests, docs)
  • File type distribution

Issue Context (/api/v2/ai/issue/context)

  • Issue details with all comments
  • Related issues and code references
  • AI hints: category (bug/feature), complexity estimation, suggested files

Runner Capability Discovery

Runners report their capabilities. AI tools query before generating workflows.

Endpoint: GET /api/v2/repos/{owner}/{repo}/actions/runners/capabilities

{
  "runners": [
    {
      "id": 1,
      "name": "ubuntu-runner",
      "status": "online",
      "labels": ["ubuntu-latest", "docker"],
      "capabilities": {
        "os": "linux",
        "arch": "amd64",
        "docker": true,
        "docker_compose": true,
        "shell": ["bash", "sh"],
        "tools": {
          "node": ["18.19.0", "20.10.0"],
          "go": ["1.21.5", "1.22.0"],
          "python": ["3.11.6", "3.12.0"]
        },
        "features": {
          "cache": true,
          "services": true
        }
      }
    }
  ],
  "platform": {
    "type": "gitea",
    "version": "1.26.0",
    "supported_actions": {
      "actions/checkout": {"versions": ["v3", "v4"]},
      "actions/setup-node": {"versions": ["v3", "v4"]},
      "actions/upload-artifact": {"versions": ["v3"], "notes": "v4 not supported"}
    },
    "unsupported_features": [
      "GitHub-hosted runners",
      "OIDC token authentication"
    ]
  },
  "workflow_hints": {
    "preferred_checkout": "actions/checkout@v4",
    "artifact_upload_alternative": "Use Gitea API for artifacts"
  }
}

Workflow Validation

Validate workflows before committing. Catch incompatibilities early.

Endpoint: POST /api/v2/repos/{owner}/{repo}/actions/workflows/validate

// Request
{
  "content": "name: Build\non: push\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/upload-artifact@v4"
}

// Response
{
  "valid": false,
  "warnings": [
    {
      "line": 8,
      "action": "actions/upload-artifact@v4",
      "severity": "error",
      "message": "actions/upload-artifact@v4 is not supported",
      "suggestion": "Use actions/upload-artifact@v3"
    }
  ],
  "runner_match": [
    {
      "job": "build",
      "runs_on": ["ubuntu-latest"],
      "matched_runners": ["ubuntu-runner-1"],
      "capabilities_met": true
    }
  ]
}

Action Compatibility Database

Built-in knowledge of GitHub Action compatibility:

Action Compatible Versions Notes
actions/checkout v2, v3, v4 Fully compatible
actions/setup-node v2, v3, v4 Fully compatible
actions/setup-go v3, v4, v5 Fully compatible
actions/setup-python v4, v5 Fully compatible
actions/cache v3, v4 Fully compatible
actions/upload-artifact v2, v3 v4 not supported
actions/download-artifact v2, v3 v4 not supported

Release Archive

Archive old releases without deleting them:

  • Toggle archived status via UI or API
  • Filter releases by archived state
  • Archived releases hidden by default, toggle to show
  • Preserves release history for compliance
POST   /api/v1/repos/{owner}/{repo}/releases/{id}/archive
DELETE /api/v1/repos/{owner}/{repo}/releases/{id}/archive
GET    /api/v1/repos/{owner}/{repo}/releases?archived=false

Public Landing Pages & Releases for Private Repos

Private repositories can expose a public landing page and/or public releases. Perfect for:

  • Commercial software with private source but public downloads
  • Open-core projects with public documentation
  • Electron/desktop apps needing public update endpoints

Configure in .gitea/landing.yaml:

enabled: true
public_landing: true  # Allow unauthenticated access to landing page

hero:
  title: "My App"
  tagline: "The best app ever"

advanced:
  public_releases: true  # Allow unauthenticated access to releases

API Endpoints (no auth required when enabled):

GET /api/v2/repos/{owner}/{repo}/pages/config    # Landing page config
GET /api/v2/repos/{owner}/{repo}/pages/content   # Landing page content
GET /api/v2/repos/{owner}/{repo}/releases        # List releases
GET /api/v2/repos/{owner}/{repo}/releases/latest # Latest release

App Update API (Electron/Squirrel Compatible)

Purpose-built endpoint for desktop app auto-updates. Returns Squirrel-compatible JSON format.

Endpoint: GET /api/v2/repos/{owner}/{repo}/releases/update

Query Parameters:

Parameter Description Default
version Current app version (semver) Required
platform darwin, windows, linux Runtime OS
arch x64, arm64 Runtime arch
channel stable, beta, alpha stable

Response (200 OK - update available):

{
  "url": "https://git.example.com/owner/repo/releases/download/v1.2.0/App-darwin-arm64.zip",
  "name": "v1.2.0",
  "notes": "Release notes in markdown...",
  "pub_date": "2026-01-10T12:00:00Z",
  "platform": {
    "size": 45000000,
    "releases_url": "https://...",  // Windows RELEASES file
    "nupkg_url": "https://..."      // Windows nupkg
  }
}

Response (204 No Content): No update available

Electron Integration:

// In your Electron app
import { autoUpdater } from 'electron'

const version = app.getVersion()
const platform = process.platform
const arch = process.arch === 'arm64' ? 'arm64' : 'x64'

autoUpdater.setFeedURL({
  url: `https://git.example.com/api/v2/repos/owner/repo/releases/update?version=${version}&platform=${platform}&arch=${arch}`
})

autoUpdater.checkForUpdates()

Installation

From Binary

Download from Releases:

# Linux (amd64)
curl -L -o gitcaddy https://git.marketally.com/gitcaddy/gitea/releases/latest/download/gitea-linux-amd64
chmod +x gitcaddy
./gitcaddy web

From Source

git clone https://git.marketally.com/gitcaddy/gitea.git
cd gitea
TAGS="bindata sqlite sqlite_unlock_notify" make build
./gitea web

Docker

docker run -d \
  --name gitcaddy \
  -p 3000:3000 \
  -v ./data:/data \
  gitcaddy/gitea:latest

Configuration

GitCaddy uses the same configuration as Gitea. Key settings for AI features:

[server]
ROOT_URL = https://your-instance.com/

[actions]
ENABLED = true

[api]
; Enable V2 API (enabled by default)
ENABLE_V2_API = true

; Max files in batch request
MAX_BATCH_SIZE = 100

; Enable AI context endpoints
ENABLE_AI_CONTEXT = true

GitCaddy Runner

For full capability reporting, use the GitCaddy act_runner:

# Download
curl -L -o act_runner https://git.marketally.com/gitcaddy/act_runner/releases/latest/download/act_runner-linux-amd64
chmod +x act_runner

# Register
./act_runner register \
  --instance https://your-instance.com \
  --token YOUR_TOKEN \
  --name my-runner

# Run (automatically detects and reports capabilities)
./act_runner daemon

The runner automatically detects:

  • OS and architecture
  • Docker/Podman availability
  • Installed tools (Node.js, Go, Python, Java, .NET, Rust)
  • Available shells
  • Docker Compose support

API Documentation

Interactive API documentation available at:

  • /api/v2/docs - Scalar API explorer
  • /api/v2/swagger.json - OpenAPI specification

Architecture

                                    GitCaddy
                                       |
        +------------------------------+------------------------------+
        |                              |                              |
   V2 API Layer                  Actions Engine                  Web Interface
        |                              |                              |
   +----+----+                    +----+----+                    +----+----+
   |         |                    |         |                    |         |
 Batch   Streaming            Runners   Workflows              Repos   Releases
 Files    (NDJSON)           Capability  Validation           (Archive)
   |         |               Discovery      |
   |         |                    |         |
   +----+----+--------------------+---------+
        |
   AI Context APIs
        |
   +----+----+----+
   |    |    |    |
  Repo Issue Nav Summary
Project Description
gitcaddy/act_runner Runner with capability detection
gitcaddy/actions-proto-go Protocol definitions

Building

Requirements:

  • Go 1.24+ (see go.mod)
  • Node.js 22.6+ (for frontend)
  • Make
# Full build
TAGS="bindata sqlite sqlite_unlock_notify" make build

# Backend only
make backend

# Frontend only
make frontend

# Run tests
make test

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: make test
  5. Submit a pull request

License

MIT License - see LICENSE for details.


Acknowledgments

GitCaddy is a fork of Gitea, the open-source self-hosted Git service. We thank the Gitea team and all contributors for building the foundation that makes GitCaddy possible.