24 августа 2026 г.
Git-сервер Shopify собрал за выходные: одна Rust-программа поверх S3, без базы данных
Тоби Лютке за выходные написал walgit — git-сервер одним бинарником поверх любого S3-хранилища, без отдельной базы. Открыл под MIT 23 августа, за сутки репозиторий собрал 64 звезды.

tobi lutke
@tobi
Git at Scale (от Cursor) — один из самых интересных постов, что я читал за долгое время. Он попался мне ровно тогда, когда меня бесила внутренняя git-система Shopify. В качестве упражнения я за выходные реализовал это как open source. Один бинарник на Rust, который можно направить на любое объектное хранилище типа S3. Внутри WAL и CAS-примитивы, больше никакого хранилища данных не нужно. Ещё там реализован bundle-uri, так что большие git-репозитории (вроде нашего моно) скачиваются очень быстро — цепочкой статических бандлов. Плюс привычный базовый UX. https://github.com/tobi/walgit

18 августа Cursor описал в блоге свою архитектуру Continuity: журнал операций лежит в объектном хранилище и считается источником правды, а момент коммита — атомарная перезапись манифеста. Замеры Cursor: до 120 push в секунду на обычном S3 и более 300 на S3 Express One Zone, чтения линейно масштабируются до 100 реплик.
Лютке читал этот пост ровно тогда, когда его бесил внутренний git Shopify. Он взял архитектуру и реализовал её на Rust за выходные.
Как это устроено. Раньше свой git-хостинг означал сервер с диском, базой и заботой о том, чтобы репозиторий влез. В walgit репозиторий — это бакет: диск машины работает только кэшем, поэтому сервер тянет репозитории больше себя самого. Ни базы, ни лидера, ни выделенного локального состояния.
Монорепозиторий качается быстро за счёт bundle-uri: walgit режет историю по календарю — недельный полный бандл, дневные цепочкой, часовые — и раздаёт их статикой из бакета или CDN. Свежий клон берёт последний полный бандл плюс цепочку сверху и просит у сервера только хвост.
Как поставить. Готовых бинарников нет, релизов ноль: собирать из исходников через `cargo build --release -p walgit-cli`, либо `nix build .#walgit`, либо контейнером по Containerfile. Дальше три шага: положить walgit.toml с адресом, токеном и бакетом, запустить `walgit serve --config walgit.toml`, сделать push — новое имя репозитория создаётся само. Для локальной пробы в комплекте профиль walgit.standalone.toml с rustfs в контейнере, поднимается командой `just dev-store`.
Хранилищем годится AWS S3, MinIO, Cloudflare R2, Ceph или GCS. Разработчик подключается одной командой установочного скрипта: она кладёт токен, ставит credential-helper и включает bundleURI. Авторизация — статические токены или любой OpenID Connect: Google, Okta, Keycloak, Entra.
Первоисточник