The .sawmill/ Directory

Overview

Sawmill stores project-level configuration in a .sawmill/ directory in your project root:

.sawmill/
├── config.toml      # General and output settings
├── suppress.toml    # Suppressed message IDs and patterns
└── waivers.toml     # Waiver entries for CI acceptance

This directory is created automatically the first time you save from the TUI (Ctrl+S).

Directory naming

Sawmill accepts either .sawmill/ or sawmill/ as the configuration directory. The .sawmill/ form is recommended (hidden directory, consistent with .git/, .github/, etc.).

If both .sawmill/ and sawmill/ exist in the same directory, sawmill raises an error:

Ambiguous config: both .sawmill/ and sawmill/ exist in /path/to/project.
Remove one to resolve.

Configuration — config.toml

The configuration file has two sections:

[general]
default_plugin = "vivado"    # Plugin to use when auto-detection is skipped

[output]
color = true                 # Enable/disable colour output
format = "text"              # Default output format: text, json, or count

User-level configuration can be placed at ~/.config/sawmill/config.toml. Local (project-level) configuration overrides user-level settings with a shallow per-section merge — if a local file defines [output], the entire [output] section comes from the local file, not a field-by-field merge.

Suppressions — suppress.toml

Suppressions hide messages from the display. They have no effect on CI pass/fail.

[suppress]
message_ids = [
    "Common 17-55",
    "Vivado 12-1023",
]
patterns = [
    "INFO:.*Synthesizing",
]

message_ids is a list of exact message IDs to hide. patterns is a list of regex patterns — messages with raw_text matching any pattern are hidden.

In the TUI, press s to suppress a message ID. The message_ids list is updated when you save (Ctrl+S).

Waivers — waivers.toml

See Waivers for the full waiver format and semantics.

Version control

Recommended .gitignore policy:

  • Commit waivers.toml — waivers are team decisions with audit trails. They should be reviewed in code review.

  • Commit config.toml — shared project defaults.

  • Consider ignoring suppress.toml — suppressions are personal display preferences. Team members may want different suppression lists.

# .gitignore
.sawmill/suppress.toml