Skip to content

Branding

This document describes how Rivet’s branding assets are integrated throughout the project, and how to maintain them as the project evolves.

All brand assets are in assets/branding/ — see assets/branding/README.md for the full asset catalog, color palette, and regeneration instructions.

Key files:

  • svg/ — source vectors (always edit these, not the rasters)
  • png/ — rasterized versions at various sizes
  • tui/ — ASCII/ANSI splash screen for terminal
  • favicon.ico — multi-resolution favicon
  • rivet-mark.svg / rivet-wordmark.svg — legacy aliases (repointed to new design)

Status: ✅ Implemented

  • Splash screen (rivet about) — embeds the ASCII splash from crates/rivet-cli/assets/rivet-splash.ansi into rivet-cli/src/main.rs as the RIVET_SPLASH constant. Displayed when running rivet about.
  • Logo in --help — uses Clap’s built-in version/about derived from Cli struct doc comment.

The splash lives inside the crate rather than under assets/branding/ because include_str! cannot reach outside a package that is going to be published: cargo package ships only what is beneath the package root, so an external path compiles locally and then resolves to nothing on crates.io.

To update the splash:

  1. Edit crates/rivet-cli/assets/rivet-splash.ansi — it is hand-maintained, not produced by assets/branding/generate.py
  2. Test with cargo run -- about; the RIVET_SPLASH constant embeds the file directly, so no code change is needed

Status: ✅ Implemented

Every rendered depiction of a shell — as opposed to a code block a reader copies from — uses a Powerlevel10k-style prompt, so the README hero and the website demo read as the same machine:

Element Colour Notes
Directory segment bg #1F6FB8, text #EEF3F1 Leftmost, e.g. ~
Git segment bg #1F9E7A, text #0F1A17 Bold, e.g. main
Separator the segment’s own background Right-pointing triangle
Prompt character #2BB88E , bold
Typed command #EEF3F1
Command output #8CA39B Muted, never coloured per-token

Two surfaces implement it, and they must stay in step:

This convention stops at rendered depictions. Documentation code blocks keep the $ prompt in console blocks and no prompt in sh blocks, exactly as DOCUMENTATION.md requires — $ is universal, implies a font the reader may not have, and a sh block must stay copy-pasteable.

Status: ✅ Implemented

Status: ⚠️ Manual setup required

To set the social preview:

  1. Go to repository Settings → Social preview
  2. Upload assets/branding/png/social/rivet-social-banner.png (1280×640)

This image appears when Rivet is shared on Twitter/X, Slack, and other social platforms.

Status: 📋 Planned

When packaging Rivet for distribution (Flatpak, snap, Homebrew, AUR, etc.):

  • Use png/app/rivet-app-icon-512.png or -1024.png as the base
  • Generate platform-specific formats (.icns for macOS, .ico for Windows) from the PNG
  • Use favicon.ico for any web-based tools or documentation sites

PNG icon sizes available:

  • icon/rivet-icon-{16,32,48,64,128,256,512,1024}.png — transparent UI icons
  • app/rivet-app-icon-{128,256,512,1024}.png — filled app icons (dark background)
  • app/rivet-app-icon-light-512.png — light variant

Status: 🔄 Not yet applicable

When Rivet gains a website or documentation site:

  • Use favicon.ico in <head> for the tab icon
  • Use png/favicon/favicon-{16,32,48,64}.png for multi-resolution favicon support
  • Use svg/rivet-logo-horizontal.svg in the header (swap to -dark.svg variant in dark mode via <picture>)
  • Ensure social preview is set (see GitHub section above)

All raster assets (PNG, favicon) are generated from the SVG sources via assets/branding/generate.py. To update:

  1. Edit SVG sources in assets/branding/svg/
  2. Or change colors/sizes at the top of assets/branding/generate.py
  3. Regenerate PNG files:
    Terminal window
    python3 assets/branding/generate.py
  4. Commit both the SVG edits and regenerated PNG files

Do not hand-edit PNG files or raster images — always regenerate.

If adding a new feature with its own terminal UI or splash screen:

  • Create an appropriate ASCII/ANSI variant in assets/branding/tui/
  • Import it into the relevant Rust module as a const string
  • Display it consistently with the existing branding

When packaging Rivet for a new platform:

  • Use the appropriate icon size from png/app/
  • Follow the platform’s icon guidelines (e.g., macOS .icns, Windows .ico)
  • Store any platform-specific assets in assets/branding/{platform}/ if needed
  • New major documentation pages should use the horizontal logo at the top
  • Use svg/rivet-logo-horizontal.svg for light backgrounds and -dark.svg for dark
  • Ensure alt text is descriptive: e.g., alt="Rivet — Git-native workstation snapshots"

When making a release or major update, verify:

  • rivet about displays the splash screen correctly
  • README.md displays the wordmark
  • GitHub social preview is set to rivet-social-banner.png
  • Documentation is branded consistently
  • Any new CLI commands that show branding are tested
  • Packaging assets (PNG icons) match the latest design