Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

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

Repository files navigation

GDAM

GDAM is the Godot Addon Manager.

Use it to install, link, remove, and publish Godot addons from GitHub release assets through a small CLI and the public registry at gdam.dev.

Install The CLI

macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | sh

Install a specific version:

curl -fsSL https://raw.githubusercontent.com/aviorstudio/gdam/main/scripts/install_cli.sh | VERSION=0.0.5 sh

Windows builds are available from GitHub Releases.

If you have the Go toolchain, install it from the module path instead:

go install github.com/aviorstudio/gdam@latest

Or run it without installing anything:

go run github.com/aviorstudio/gdam@latest --version

Replace @latest with a release tag to pin a version. This route compiles from source; the installer script and the release archives ship prebuilt binaries.

CLI Usage

From a Godot project:

gdam init
gdam add @username/addon
gdam install

Install an exact, case-sensitive GitHub Release tag:

gdam add @username/addon@Release-1

Without a tag, the registry selects the newest stable (non-prerelease) Release. Exact tags may select prereleases. Tags are opaque: v1.2.3 and 1.2.3 are different, and hash-looking text is accepted only when it names a registered GitHub Release. Tags may contain Git ref characters, including /, as long as the package specification remains unambiguous (tags cannot contain @).

Remove an addon:

gdam remove @username/addon

Link a local addon while developing it:

gdam link @username/addon /path/to/addon
gdam unlink @username/addon

Check your installed CLI version:

gdam --version

If you hit GitHub rate limits while installing addons, set GITHUB_TOKEN.

Environment

VariablePurpose
GDAM_SECRET_KEYSecret key used by gdam publish in CI
GDAM_API_URLRegistry API base url, defaults to https://api.gdam.dev
GITHUB_TOKENOptional GitHub token to avoid rate limits when downloading

Set GDAM_API_URL to run the CLI against a local registry while developing it. The CLI ships no credentials of its own: reads are public, and publishing is authenticated with your secret key.

Project Files

gdam init creates a gdam.json file in a Godot project. Each registered dependency stores its exact Release tag in a tag field. Old manifests with a version field are intentionally unsupported and must be recreated with gdam add @owner/addon@<exact-tag>; GDAM never rewrites them automatically. gdam add, gdam remove, and gdam install keep the manifest in sync with installed addons under res://addons/.

Local development links are tracked separately with gdam.link.json, so a project can use an unpublished local addon without changing the published dependency manifest.

Publishing Addons

Registry releases are installed from GitHub Release assets. Publish one exact GitHub Release tag and, optionally, an asset selector. There is no separate semantic package version.

The asset name can be anything the publisher chooses. That ZIP should contain the addon files at the archive root, including plugin.cfg. GDAM installs the asset into its local convention, such as res://addons/@username_addon/, regardless of the asset filename.

For CI publishing, create a secret key from the owner settings page, store it as GDAM_SECRET_KEY, and publish releases with:

gdam publish @username/addon Release-1 @owner_repo.zip

Secret keys are scoped to one user or org and can only publish releases for existing addons under that owner. If ASSET_NAME is omitted, gdam publish uses @owner_repo.zip from GITHUB_REPOSITORY when available.

Download integrity and limits

The registry supplies the GitHub Release ID, exact tag, commit SHA, asset ID, asset name, SHA-256 digest, publication time, and prerelease state. Before each install, GDAM rechecks that identity with GitHub, downloads through the immutable asset-ID endpoint, and verifies the digest before extraction. Any release, tag, commit, asset, digest, truncation, or archive-layout drift fails closed.

Registry requests time out after 30 seconds and response bodies are limited to 4 MiB. Asset downloads time out after two minutes, follow at most five redirects, and are limited to 128 MiB. Authorization is removed on cross-origin redirects. Extraction rejects absolute paths, .. traversal, backslashes, and symlinks; it permits at most 10,000 entries and 512 MiB total uncompressed content. ZIP assets must contain plugin.cfg at the archive root.

Development

Build the CLI:

./scripts/cli_build.sh

Run tests:

go test ./...

CLI releases use v* tags. The manual release workflow must run from main, accepts a patch, minor, or major bump, runs Go tests, injects version/build metadata, and builds gdam binaries for Linux, macOS, and Windows with checksums. It needs no repository secrets — the binary contains no keys.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages