A minimal self-hosted git browser on Rust axum: bare repos rendered as a website with commits, diffs, syntax-highlighted blobs, atom feeds, and clone over HTTPS.
axumdockergitgit-browsergitoxidegixrustself-hosted
1use axum::{extract::State, response::Response, routing::get, Router};
2
3use crate::render::render;
4use crate::AppState;
5
6pub fn router() -> Router<AppState> {
7 Router::new().route("/", get(index))
8}
9
10async fn index(State(state): State<AppState>) -> Response {
11 let repo_root = state.config.repo_root.clone();
12 let clone_base = state.config.clone_base.clone();
13 let repos = tokio::task::spawn_blocking(move || crate::git::discover(&repo_root, &clone_base))
14 .await
15 .ok()
16 .and_then(|r| r.ok())
17 .unwrap_or_default();
18 render(
19 &state,
20 "index.html",
21 "/",
22 minijinja::context! { repos => repos },
23 )
24}