Here we document the various release processes and other boring topics.

Creating a (dev) Release

All new releases first go through the dev version of the extension. This way we can get early feedback from testers on obvious issues without breaking the (much larger) stable user base.

Updating Dependencies

Now would be a good time to go through and do sub-releases of other projects. e.g. See if hterm or libdot has had any changes. If so, update their respective ChangeLog files and create a new git tag for each of them.

If you look at the ChangeLogs and git tag -l, it should be obvious how to do this. If you're still unsure, consult these as examples:

Don‘t forget to push the tags once you’ve created them locally!

We don't currently use signed tags.

Source Prepare

Update the file with any relevant details since the last release, and update the version in the manifest.json. Add any significant changes to concat/release-highlights.txt.

See commit 6b11740fa3eb500ea07efc684af7e75543ea3448 and tag nassh- as examples.

Don‘t forget to push the tag once you’ve created it locally!

We don't currently use signed tags.

Check ssh_client (plugins/)

You will need to make sure you have the current ssh_client release files under the plugins/ directory. Consult the document for details on acquiring those files.

Making the ZIP

The bin/ helper script is used to create the zip file for uploading to the CWS. It operates on the current checked out repo, so make sure it's clean!

Upload the (dev) Release

Visit the CWS dashboard to upload the new zip file:


Send an e-mail to the public chromium-hterm group announcing the new release. Here's an example posting:

Then forward that to the internal chrome-hterm group.

Promoting a Stable Release

After some time, life will be great and everyone loves the new version. That means it's time to promote the dev version to stable. The process basically takes the existing dev CRX, updating the manifest.json slightly, and then uploading it to the stable version.

Get Existing Release

If you still have the ZIP file that you uploaded previously, you can use that. Otherwise, it'll be easiest to just download the CRX directly from the CWS. You can use this extension:

Then visit the dev page:

Then download the CRX using that extension.

Update the Manifest

You can run the script to do the channel promotion for you.

$ ./bin/ ./
-*- Name "Secure Shell (dev)" promoted to "Secure Shell"
-*- Zip directory: dist/zip/tmp/
-*- Unzipping from:
-*- Rewrite dist/zip/tmp/
-*- New name: Secure Shell
-*- New version:
-*- Creating: dist/zip/
-*- Done: 161 files, 3.5M

Now the zip file under dist/zip/ is ready for release.

Upload the (stable) Release for Googlers

Visit the CWS dashboard to upload your new zip file:

Look for “Upload Dogfood Version”. This will post the update only for Googlers to get some last minute feedback before releasing to the world. If you want to control the release more, you can set the percentage field, but usually we leave it unset (i.e. 100%).

Internal Announce!

This is the same as announcing the dev release, except you'll only send to the chrome-hterm group.

Upload the (stable) Release for Everyone

Visit the CWS dashboard to upload your new zip file:

This time use the “Upload Updated Package” option. Once that‘s done, use “Remove” on the dogfood version so the display doesn’t get confusing.

Public Announce!

This is the same as announcing the dev release, except you'll only send to the chromium-hterm group.

Reset Release Highlights

Now that we've promoted a stable version, you should refresh the concat/release-highlights.txt file to drop older entries.


We don't currently have any. We strive to keep the master branch stable. You should too!

Updating Translations

This process is meant for Googlers who are making new releases.

Once _locales/en/messages.json has updates that need translating:

  • Go into //depot/google3/googleclient/chrome/extensions/samples/tc/hterm/.
  • Make sure the locale list in BUILD is up to date.
  • Open i18n_messages.js for editing.
  • Run ../ < .../nassh/_locales/en/messages.json > i18n_messages.js.
  • Upload & land the CL.
    • If you need JavaScript readability approval, add readtome-javascript@.
  • If you want to make other changes, check with CWS oncall.
  • Talk to your TC contact about scheduling another run.
  • Wait for the translators to finish.
  • The updated files are at //depot/google3/googledata/transconsole/xtb/ChromeExtensions/*.xtb but you won't use them directly.
  • Convert the xtb files to JS files (while under the hterm dir mentioned above): blaze build messages_fileset
  • In the root of the checkout, the new JSON files will be under blaze-bin/googleclient/chrome/extensions/samples/tc/hterm/messages_fs/_locales/.
  • Use the script to import: .../nassh/bin/ .../google3/blaze-bin/googleclient/chrome/extensions/samples/tc/hterm/messages_fs/_locales/
  • Upload & land the CL.

See the TC page for more details.


We don't have one. Releases are made as changes roll in.

Launch Bugs