NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Shared language catalog and project-type detection for the gg toolchain.
Last release 2 days ago
06 Oct 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 24 of 24 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
24 releases · first in 2026
One column per month.
### Changed - Upgrade dependencies
### Changed - "Quiet - "Tighten
A package.json without a valid name no longer turns a Dart project into a TypeScript or hybrid project; hasNpmManifest tells a real npm manifest from
package.json without a valid name no longer turns a Dart project into a TypeScript or hybrid project; hasNpmManifest tells a real npm manifest from a stray fileMigrate from dna_base to the current ggsuite DNA
Detect Flutter packages by their SDK dependency
Cleanup copy right headers. Update to dart 3.13. Auto fixes.
### Changed - Provide gg via npm - Fix shell changes
PublishTarget, publishTargetsOf and the PublishTargetsX extension — a package can now have a *set* of registries instead of one. Both manifests of a h
PublishTarget, publishTargetsOf and the PublishTargetsX extension — a
package can now have a set of registries instead of one. Both manifests of a
hybrid are read independently, so publish_to: none takes the Dart side out
without touching the npm side and private: true does the reverse. This is
what lets a hybrid publish to pub.dev and npm; checkProjectType, which
resolves a hybrid to a single ProjectType, cannot express that.hybridVersions / hybridVersionsDiffer — read both manifest versions of a
hybrid, for reconciling them and for deciding whether pana can run.NpmRegistryResolver and the pure npmStatusUrlTemplate — resolve the
registry a package actually publishes to from the merged .npmrc
(publishConfig.registry → @scope:registry → registry) and derive the
human-facing status page from it. The npm registry and Azure Artifacts (cloud,
organization-scoped, legacy *.pkgs.visualstudio.com and self-hosted) are
mapped to their web pages; anything else falls back to the packument url.
Before, the publish flow always printed an npmjs.com link, which is wrong for
every scoped package on a private feed. Only the registry keys are ever read
— never the _authToken/_auth credentials next to them.TypeScriptPackageManager.updateCommand({required bool latest}) — the argv to
upgrade dependencies, so gg do upgrade deps can reach the node side.isHybridProject — the predicate under its new name. isBridgeProject keeps working as an alias but now carries the widened meaning; "bridge" suggested
isHybridProject — the predicate under its new name. isBridgeProject
keeps working as an alias but now carries the widened meaning; "bridge"
suggested a repo bridging two languages, while the rule is really about a
repo carrying two manifests.pubspec.yaml and a
package.json — is recognized as such without a tsconfig.json, and
checkProjectType resolves it to ProjectType.typescript. Before, the
detection additionally required a tsconfig.json, so a Dart package that
publishes its payload as an npm tarball fell through to
ProjectType.dart: gg ran only the Dart pipeline on it, never the npm
scripts, never wrote its package.json version, and never published it to
npm.Rename .master to .ocean with automatic migration at next start
### Changed - Finetune command line output
Print »waiting until ... appears on pub.dev only one time
RegistryWaiter.resetAnnouncements: clears the process-wide announcement state so tests can assert the start message per test
Support projects without manifest: ProjectType.none, checks skipped, version tracked as git tag only
RegistryWaiter prints its wait and progress messages in dark gray, the status url in blue and the success message in green
RegistrySpec.statusUrl + statusUrlFor: human-facing status page url (pub.dev versions page, npmjs.com package page) resolved from the language catalog
Do not trust the npm latest dist-tag when reading the published version
Run npm registry lookups in the package directory so the project-level .npmrc with private feeds is honored
Add rc prerelease channel to gg do publish (channel field/flag, X.Y.Z-rc.N computation, npm --tag rc, single + multi repo)
Make LanguageCatalog.load AOT-safe: embed languages.json as Dart constant instead of Isolate.resolvePackageUri asset lookup
Preserve dependency constraint operator (^^/~/exact) through publish
Treat dart-typescript bridge repos as TypeScript for can/do commit, running package.json scripts (test/lint/format:check)
Manifest — format-driven accessor that reads and writes package name, version and publish-target marker for both pubspec.yaml (yaml, via yaml_edit so
Manifest — format-driven accessor that reads and writes package name,
version and publish-target marker for both pubspec.yaml (yaml, via
yaml_edit so formatting/comments survive) and package.json (json), driven
by ManifestSpec. Includes isPrivate() and a Manifest.detect factory.Registry abstraction with PubDevRegistry (pub.dev HTTP API) and
NpmRegistry (npm view <name> version), plus a RegistryFactory that picks
the implementation from the new RegistrySpec in the catalog.RegistrySpec and LanguageSpec.registry; languages.json now describes
the registry for dart/flutter (http) and typescript (cli).Initial release: ProjectType / detectProjectType, TypeScriptPackageManager, and the LanguageCatalog with a bundled languages.json asset — the shared c
ProjectType / detectProjectType,
TypeScriptPackageManager, and the LanguageCatalog with a bundled
languages.json asset — the shared catalog of language-specific commands
(install / analyze / format / test / publish / registryVersion) and package
metadata for Dart, Flutter and TypeScript. Extracted from gg_one so it can
be shared by gg_one, gg_test and gg_publish without circular
dependencies.Your coding agent can read these notes before it upgrades. Set up the MCP server →