FossilRepo

.fossil-settings Remove local test repos from Fossil tracking, add repos/*.f… 2 months, 3 weeks ago
.github Docker Scout fixes: non-root user + supply chain attestatio… 3 months ago
accounts Security hardening: HSTS headers, Cloudflare Turnstile on l… 3 months ago
assets Bind mount repos dir, add deploy.sh utility, fix docker-com… 3 months ago
config Add FEATURE_RELEASES, FEATURE_SYNC, FEATURE_FILES flags (al… 2 months, 3 weeks ago
core Add FEATURE_RELEASES, FEATURE_SYNC, FEATURE_FILES flags (al… 2 months, 3 weeks ago
ctl Sync all changes: public views, installer, infra, accounts … 3 months ago
docker Sync all changes: public views, installer, infra, accounts … 3 months ago
docs Add 0.1.1 changelog entry; update features page with chat, … 2 months, 3 weeks ago
fossil Fix wiki search rendering full page into itself — return pa… 2 months, 3 weeks ago
mcp_server Sync all changes: public views, installer, infra, accounts … 3 months ago
organization Sync all changes: public views, installer, infra, accounts … 3 months ago
pages Sync all changes: public views, installer, infra, accounts … 3 months ago
projects Security hardening: HSTS headers, Cloudflare Turnstile on l… 3 months ago
scripts Rotate secrets, deploy.sh reads from .env.deploy, gitignore… 3 months ago
site Sync: sidebar split, wiki ordering, non-destructive sync sc… 3 months ago
static Initial import: Fossilrepo — self-hosted Fossil forge with … 3 months ago
templates Show search results in main area when wiki search has match… 2 months, 3 weeks ago
testdata Sync all changes: public views, installer, infra, accounts … 3 months ago
tests v0.1.0 feature complete: chat, bundles, wiki links, author … 2 months, 3 weeks ago
.env.example Initial project from boilerworks-django-htmx 528 bytes 3 months ago
.env.production.example Prepare for open source: docs, cleanup, production config … 1.3 KB 3 months ago
.gitignore Sync: sidebar split, wiki ordering, non-destructive sync sc… 325 bytes 3 months ago
.scuttlebot.yaml Add management UI, docs, dark/light theme, and Fossil integ… 19 bytes 3 months ago
AGENTS.md Initial import: Fossilrepo — self-hosted Fossil forge with … 139 bytes 3 months ago
CHANGELOG.md Add 0.1.1 changelog entry; update features page with chat, … 4.1 KB 2 months, 3 weeks ago
CLAUDE.md Sync all changes: public views, installer, infra, accounts … 2.5 KB 3 months ago
CODE_OF_CONDUCT.md Initial import: Fossilrepo — self-hosted Fossil forge with … 1.3 KB 3 months ago
CONTRIBUTING.md Sync all changes: public views, installer, infra, accounts … 3.7 KB 3 months ago
Dockerfile Sync all changes: public views, installer, infra, accounts … 2.7 KB 3 months ago
LICENSE v0.1.0 feature complete: chat, bundles, wiki links, author … 1.1 KB 2 months, 3 weeks ago
Makefile Initial import: Fossilrepo — self-hosted Fossil forge with … 1.2 KB 3 months ago
README.md Add UI tour GIF and live instance links to README 6.5 KB 3 months ago
SECURITY.md Sync all changes: public views, installer, infra, accounts … 2.0 KB 3 months ago
boilerworks.yaml Initial import: Fossilrepo — self-hosted Fossil forge with … 2.5 KB 3 months ago
bootstrap.md Sync all changes: public views, installer, infra, accounts … 9.9 KB 3 months ago
conftest.py Fix fossil http proxy: remove GATEWAY_INTERFACE that broke … 3.6 KB 3 months ago
deploy.sh Session cleanup: deploy flow, template fixes, docker-compos… 1.1 KB 3 months ago
docker-compose.yaml Session cleanup: deploy flow, template fixes, docker-compos… 2.5 KB 3 months ago
install.sh v0.1.0 feature complete: chat, bundles, wiki links, author … 73.1 KB 2 months, 3 weeks ago
manage.py Initial import: Fossilrepo — self-hosted Fossil forge with … 274 bytes 3 months ago
mkdocs.yml Document feature flags in administration guide; update docs… 2.5 KB 2 months, 3 weeks ago
pyproject.toml v0.1.0 feature complete: chat, bundles, wiki links, author … 3.0 KB 2 months, 3 weeks ago
run.sh Initial import: Fossilrepo — self-hosted Fossil forge with … 2.1 KB 3 months ago
startup.py Initial import: Fossilrepo — self-hosted Fossil forge with … 506 bytes 3 months ago
tmp Delete _old_fossilrepo/, implement sync CLI, Git mirror syn… 1 byte 3 months ago
uv.lock Sync all changes: public views, installer, infra, accounts … 174.7 KB 3 months ago
README

Fossilrepo

Self-hosted Fossil forge with a modern web interface.

FossilRepo Tour

Fossilrepo wraps Fossil SCM with a Django + HTMX management layer, replacing Fossil's built-in web UI with a GitHub/GitLab-caliber experience while preserving everything that makes Fossil unique: single-file repos, built-in wiki, tickets, forum, and technotes.

Live instance: fossilrepo.io | Docs: fossilrepo.dev | Powered by BoilerWorks

Why Fossilrepo?

Fossil is the most underrated version control system. Every repository is a single SQLite file containing your code, wiki, tickets, forum, and technotes. No external services, no complex setup. But its web UI hasn't changed since 1998.

Fossilrepo fixes that. You get:

  • A modern dark/light UI built with Django, HTMX, Alpine.js, and Tailwind CSS
  • GitHub-style code browser with line numbers, blame, history, and syntax highlighting
  • Timeline with DAG graph showing fork/merge connectors and color-coded branches
  • Full ticket CRUD with filters, comments, and CSV export
  • Wiki with Markdown + Fossil markup + Pikchr diagram rendering
  • Forum with threaded discussions
  • Releases with file attachments and markdown changelogs
  • Git mirror sync to GitHub/GitLab via OAuth
  • Clone/push/pull over HTTP and SSH through Django's auth layer
  • Webhook dispatch with HMAC signing and delivery logs
  • Omnibus Docker image with Fossil compiled from source

All while Fossil remains the source of truth. Fossilrepo reads .fossil files directly via SQLite for speed, and uses the fossil CLI for writes to preserve artifact integrity.

Stack

Layer Technology
Backend Django 5 (Python 3.12+)
Frontend HTMX 2.0 + Alpine.js 3 + Tailwind CSS (CDN)
Database PostgreSQL 16 (app data) + SQLite (Fossil repos)
Cache/Broker Redis 7
Jobs Celery + Redis
Auth Session-based (httpOnly cookies)
SCM Fossil 2.24 (compiled from source in Docker)
Linter Ruff

Quick Start

git clone https://github.com/ConflictHQ/fossilrepo.git
cd fossilrepo
docker compose up -d --build

# Run migrations and seed sample data
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py seed

# Open the app
open http://localhost:8000

Default users: admin / admin (superuser) and viewer / viewer (read-only).

Features

Code Browser

  • Directory navigation with breadcrumbs
  • Syntax-highlighted source view with line numbers and permalinks
  • Blame with age-based coloring (newest = brand red, oldest = gray)
  • File history, raw download, rendered preview for Markdown/HTML

Timeline

  • DAG graph with fork/merge connectors, color-coded branches
  • Merge commit diamonds, leaf indicators
  • Keyboard navigation (j/k/Enter), HTMX infinite scroll
  • RSS feed

Diffs

  • Unified and side-by-side view (toggle with localStorage preference)
  • Syntax highlighting via highlight.js
  • Line-level permalinks
  • Compare any two checkins

Tickets

  • Filter by status, type, priority, severity
  • Full CRUD: create, edit, close/reopen, comment
  • CSV export
  • Pagination with configurable page size

Wiki

  • Markdown + Fossil wiki markup + raw HTML
  • Pikchr diagram rendering
  • Right-sidebar table of contents
  • Create and edit pages

Forum

  • Threaded discussions (Fossil-native + Django-backed posts)
  • Create threads, post replies
  • Markdown body with preview

Releases

  • Versioned releases with tag names and markdown changelogs
  • File attachments with download counts
  • Draft and prerelease support

Sync

  • Pull from upstream Fossil remotes
  • Git mirror to GitHub/GitLab (OAuth or SSH key auth)
  • Clone/push/pull over HTTP via fossil http CGI proxy
  • SSH push via restricted sshd (port 2222)
  • Configurable sync modes: on-change, scheduled, both

Webhooks

  • Outbound webhooks on checkin, ticket, wiki, and release events
  • HMAC-SHA256 signed payloads
  • Exponential backoff retry (3 attempts)
  • Delivery log with response status and timing

Organization

  • Single-org model with teams and members
  • User CRUD: create, edit, deactivate, change password
  • Team management with member assignment
  • Project-level team roles: read, write, admin
  • Project visibility: public, internal, private

Infrastructure

  • Omnibus Docker image (Fossil compiled from source)
  • Caddy for SSL termination and subdomain routing
  • Litestream for continuous SQLite-to-S3 replication
  • Celery Beat for scheduled metadata sync and upstream checks
  • Encrypted credential storage (Fernet/AES-128-CBC at rest)

Architecture

Browser
  |
  v
Django 5 + HTMX + Alpine.js + Tailwind CSS
  |
  |-- FossilReader (direct SQLite reads from .fossil files)
  |-- FossilCLI (subprocess wrapper for write operations)
  |-- fossil http (CGI proxy for clone/push/pull)
  |
  |-- PostgreSQL 16 (orgs, users, teams, projects, settings)
  |-- Redis 7 (Celery broker, cache)
  |-- Celery (background sync, webhooks, notifications)
  |
  v
.fossil files (SQLite — code + wiki + tickets + forum + technotes)
  |
  v
Litestream --> S3 (continuous backup)

No separate frontend service. Django serves everything: templates, static files, and HTMX partials.

Configuration

All runtime settings are configurable via Django admin (Constance):

Setting Default Description
SITE_NAME Fossilrepo Display name
FOSSIL_DATA_DIR /data/repos Where .fossil files live
FOSSIL_BINARY_PATH fossil Path to the fossil binary
FOSSIL_STORE_IN_DB false Store .fossil snapshots via Django file storage
FOSSIL_S3_TRACKING false Track S3/Litestream replication
GIT_SYNC_MODE disabled Default sync mode for new mirrors
GIT_SYNC_SCHEDULE */15 * * * * Default cron for scheduled sync

See .env.example for all environment variables and .env.production.example for production configuration.

Development

# Local development (without Docker)
uv sync --all-extras
DJANGO_DEBUG=true POSTGRES_HOST=localhost uv run python manage.py runserver

# Run tests
DJANGO_DEBUG=true uv run pytest

# Lint
ruff check . && ruff format --check .

See CONTRIBUTING.md for the full development guide and bootstrap.md for codebase conventions.

License

MIT License. See LICENSE for details.


Built by CONFLICT. Fossilrepo is open source under the MIT license.

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button