Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - yaffle-dot-dev/cli: The Yaffle CLI · GitHub
Skip to content

Repository files navigation

Yaffle CLI

The Yaffle CLI is the open-source Rust environment engine for Terraform and OpenTofu repositories. It discovers the workspace graph in yaffle.toml and provides deterministic local operations for named and transient environments.

Install

Download the archive for your platform from the GitHub release and verify its adjacent .sha256 file before placing yaffle on your PATH. Linux x86-64 and macOS x86-64/ARM64 releases are supported. Repository administrators must keep GitHub immutable releases enabled; release automation creates each tagged release and its complete asset set in one operation and cannot update it later.

You can also build directly from source:

cargo install --git https://github.com/yaffle-dot-dev/cli --locked yaffle-cli

Homebrew installs the same checksummed GitHub release archives:

brew install yaffle-dot-dev/tap/yaffle

Nix builds are supported directly and are the canonical release builder:

nix run github:yaffle-dot-dev/cli -- --help
nix build github:yaffle-dot-dev/cli#yaffle

The v0.1 CLI requires a system OpenTofu version in the range >=1.8.0,<2.0.0. Set YAFFLE_TOFU_PATH to use an explicit compatible binary instead of tofu from PATH.

CLI startup and local environment operations do not require Bun, Node.js, a Yaffle source checkout, developer environment variables, or an internal feature token. Cloud login is a public-client flow and likewise has no client secret.

Use

Run yaffle or yaffle --help to inspect the command surface.

yaffle doctor --json
yaffle graph --env pr-42
yaffle converge --env main
yaffle status --env main --json
yaffle outputs --env main --workspace infra/shared
yaffle destroy --env pr-42

Local operations read repository configuration and invoke OpenTofu on the local machine. Cloud login uses an OAuth public-client flow with PKCE and stores the resulting credential under ~/.yaffle/auth/. See Privacy and data transfers before using cloud operations.

Automation

Commands with --json emit one versioned JSON document on stdout. Stable output shapes and process exit codes are documented in the CLI contract.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --release --locked

See CONTRIBUTING.md and SECURITY.md before contributing or reporting a vulnerability.

About

The Yaffle CLI

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages