Gitly Overview
Gitly is a supporting example for a broader point: Coil is a customer-app platform, not a storefront-only framework.
Use this page when you want to answer:
- what a non-commerce Coil app looks like
- which platform patterns survive when you remove catalog and checkout concerns
- how to read the Gitly demo without treating it as the only valid app shape
The Core Pattern
Coil customer apps keep the same structure regardless of product type:
app.tomldeclares the customer product contract- platform config wires runtime services and secrets
- the customer app crate composes routes, modules, linked plugins, and extensions
- the customer binary owns validate, migrate, assets, and serve/up
Gitly matters because it proves that structure still works for a forge-style app.
Canonical Customer-App Contract
The smallest useful thing to look at is the app manifest shape. Gitly’s apps/gitly/app.toml
contains the canonical ingredients:
[app]
name = "gitly"
display_name = "Gitly"
[modules]
enabled = ["admin", "cms", "media", "gitly-showcase"]
That snippet shows the real lesson:
- customer apps choose a product identity
- they enable only the modules they need
- they can add customer-owned product modules such as
gitly-showcase
This is a better first takeaway than "Gitly has repository pages."
Canonical Customer Binary Shape
The lifecycle surface for a non-commerce app should look the same as it does for a store.
Gitly’s binary in apps/gitly/crates/gitly-bin/src/main.rs exposes:
enum Command {
Describe,
Validate,
Assets { command: AssetsCommand },
Migrate { command: MigrateCommand },
Serve { bind: Option<String> },
Up { bind: Option<String> },
ExtensionChecksums,
LinkedBackend { command: LinkedBackendCommand },
}
That is the real platform story:
- customer apps own their lifecycle
- the same verbs work for commerce and non-commerce products
- linked backends and runtime-installed extensions remain first-class
What Gitly Adds On Top
Gitly uses that platform shape to demonstrate:
- customer-owned route vocabulary
- linked Rust data shaping
- API-style endpoints
- theme switching
- localized UI copy
- scheduled-task demos
- runtime-installed WASM
The product is different. The platform contract is the same.
Gitly As The Supporting Example
Product contract and runtime config
Read:
apps/gitly/app.tomlapps/gitly/platform.dev.toml
These show:
- one-site non-commerce routing
- locales and localised routes
- a narrow module set
- jobs, storage, cache, and asset config that look like any other Coil app
Composition root
Read:
apps/gitly/crates/gitly-app/src/lib.rs
This file demonstrates:
- customer-owned route mounting
- customer module registration
- linked plugin registration
- extension loading
Product templates
Read:
apps/gitly/templates/gitly/home.htmlapps/gitly/templates/gitly/explore.htmlapps/gitly/templates/gitly/repository.htmlapps/gitly/templates/gitly/issues.htmlapps/gitly/templates/gitly/pulls.htmlapps/gitly/templates/gitly/actions.htmlapps/gitly/templates/gitly/organization.htmlapps/gitly/templates/gitly/profile.htmlapps/gitly/templates/gitly/search.html
These are supporting evidence that Coil’s HTML-first model works for dense product shells too.
Linked Rust and WASM
Read:
apps/gitly/crates/gitly-backend/src/lib.rsapps/gitly/extensions/gitly-community-pulse/package.tomlapps/gitly/extensions/gitly-actions-scheduler/package.tomlapps/gitly/crates/gitly-app/src/extensions.rs
That set shows the same first-party-vs-bounded-extension split that Shoppr shows, but without commerce vocabulary dominating the example.
Practical Rules To Copy
- start from the customer-app contract, not from page mocks
- keep the customer binary as the first operational surface
- use customer-owned modules and routes to define product vocabulary
- use linked Rust for first-party data and policy
- use WASM for bounded installable behaviour
Full Implementation Pointers
apps/gitly/app.tomlapps/gitly/platform.dev.tomlapps/gitly/crates/gitly-app/src/lib.rsapps/gitly/crates/gitly-bin/src/main.rsapps/gitly/crates/gitly-backend/src/lib.rsapps/gitly/templates/gitly/apps/gitly/extensions/gitly-community-pulse/package.tomlapps/gitly/extensions/gitly-actions-scheduler/package.toml