- Gallery Overview
- Gallery Item Specificiations
- Gallery Item Metadata
- Gallery Item Field to UI Element Mappings
- Gallery Package Development and Debugging
- Legacy OneBox Development approach
- Using the Add to Resource Blade
- Your icon tile for the Azure Store
- Developer tooling and productivity
- Gallery Frequently Asked Questions
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
The gallery is the single place where users will go to find anything that can be created. The gallery includes both the create hub as well as the gallery blades. The entire gallery is driven from the gallery service which serves both gallery items and curation data. Placement of your resource or app in the gallery is driven by a controlled curation process.
[WACOM.NOTE] In order to receive important notices and alerts about the gallery service, please subscribe to the Azure Gallery Announcements alias.
In order to add an item to the gallery, you must create and publish a gallery item. The contents of the gallery item are explained in more detail in the gallery item documentation. However, the general idea of a gallery item is that it consists of all the metadata that drives the gallery UX around your resource in addition to various files that are used to run your resource create experience.
One extension may publish multiple gallery items and a single create extension can handle the creation of multiple gallery items. You must create at least one gallery item to enable your create experience.
The gallery should be the single place where users browse for resources they will create in the portal. Additional sub-galleries, or resource specific gallery's should never be used in the portal. If you have a list of items that can be browsed and created, they will be in the gallery.
Items in the gallery should reflect what users are looking for. You should not ship your team in the gallery. For example, if your resource provider can create multiple resources you will likely publish multiple gallery items.
The entire gallery in the portal is driven by the gallery service. The gallery service is responsible for hosting and serving gallery content including metadata, icons, screenshots, and Azure Templates. You can see all of the items in the production gallery service at: https://gallery.azure.com/Microsoft.Gallery/galleryitems?api-version=2015-10-01&includePreview=true.
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
Each item in the gallery is published to the gallery service using a format called the Azure Gallery Package (azpkg). The Azure Gallery Package contains all of the data needed to display items in the Ibiza gallery, build the Ibiza create experiences, and initiate resource creation through the Template Execution Service. The Azure Gallery Package (azpkg) is a single file that is packaged using the OPC (Open Package Conventions) standard. The Azure Gallery Package does not contain deployment or runtime resources such as code, zip files with software, or Virtual Machines or Disks. These resources are only referenced by the ARM template(s) contained in the Azure Gallery Package and are hosted externally to the Azure Gallery Package.
/MyPackage/
/MyPackage/Manifest.json
/MyPackage/UIDefinition.json
/MyPackage/Icons/
/MyPackage/Screenshots/
/MyPackage/Strings/
/MyPackage/DeploymentTemplates/
/MyPackage/DeploymentFragments/
/MyPackage/DeploymentFragments/Template.json
The manifest file contains all of the metadata for your gallery item. For a visual representation of where each metadata value is used see the page on gallery UI examples.
{
"$schema": "https://gallery.azure.com/schemas/2014-09-01/manifest.json#",
"name": "string", // [A-Za-z0-9]+ (offer + plan namespace)
"publisher": "string", // [A-Za-z0-9]+ (publisher namespace)
"version": "string", // SemVer v2 Format - see http://semver.org/
"displayName": "string", // max of 256 characters (plan name)
"publisherDisplayName": "string", // max of 256 characters (publisher name)
"publisherLegalName": "string", // max of 256 characters -->
"summary": "string", // max of 100 characters -->
"longSummary": "string", // required, max of 256 characters
"description": "string", // max of 2000 characters. Can contain HTML
"properties": [
/* optional. max of 10 properties
displayName: max of 64 characters
value: max of 64 characters */
{ "displayName": "string", "value": "string" }
],
"uiDefinition": {
"path": "string" // required, path to file
},
"artifacts": [
// you probably want an artifact, because this is where the link to your ARM deployment template goes!
/* name: max of 256 characters, [A-Za-z0-9\-_]+
type: Fragment, Template
path: path to artifact
isDefault: true|false */
{ "name": "string", "type": "string", "path": "string", "isDefault": true } // max of 128 characters
],
"icons": {
// see: https://auxdocs.azurewebsites.net/en-us/documentation/articles/gallery-items
"small": "string", // path to image file
"medium": "string", // medium images must be 90x90 pixels if bitmaps...
"large": "string", // 40x40
"wide": "string", // 255x115
"hero": "string"
},
"links": [
/* optional, but highly recommended, max of 10 links
displayName: max of 64 characters
uri: uri */
{ "displayName": "string", "uri": "string" }
],
"products": [
// optional - you don't need it in a simple gallery item
{
"displayName": "string", // max of 256 characters
"publisherDisplayName": "string", // max of 256 characters
"legalTerms": "string", // max can contain HTML
"privacyPolicy": "string", // max can contain HTML
"pricingDetailsUri": "string", // uri, optional
// optional, if null means $0 cost (like "bring your own license")
"offerDetails": {
"publisherId": "string", // max of 256 characters
"offerId": "string", // max of 256 characters
"plans": [
{
"planId": "string", // max of 256 characters
"displayName": "string", // max of 256 characters full display name, includes os, version, etc.
"summary": "string", // max of 100 characters
"description": "string", // max of 2000 characters. Can contain HTML
}
]
}
}
],
"screenshots": [ "string" ],
"categories": [ "string" ],
"filters": [
// type: Country, Subscription, Resources, HideKey, OfferType, OfferCategory
{ "type": "string", "value": "string" }
]
}
The spec file contains all metadata, parameters, and other content used in the portal create experience. This file should be in the Portal folder.
{
"$schema": "https://gallery.azure.com/schemas/2015-02-12/UIDefinition.json#",
"createDefinition": {
"createBlade": {
"name": "[bladeName]",
"extension": "[extension]"
},
"startboardPart": {
"name": "[partName]",
"extension": "[extension]"
},
"startboardPartKeyId": "id"
},
"initialData": {
"model": "Azure Engine 3.0"
},
"options": {
"key": "value",
// ...
}
}
This file contains publisher, name, version and content of a template.
{
"$schema": "https://gallery.azure.com/schemas/2014-06-01/gallerytemplate.json#",
"name": "[name]",
"publisher": "[publisher]",
"version": "[version]",
"content": {
// well-formed json
}
}
Images support localization. The following folder structure will be used for localizing images. You can find the list of languages that Azure Portal supports here.
/GalleryPackage
/Images
icon.png
/fr
icon.png
/ja
icon.png
/pt-BR
icon.png
/pt-PT
icon.png
The strings folder contains json files for each localized language. The resource files are simple key value pair json documents. The files are named localization.resjson. You can find the list of languages that Azure Portal supports here.
The format of the resource file is as follows:
{
"key1": "value1",
"key2": "value2"
}
Resource strings can be consumed by specifying the resource key in either the Manifest.json, the UIDefinition.json, or other localizable files.
Example using resource string in JSON file.
{
"property1": "ms-resource:key1",
"property2": "ms-resource:key2"
}
The strings folder and resource files will have the following structure. The file at /Strings/resources.resjson is used as the default language.
/GalleryPackage
/Strings
/resources.resjson
/fr
resources.resjson
/ja
resources.resjson
/pt-BR
resources.resjson
/pt-PT
resources.resjson
The package will contain 1 or more ARM template stored in the DeploymentTemplates folder.
You can find the latest version of the gallery tools (Microsoft.Azure.Gallery.AzureGalleryUtility) in the official wanuget store: http://wanuget/Official.
After you have created the folder structure and added the required files to your pre-packaged Gallery Item you will need to run the AzureGallery tool to validate and build the Gallery Item Package.
To create packages run the following command.
> AzureGallery.exe package -m [path to manifest.json] -o [output directory]
In order to publish a gallery package (azpkg) you will run the AzureGallery tool. You can optionally associate a hide key with the package. This key will be required when requesting the item from the gallery service.
To upload the package run the following command.
> AzureGallery.exe upload -p ..\path\to\package.azpkg
In order to add/update or remove a hide key or subscription filters associated with an item you will run the AzureGallery tool. To remove a hide key you need update the item and specify an empty key.
To update the filters for the a package run the following command.
> AzureGallery.exe update -i [Publisher].[Name].[Version] -h [comma-separated hide key list] -sf [comma-separated subscription guid list]
Deleting Azure Gallery Packages is only supported in the test environments. We will not allow or support deletion of gallery packages in PROD except in rare situations such as a security or legal issue. In order to delete your package run the following command. In order to do this you will be required to configure the package loader too as noted here.
To delete a azure gallery package run the following command.
> AzureGallery.exe delete -i [Publisher].[Name].[Version]
In order to use the gallery loader you will need to set some values in the AzureGallery.exe.config file. You can download the test certificate here. In order to publish to production, you must contact the 1store team.
<appSettings>
<add key="Microsoft.Azure.Gallery.ServiceEndpoint" value="https://df.gallery.azure-test.net"/>
<add key="Microsoft.Azure.Gallery.ServiceSettings.PrivilegedOperationsCertificateThumbprint" value="F569803807B692011559C718715767056926F497"/>
<add key="Microsoft.Azure.Gallery.ServiceSettings.HighPrivilegeOperationsCertificateThumbprint" value="F569803807B692011559C718715767056926F497"/>
</appSettings>
NOTE: The utilization of certificate authorization is temporary. We will be switching to STS auth post public preview. For now everyone is sharing the same cert and has permission to publish/delete any package. Please don't break other people’s packages.
Package and template versioning must use SemVer 2.0.0 for version numbers. The rules for SemVer should be applied to the Gallery Item and reflect changes to the content that will be installed with the package. For example, if the content of your package will cause breaking changes to existing users you must increment the MAJOR version numner for your gallery item package.
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards-compatible manner, and
- PATCH version when you make backwards-compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
For preview packages the convention in the portal is to use a version such as: 1.0.0-preview
.
For placeholder package you should use a version such as 0.1.0-placeholder
.
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
While creating your gallery package, keep in mind how your item will be discovered by customers. You will need to properly curate your package into the Marketplace. More information regarding curation here. Your item will also need to be easily discoverable via Marketplace search.
[WACOM.NOTE] The Marketplace leverages Azure Search to power its search functionality. Read more.
Customers can search for Marketplace items in two locations:
When a user searches via the +New search box, they will be taken to the Marketplace "Everything" menu which displays all possible search results.
Searches in Marketplace are made within the context of the current menu. If a customer navigates to the "Virtual Machines" menu and searches, only items located in that menu will be returned. The top level "Everything" menu is the only menu where all gallery items are searched.
[WACOM.NOTE] If no results are returned within a menu, search will fallback to "Everything" and display any matching results there.
The following fields in your package manifest are indexed in Azure Search. They are in descending order of weight given to the field when determining search ranking. Marketplace also uses popularity data to rank search results. When a user selects an item from a search result, it is given a small boost to its relevancy in future searches.
- itemDisplayName
- publisherDisplayName
- summary
- description
- longSummary
Example: In general, a gallery item with display name "Azure Package" will be ranked higher than a gallery item with publisher name "Azure Package" for the query "Azure Package". However, this will not always be the case as matches in other fields can result in a higher ranking.
Suggestions in the Marketplace search boxes only suggest item display names and publisher names. The API finds the closest matching query string and does not prioritize any titles or publishers.
Marketplace is fully localized, but not all gallery items in the Marketplace are localized. To accommodate this, Marketplace will use a customer's search query to perform an English query as well as a query under the customer's current locale. If the customer's query matches the English or localized fields of a package, the localized package will be returned to the customer.
Example: A customer whose locale is set to Spanish searches for "Storage account". This query will match the English version of the Storage Account gallery package, but the Spanish version of the package will be returned to the customer.
Hidden Marketplace items behind hide keys will behave differently when searched. See Testing in production for more information on hidden marketplace items.
- Marketplace makes two separate requests for public and hidden items. This allows for the highest version of public and private items to be discoverable via search.
- Hidden items will appear at the top or bottom of search results. If you do not see your hidden item, look at the bottom of the search results.
- Hidden items will NOT be suggested
Often times suggest will pick the closest string to the given query. This does not mean that your item will not be deemed as relevant when the user completes their search. Hidden items will not be suggested even with a hide key present.
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
Below you will find a list of all metadata that is collected with a gallery item.
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
Name | X | string | [A-Za-z0-9]+ | |
Publisher | X | string | [A-Za-z0-9]+ | |
Version | X | string | SemVer v2 |
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
DisplayName | X | string | recommendation 80 characters | if longer than 80, Portal may not display your item name gracefully |
PublisherDisplayName | X | string | recommendation 30 characters | if longer than 30, Portal may not display your publisher name gracefully |
PublisherLegalName | X | string | max of 256 characters | |
Summary | X | string | 60 to 100 characters | |
LongSummary | X | string | 140 to 256 characters | used on hero image, will fall back to summary |
Description | X | html | 500 to 5000 characters |
Below is the list of icons used in the gallery.
Name | Width | Height | Notes |
---|---|---|---|
Hero | 815px | 290px | Only required if hero display is used. |
Wide | 255px | 115px | Always required. |
Large | 115px | 115px | Always required. |
Medium | 90px | 90px | Always required. |
Small | 40px | 40px | Always required. |
Screenshot(s) | 533px | 324px | Optional. Maximum of 5 allowed. |
You can include any number of components. Components are used to primarily to specify pricing and legal data.
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
DisplayName | X | string | max of 256 characters | |
ComponentType | X | enum | operatingsystem, software, service | |
PublisherDisplayName | X | string | max of 256 characters | |
Terms | X | html | The full text of the legal terms | |
PrivacyPolicy | X | html | The full text of the privacy policy | |
PricingDetailsUri | X | uri | A URL to get more details on the price of the component |
Each gallery item can be "tagged" with a variety of categories. The common categories in use today are:
- appInfrastructure - Application infrastructure
- clientOS - Client Operating System
- devService - Developer service
- networking - Networking
- database - Database
- cache - Cache
- security - Security
- compliance - Compliance
- storage - Storage
- bigData - Big Data
- backup - Backup
- analytics - Analytics
- businessApplication - Business Application
- media - Media
- web - Web
- identity - Identity
Each gallery item can include a variety of links to additional content. The links are specified as a list of names and urls.
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
DisplayName | X | string | max of 64 characters | |
Uri | X | uri |
In addition to the above metadata, gallery authors can also provide custom key/value pair data in the following form.
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
DisplayName | X | string | max of 25 characters | |
Value | X | string | max of 30 characters |
For any field that allows HTML the following elements and attributes are allowed.
"h1", "h2", "h3", "h4", "h5", "p", "ol", "ul", "li", "a[target|href]", "br", "strong", "em", "b", "i"
Below you will find examples of where the metadata for gallery items are displayed in the portal and azure.com.
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
This video demonstrates how to configure a Gallery Package for a F5 Debug Experience on localhost using Test in Prod
- Install the following two NuGet Packages onto your web project. Note: The MSI ships with and sets up a package source in visual studio that will contain the NuGet packages. If using CoreXT see CoreXT specifics at end of file.
- Microsoft.Azure.Gallery.Common
- Microsoft.Azure.Gallery.AzureGalleryUtility
- By default the Microsoft.Azure.Gallery.AzureGalleryUtlity.targets, injected into your webprojects csproj, will look for your gallery package definition under your
$(SolutionDir)/GalleryPackages. Copy your gallery package(s) into $ (SolutionDir)/GalleryPackages. Create as many folders for as many gallery packages as you would like there. The target will find them all. - Build your solution to generate the *.azpkg files.
- Add the App_Data/GalleryPackages/*.azpkg folders and files to your solution. On the *.azpkg files set the Build action to Content, Copy if newer.
- F5 your solution and side load your application using Test in Prod syntax.
- Click into Marketplace and see your Side Loaded gallery package under Local Development. That’s it, for those of you who are using CoreXT. Here are a few gotchas.
Gallery items can be uploaded to production behind a hide key or subscription GUID filter. Only users who specify the hide key via query parameter or have access to the subscription will see the package in Marketplace. Specify filters in your package's manifest. To access your item behind a hide key, pass the following query parameter when navigating to Portal: ?microsoft_azure_marketplace_ItemHideKey=YOURHIDEKEY Multiple hide keys can be used via a comma separated list: ?microsoft_azure_marketplace_ItemHideKey=KEY1,KEY2,KEY3
[WACOM.NOTE] Hide keys and subscription filters are not to be used for flighting or beta features. It is for testing your package in production before going public.
- If you do not check in your .sln file you can override the folder to search for gallery packages by defining in your web projects csproj anywhere prior to the import of Microsoft.Azure.Gallery.AzureGalleryUtility.targets
<PropertyGroup>
<GalleryPackagesSourceFolder>$(ProjectDir)GalleryPackages</GalleryPackagesSourceFolder>
</PropertyGroup>
- if you are using CoreXT simply updating the global package.config is not sufficient. Microsoft.Azure.Gallery.AzureGalleryUtility injects a targets file into your csproj and Microsoft.Azure.Galllery.Common adds a reference to a required *.dll
<Reference Include="Microsoft.Azure.Gallery.Common">
<HintPath$(PkgMicrosoft_Azure_Gallery_Common)\lib\net45\Microsoft.Azure.Gallery.Common.dll</HintPath>
</Reference>
...
<Import Project="$(PkgMicrosoft_Azure_Gallery_Common)\build\Microsoft.Azure.Gallery.AzureGalleryUtility.targets" Condition="Exists('$(PkgMicrosoft_Azure_Gallery_Common)\build\Microsoft.Azure.Gallery.AzureGalleryUtility.targets')" />
Steps to get package working in one box:
- Copy package (*.azpkg) to the following locations
- "%USERPROFILE%\Documents\PortalSDK\FrameworkPortal\Extensions\HubsExtension\App_Data\Gallery"
- "%PROGRAMFILES(x86)%\Microsoft SDKs\PortalSDK\FrameworkPortal\Extensions\HubsExtension\App_Data\Gallery"
- Launch portal and goto gallery blade.
- Goto to the "local development" category.
- You should see your package in both menu items.
For updates:
- Overwrite the package file (in the above locations).
- Goto the gallery -> local development UI (if UI already open just move away to another category and come back to see updates).
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
As an extension developer you will likely create one or more gallery items that will appear in the full gallery. However, you will also utilize gallery items to build your "Add" experience for your extension. Gallery items used in the add, up sell, or extension experiences will also be gallery items. Whether these gallery items show in the full gallery or just in the Add experience is up to you.
[WACOM.NOTE] If you are thinking about building your own gallery type experience for your extension or add-on, please don't. If you choose to build your own "Add" or "Extension" experience you will be required to build a consistent UX to the gallery. This will be a lot of work and is not advised. If you think you really must build your own custom experience please contact the hubs team and we can figure out the requirements and see what makes sense.
The basic experience the gallery enables for add is shown below. You will use the Add command to launch a gallery list blade that shows a specific result set that applies to your resource.
In the simplest case this experience will be used for resource that can truly be added to another resource. For example the SQL Server blade has an Add command that allows users to add a SQL database to their server. However this experience can be used to facilitate a variety of experiences such as setting up an extension on a website, configuring continuous integration, and more.
You can launch the Gallery Results Blade like any other blade. Below are the parameters for the blade.
- extension: MsPortalFx.Base.Constants.ExtensionNames.Hubs
- detailBlade: "GalleryResultsListBlade"
- selectedSubMenuItemId - Required. The menu item for the curated list for your list of gallery items. For example "linkableResource/Microsoft.WebSite/WebHostingPlan"
- resourceGroupId - Optional. The Azure Resource Manager Uri of the resource group.
- resourceGroupLocation - Optional. The location of the resource group.
By utilizing the gallery launcher for your add/extension/up sell scenarios you are ensuring that every experience in the portal is consistent. Additionally, you will receive many features for free without having to reimplement what the gallery already provides. For example, you will get the details blade shown below with no effort on your side. Additionally, as we implement more features like filtering, search, etc. in the gallery your extension will continue to benefit from these improvements.
In order to set the content of the gallery results list you will need to have the curation service updated with your content. You can build your curation configuration with either a hard coded list of gallery items or with gallery item categories. See below for an example curated list configuration. In order to have the curation service updated with your required curation please email the hubs team.
{
"id": "Microsoft.WebSite-WebSite",
"categories": [
"category1",
"category2"
],
"items": [
"Microsoft.SQLDatabase.0.2.0-preview",
"Microsoft.ClassicStorage.0.2.0-preview",
"Microsoft.HDInsight.0.2.0-placeholder",
"Microsoft.Cache.0.2.0-preview",
"SuccessBricksInc.ClearDBMySQLDatabase.0.2.0-preview",
"ObjectLabsCorporation.MongoLab.0.2.0-placeholder"
]
}
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
When onboarding a new partner to the Windows Azure Store it is very important that their offer looks polished and professional. We work very hard with each partner to simplify the display of their logo for maximum impact. To ensure that the store and offers display well, maintain consistency, and can be scaled into the next version of the developer portal, certain design standards are enforced.
Think of putting an offering in the Windows Phone store. The icons that represent those offerings are not exactly the same as the full company logo. They are an "icon" created that identifies the offering by showing a simplified view of the company logo or a new graphic created for the specific offer. We view the images that accompany WA store offerings as "logo-icons". They retain branding and logo marks that customers recognize, but discard fine details and logo text.
There are two ways that these logo-icons can be created. You can design a first pass of your own logo-icon then send a version to the Azure UX team for review, or send over an illustrator file format version of your logo along with some desired background colors and have us do the work.
These are the logo-icon requirements:
- Select a white solid version of your logo or icon. If you do not have a reversed out version, select the version that you would use on top of a dark color or image.
- Full color background
- The background color must be dark enough for white text to be overlayed on top of it. (this consideration is for the next version of the portal)
- Logo must be legible at 40x40px
- We strongly prefer the icon to contain only a logo MARK without logo TEXT, unless that text is very short.
Icon tiles used in the Windows Azure marketing site and developer portal
Related documents: Overview Release Notes Gallery Items Gallery Metadata Gallery Package Development and Debugging Icon Guidelines Add To Resource FAQ
Yes, by default the File > New project template is installed as part of the MSI install. You can find it within File > New > Installed > Templates > Visual C# > Azure Portal
Yes and if you are not using them you should ensure you update as it will provide a much more efficient path to update to newer versions of the SDK. See the following documentation regarding NuGet Packages
You will need to create your own gallery items for your resources. You can find instruction on how to do this in the gallery items section of these documents.
At this time, you will need a certificate that maps to each environment. You can download the test certificate here. At this time, we do not allow partner teams to publish to the production service so you will need to contact 1store to have your production gallery items published. We will change this soon so that each team will be able to manage their own production gallery assets.
Yes, all resource providers must publish at least one gallery item in order to be in the gallery. Gallery items contain all of the information used to start create wizards. If you need to test your package in production you can follow these steps to side load your package in production.
For now, we do not support this scenario without using a fully deployed package. If you need to test your package in production you can follow these steps to side load your package in production.
The entire gallery is driven by a curation service. The curation service controls both the structure of the Marketplace and where various items are placed in the Marketplace. In order to have your gallery item show up in the Marketplace you will need to request an updated to the curation service. Some locations such as the +New menu and hero banners require executive approval. Please email 1store to make this request.
You can associate a hide key with a gallery item. This key will be required when trying to access the item from the Azure Portal. For information on how to add and remove hide keys, look at "Gallery Package Management" section in the Gallery Items section.
How do I access a hidden gallery item in the Azure Portal?
To access hidden gallery items in the portal, append "microsoft_azure_marketplace_ItemHideKey=<hide key>" as a query parameter in the Uri when launching the portal. Multiple hide keys can be specified by comma delimiting them in the value of the query parameter.
I am trying to publish gallery items and get an error stating "Client certificate missing or not specified on the request.".
Check to make sure you aren't running fiddler or any other tool that may interfere with HTTP traffic. This is usually the cause of this problem.