|
45192ef…
|
ragelink
|
1 |
# Features |
|
45192ef…
|
ragelink
|
2 |
|
|
45192ef…
|
ragelink
|
3 |
## Code Browser |
|
45192ef…
|
ragelink
|
4 |
- Directory navigation with breadcrumbs and file size display |
|
45192ef…
|
ragelink
|
5 |
- Syntax-highlighted source view with line numbers and permalinks |
|
45192ef…
|
ragelink
|
6 |
- Copy-link popover on line number click |
|
45192ef…
|
ragelink
|
7 |
- Blame with age-based coloring (newest = red, oldest = gray) |
|
45192ef…
|
ragelink
|
8 |
- File history showing all checkins that touched a file |
|
45192ef…
|
ragelink
|
9 |
- Raw file download |
|
45192ef…
|
ragelink
|
10 |
- Rendered preview for Markdown, HTML, and other markup |
|
45192ef…
|
ragelink
|
11 |
- README auto-rendering at directory level |
|
45192ef…
|
ragelink
|
12 |
|
|
45192ef…
|
ragelink
|
13 |
## Timeline |
|
45192ef…
|
ragelink
|
14 |
- DAG graph with fork/merge connectors and color-coded branches (8-color palette) |
|
45192ef…
|
ragelink
|
15 |
- Merge commit diamonds, leaf indicators (open circles) |
|
45192ef…
|
ragelink
|
16 |
- Date headers grouping commits by day |
|
45192ef…
|
ragelink
|
17 |
- Keyboard navigation (j/k to move, Enter to open) |
|
45192ef…
|
ragelink
|
18 |
- HTMX infinite scroll for seamless loading |
|
45192ef…
|
ragelink
|
19 |
- Event type filtering (checkins, wiki, tickets) |
|
45192ef…
|
ragelink
|
20 |
- RSS feed |
|
45192ef…
|
ragelink
|
21 |
|
|
45192ef…
|
ragelink
|
22 |
## Diffs |
|
45192ef…
|
ragelink
|
23 |
- Unified and side-by-side view (toggle with localStorage preference) |
|
45192ef…
|
ragelink
|
24 |
- Syntax highlighting via highlight.js (auto-detected from file extension) |
|
45192ef…
|
ragelink
|
25 |
- Color-coded additions (green) and deletions (red) |
|
45192ef…
|
ragelink
|
26 |
- Line-level permalinks |
|
45192ef…
|
ragelink
|
27 |
- Compare any two checkins |
|
45192ef…
|
ragelink
|
28 |
- Fossil delta decoding for accurate diff computation |
|
45192ef…
|
ragelink
|
29 |
|
|
45192ef…
|
ragelink
|
30 |
## Tickets |
|
45192ef…
|
ragelink
|
31 |
- Full CRUD: create, edit, close/reopen, add comments |
|
45192ef…
|
ragelink
|
32 |
- Filter by status, type, priority, severity |
|
45192ef…
|
ragelink
|
33 |
- Pagination with configurable per-page (25/50/100) |
|
45192ef…
|
ragelink
|
34 |
- Live search via HTMX |
|
45192ef…
|
ragelink
|
35 |
- CSV export |
|
45192ef…
|
ragelink
|
36 |
- Custom field definitions (text, textarea, select, checkbox, date, URL) |
|
45192ef…
|
ragelink
|
37 |
- Custom SQL ticket reports with injection prevention |
|
45192ef…
|
ragelink
|
38 |
- Per-page count selector |
|
45192ef…
|
ragelink
|
39 |
|
|
45192ef…
|
ragelink
|
40 |
## Wiki |
|
45192ef…
|
ragelink
|
41 |
- Markdown + Fossil wiki markup + raw HTML rendering |
|
45192ef…
|
ragelink
|
42 |
- Pikchr diagram rendering (via fossil CLI) |
|
45192ef…
|
ragelink
|
43 |
- Create and edit pages |
|
45192ef…
|
ragelink
|
44 |
- Right-sidebar table of contents |
|
45192ef…
|
ragelink
|
45 |
- Internal link rewriting (Fossil URLs mapped to app URLs) |
|
45192ef…
|
ragelink
|
46 |
- Footnotes, tables, fenced code blocks |
|
45192ef…
|
ragelink
|
47 |
|
|
45192ef…
|
ragelink
|
48 |
## Forum |
|
45192ef…
|
ragelink
|
49 |
- Threaded discussions (Fossil-native + Django-backed posts) |
|
45192ef…
|
ragelink
|
50 |
- Create new threads with markdown body |
|
45192ef…
|
ragelink
|
51 |
- Post replies with threading |
|
45192ef…
|
ragelink
|
52 |
- Merged view showing both Fossil and Django posts |
|
45192ef…
|
ragelink
|
53 |
|
|
45192ef…
|
ragelink
|
54 |
## Releases |
|
45192ef…
|
ragelink
|
55 |
- Versioned releases with tag names and markdown changelogs |
|
45192ef…
|
ragelink
|
56 |
- Source code archives: tar.gz and zip (via fossil tarball/zip) |
|
45192ef…
|
ragelink
|
57 |
- File attachments with download counts |
|
45192ef…
|
ragelink
|
58 |
- Draft and prerelease support |
|
45192ef…
|
ragelink
|
59 |
- CRUD for authorized users |
|
45192ef…
|
ragelink
|
60 |
|
|
45192ef…
|
ragelink
|
61 |
## Technotes |
|
45192ef…
|
ragelink
|
62 |
- Create and edit developer journal entries |
|
45192ef…
|
ragelink
|
63 |
- Markdown body with preview |
|
45192ef…
|
ragelink
|
64 |
- Timestamped, shown in timeline |
|
45192ef…
|
ragelink
|
65 |
|
|
45192ef…
|
ragelink
|
66 |
## Unversioned Files |
|
45192ef…
|
ragelink
|
67 |
- Browse Fossil's unversioned content (equivalent to Git LFS) |
|
45192ef…
|
ragelink
|
68 |
- File list with size and date |
|
45192ef…
|
ragelink
|
69 |
- Download individual files |
|
45192ef…
|
ragelink
|
70 |
- Admin upload via fossil uv CLI |
|
45192ef…
|
ragelink
|
71 |
|
|
45192ef…
|
ragelink
|
72 |
## Branches, Tags, Technotes |
|
45192ef…
|
ragelink
|
73 |
- List all branches with open/closed status |
|
45192ef…
|
ragelink
|
74 |
- List all tags |
|
45192ef…
|
ragelink
|
75 |
- Searchable and paginated |
|
45192ef…
|
ragelink
|
76 |
|
|
45192ef…
|
ragelink
|
77 |
## Search |
|
45192ef…
|
ragelink
|
78 |
- Full-text search across checkins, tickets, and wiki pages |
|
45192ef…
|
ragelink
|
79 |
- Global search shortcut (/ key) |
|
45192ef…
|
ragelink
|
80 |
- Per-project scoped search |
|
45192ef…
|
ragelink
|
81 |
|
|
45192ef…
|
ragelink
|
82 |
## Sync |
|
45192ef…
|
ragelink
|
83 |
- Pull from upstream Fossil remotes |
|
45192ef…
|
ragelink
|
84 |
- Push to downstream Fossil remotes |
|
45192ef…
|
ragelink
|
85 |
- Bidirectional sync |
|
45192ef…
|
ragelink
|
86 |
- Git mirror to GitHub/GitLab via OAuth or SSH key auth |
|
45192ef…
|
ragelink
|
87 |
- Multiple mirrors per repo, each with own schedule and direction |
|
45192ef…
|
ragelink
|
88 |
- Configurable sync modes: on-change, scheduled (cron), both, disabled |
|
45192ef…
|
ragelink
|
89 |
- Clone/push/pull over HTTP (fossil http CGI proxy) |
|
45192ef…
|
ragelink
|
90 |
- Clone/push/pull over SSH (port 2222, forced command) |
|
45192ef…
|
ragelink
|
91 |
|
|
45192ef…
|
ragelink
|
92 |
## Webhooks |
|
45192ef…
|
ragelink
|
93 |
- Outbound HTTP webhooks on checkin, ticket, wiki, release events |
|
45192ef…
|
ragelink
|
94 |
- HMAC-SHA256 signed payloads |
|
45192ef…
|
ragelink
|
95 |
- Exponential backoff retry (3 attempts) |
|
45192ef…
|
ragelink
|
96 |
- Delivery log with response status and timing |
|
45192ef…
|
ragelink
|
97 |
- Per-project webhook configuration |
|
45192ef…
|
ragelink
|
98 |
|
|
45192ef…
|
ragelink
|
99 |
## CI Status Checks |
|
45192ef…
|
ragelink
|
100 |
- External API for CI systems to POST build status per checkin |
|
45192ef…
|
ragelink
|
101 |
- Bearer token authentication |
|
45192ef…
|
ragelink
|
102 |
- SVG badge endpoint for embedding in READMEs |
|
45192ef…
|
ragelink
|
103 |
- Status display on checkin detail page (green/red/yellow icons) |
|
45192ef…
|
ragelink
|
104 |
|
|
45192ef…
|
ragelink
|
105 |
## Releases |
|
45192ef…
|
ragelink
|
106 |
- Create/edit/delete versioned releases |
|
45192ef…
|
ragelink
|
107 |
- Link to Fossil checkin |
|
45192ef…
|
ragelink
|
108 |
- Markdown changelog body |
|
45192ef…
|
ragelink
|
109 |
- Source code download (tar.gz, zip) |
|
45192ef…
|
ragelink
|
110 |
- File attachments with download tracking |
|
45192ef…
|
ragelink
|
111 |
- Draft and prerelease flags |
|
45192ef…
|
ragelink
|
112 |
|
|
45192ef…
|
ragelink
|
113 |
## Organization Management |
|
45192ef…
|
ragelink
|
114 |
- Single-org model with settings, website, description |
|
45192ef…
|
ragelink
|
115 |
- Member management: create, edit, deactivate, change password |
|
45192ef…
|
ragelink
|
116 |
- Team management: create, assign members |
|
45192ef…
|
ragelink
|
117 |
- Project groups: organize related repos under a group header |
|
45192ef…
|
ragelink
|
118 |
- Project-level team roles: read, write, admin |
|
45192ef…
|
ragelink
|
119 |
|
|
45192ef…
|
ragelink
|
120 |
## Roles and Permissions |
|
45192ef…
|
ragelink
|
121 |
- Predefined roles: Admin, Manager, Developer, Viewer |
|
45192ef…
|
ragelink
|
122 |
- Custom role creation with permission picker (grouped by app) |
|
45192ef…
|
ragelink
|
123 |
- Role assignment on user create/edit |
|
45192ef…
|
ragelink
|
124 |
- Permissions synced to Django Groups automatically |
|
45192ef…
|
ragelink
|
125 |
- Two-layer model: org-level roles + project-level RBAC |
|
45192ef…
|
ragelink
|
126 |
|
|
45192ef…
|
ragelink
|
127 |
## User Profiles |
|
45192ef…
|
ragelink
|
128 |
- Personal profile page: name, email, @handle, bio, location, website |
|
45192ef…
|
ragelink
|
129 |
- SSH key management with encrypted storage |
|
45192ef…
|
ragelink
|
130 |
- Personal access tokens (frp_ prefix, hash-only storage) |
|
45192ef…
|
ragelink
|
131 |
- Notification preferences (immediate/daily/weekly/off + event toggles) |
|
45192ef…
|
ragelink
|
132 |
- Change password |
|
45192ef…
|
ragelink
|
133 |
|
|
45192ef…
|
ragelink
|
134 |
## Project Features |
|
45192ef…
|
ragelink
|
135 |
- Project starring with counts |
|
45192ef…
|
ragelink
|
136 |
- Explore/discover page for public projects (sort by stars/recent/name) |
|
45192ef…
|
ragelink
|
137 |
- Project groups for organizing related repos |
|
45192ef…
|
ragelink
|
138 |
- Public/internal/private visibility |
|
45192ef…
|
ragelink
|
139 |
- Anonymous access for public repos (all read views) |
|
45192ef…
|
ragelink
|
140 |
|
|
45192ef…
|
ragelink
|
141 |
## API Tokens and Deploy Keys |
|
45192ef…
|
ragelink
|
142 |
- Project-scoped API tokens with SHA-256 hashed storage |
|
45192ef…
|
ragelink
|
143 |
- Token shown once on creation, never stored in plaintext |
|
45192ef…
|
ragelink
|
144 |
- Configurable permissions and expiry |
|
45192ef…
|
ragelink
|
145 |
- Last-used tracking |
|
45192ef…
|
ragelink
|
146 |
|
|
45192ef…
|
ragelink
|
147 |
## Branch Protection |
|
45192ef…
|
ragelink
|
148 |
- Per-branch protection rules with glob pattern matching |
|
45192ef…
|
ragelink
|
149 |
- Restrict push to admins only |
|
45192ef…
|
ragelink
|
150 |
- Required CI status check contexts |
|
45192ef…
|
ragelink
|
151 |
- Enforced on HTTP sync, CLI push/sync, and SSH push |
|
45192ef…
|
ragelink
|
152 |
|
|
45192ef…
|
ragelink
|
153 |
## Artifact Shunning |
|
45192ef…
|
ragelink
|
154 |
- Admin UI for permanently removing artifacts |
|
45192ef…
|
ragelink
|
155 |
- Type-to-confirm safety (must enter first 8 chars of UUID) |
|
45192ef…
|
ragelink
|
156 |
- Calls fossil shun CLI |
|
45192ef…
|
ragelink
|
157 |
- Irreversible with clear warning |
|
45192ef…
|
ragelink
|
158 |
|
|
45192ef…
|
ragelink
|
159 |
## SQLite Explorer |
|
45192ef…
|
ragelink
|
160 |
- Visual schema map with category-colored table cards |
|
45192ef…
|
ragelink
|
161 |
- SVG relationship graph showing Fossil's internal table connections |
|
45192ef…
|
ragelink
|
162 |
- HTMX-powered table browser with column definitions and paginated data |
|
45192ef…
|
ragelink
|
163 |
- Custom SQL query runner (SELECT only, validated against injection) |
|
45192ef…
|
ragelink
|
164 |
- Admin-only access |
|
45192ef…
|
ragelink
|
165 |
|
|
45192ef…
|
ragelink
|
166 |
## Audit Log |
|
45192ef…
|
ragelink
|
167 |
- Unified view of all model changes via django-simple-history |
|
45192ef…
|
ragelink
|
168 |
- Filter by model type (Project, Organization, Team, Repository) |
|
45192ef…
|
ragelink
|
169 |
- Shows user, action (Created/Changed/Deleted), timestamp |
|
45192ef…
|
ragelink
|
170 |
- Superuser/org-admin access |
|
45192ef…
|
ragelink
|
171 |
|
|
45192ef…
|
ragelink
|
172 |
## Email Notifications |
|
45192ef…
|
ragelink
|
173 |
- HTML email templates (dark themed, inline CSS for email clients) |
|
45192ef…
|
ragelink
|
174 |
- Immediate delivery per event |
|
45192ef…
|
ragelink
|
175 |
- Daily/weekly digest mode |
|
45192ef…
|
ragelink
|
176 |
- Per-user event type toggles (checkins, tickets, wiki, releases, forum) |
|
45192ef…
|
ragelink
|
177 |
- Unsubscribe links |
|
45192ef…
|
ragelink
|
178 |
|
|
45192ef…
|
ragelink
|
179 |
## Agentic Development Platform |
|
45192ef…
|
ragelink
|
180 |
- MCP server with 17 tools for AI assistant integration |
|
45192ef…
|
ragelink
|
181 |
- JSON API: 10+ read endpoints with Bearer token auth |
|
45192ef…
|
ragelink
|
182 |
- Batch API: execute up to 25 API calls in one request |
|
45192ef…
|
ragelink
|
183 |
- Agent workspaces: isolated Fossil branches per agent |
|
45192ef…
|
ragelink
|
184 |
- Atomic ticket claiming for multi-agent coordination |
|
45192ef…
|
ragelink
|
185 |
- Server-Sent Events for real-time notifications |
|
45192ef…
|
ragelink
|
186 |
- Code review API: submit diffs, comment, approve, merge |
|
45192ef…
|
ragelink
|
187 |
|
|
45192ef…
|
ragelink
|
188 |
## UI/UX |
|
45192ef…
|
ragelink
|
189 |
- Dark/light theme with system preference detection |
|
45192ef…
|
ragelink
|
190 |
- Collapsible sidebar with project tree navigation |
|
45192ef…
|
ragelink
|
191 |
- Keyboard shortcuts (j/k, Enter, /, ?) |
|
45192ef…
|
ragelink
|
192 |
- Consistent pagination (25/50/100 per-page selector) across all lists |
|
45192ef…
|
ragelink
|
193 |
- HTMX live search with 300ms debounce |
|
45192ef…
|
ragelink
|
194 |
- Mobile responsive (slide-out drawer) |
|
45192ef…
|
ragelink
|
195 |
- Custom branded error pages (403, 404, 500) |
|
45192ef…
|
ragelink
|
196 |
- Public nav for anonymous users (logo, Explore, Sign in) |
|
45192ef…
|
ragelink
|
197 |
|
|
45192ef…
|
ragelink
|
198 |
## Infrastructure |
|
45192ef…
|
ragelink
|
199 |
- Omnibus Docker image (Fossil compiled from source) |
|
45192ef…
|
ragelink
|
200 |
- Multi-arch builds (amd64 + arm64) |
|
45192ef…
|
ragelink
|
201 |
- Caddy for SSL termination and subdomain routing |
|
45192ef…
|
ragelink
|
202 |
- Litestream for continuous SQLite-to-S3 replication |
|
45192ef…
|
ragelink
|
203 |
- Supply chain attestations (SLSA provenance + SBOM) |
|
45192ef…
|
ragelink
|
204 |
- Non-root container execution (gosu privilege dropping) |
|
45192ef…
|
ragelink
|
205 |
- Celery Beat for scheduled tasks |