PrivateStores

Private preview

Your developers install from your catalogue, not the internet’s.

A private VS Code and OpenVSX marketplace for your organisation. Same editor, same Ctrl+Shift+X, same install. The difference is that the catalogue is yours, and an extension only appears in it after somebody approved it.

PrivateStores is not generally available yet. We are running it with a small number of teams, onboarding each one directly, and shaping it around what they hit. If that sounds like your organisation, tell us about your setup.

The PrivateStores extension review screenThe admin console for a private extension marketplace. A sidebar lists Dashboard, Extensions, Groups, Galleries, Users, Roles, Policies, Webhooks, Analytics and Settings. The Extensions view shows tabs for non-actioned, approved and rejected extensions, and a table of six extensions with publisher, download count, risk score and approval status.AdminDashboardExtensionsGroupsGalleriesUsersRolesPoliciesWebhooksAnalyticsSettingsGetting StartedCollapseOrganization AdminLogoutFenko AdminView GalleryExtensionsReview and manage your organization's extensionsTemplatesImportUploadNon-actioned1Approved12Rejected1All14Search by name, publisher, or IDFilterColumnsSelect extensions to actionApproveRejectExtensionDownloadsRiskStatusActionsGgitlensby eamodio1,28412ApprovedEerrorlensby usernamehw91208ApprovedRes7-react-js-snippetsby dsznajder64024ApprovedTvscode-tailwindcssby bradlc041PendingDvscode-dockerby ms-azuretools41817ApprovedYvscode-yamlby redhat088Rejected
The PrivateStores dashboardAn overview of an organisation's extension store: four counters for total extensions, pending approvals, downloads and active users, a list of recently added extensions, and a quick actions panel.AdminDashboardExtensionsGroupsGalleriesUsersRolesPoliciesWebhooksAnalyticsSettingsGetting StartedCollapseOrganization AdminLogoutFenko AdminView GalleryDashboardOverview of your organization's extension store12Total Extensions3Pending Approval1,284Total Downloads48Active UsersRecent ExtensionsView all →Ggitlensby eamodioApprovedTvscode-tailwindcssby bradlcPendingEerrorlensby usernamehwApprovedQuick ActionsImport ExtensionCreate GroupNew GalleryAdd WebhookView AnalyticsSettings
The PrivateStores roles screenPredefined roles shown as cards, each naming a role such as organization.admin or extension.reviewer, with a description and the individual permissions it grants.AdminDashboardExtensionsGroupsGalleriesUsersRolesPoliciesWebhooksAnalyticsSettingsGetting StartedCollapseOrganization AdminLogoutFenko AdminView GalleryRolesDefine custom roles with specific permissions+ New RolePredefined Rolesorganization.adminSystemFull permissions within the organizationorganizations.getorganizations.updateprincipals.create+51 moreorganization.viewerSystemRead-only access to organization resourcesorganizations.getprincipals.getroles.list+11 moreextension.adminSystemFull control over extensionsextensions.uploadextensions.getextensions.delete+6 moreextension.reviewerSystemReview and approve extensionsextensions.getextensions.reviewextensions.searchextension.developerSystemUpload, update and manage versionsextensions.uploadextensions.updateextensions.list+2 moregallery.curatorSystemAdd and remove content from galleriesgalleries.extensions.addgalleries.get+1 more
The PrivateStores analytics screenUsage analytics for an extension store: counters for total extensions, approved, pending review, downloads and active users, a download trend chart over the last thirty days, and a doughnut chart splitting extensions into approved and pending.AdminDashboardExtensionsGroupsGalleriesUsersRolesPoliciesWebhooksAnalyticsSettingsGetting StartedCollapseOrganization AdminLogoutFenko AdminView GalleryAnalyticsTrack extension usage and engagementLast 30 days12Total Extensions12Approved3Pending Review1,284Total Downloads48Active UsersDownload TrendsExtension Status14extensionsApproved 12Pending 2

Approve, reject or hold. Risk scores come from the RiskyPlugins engine, so the decision has something behind it.

Public marketplaces don’t enforce your policy.

They were never built to. There is no approval step that answers to your organisation, no risk threshold you set, and no way to hold a release back while somebody looks at it. Whatever a developer can install this afternoon, they can install.

Control

You decide what gets installed.

Three controls, and none of them require reviewing every extension by hand.

Approval

Before it reaches a developer

Submit, approve, reject or quarantine, with an audit trail behind every decision. An extension only appears in your catalogue once someone has signed it off.

Risk threshold

Automatic

Refuse to serve anything scoring above a threshold you set, scored continuously by RiskyPlugins across malware, secrets, obfuscation and permission analysis.

Release hold

Per extension

Hold every extension a fixed number of releases behind the newest, so a fresh publish cannot land on your team the moment it ships.

How it works

Proxied, never redirected.

Your store does not host copies of everything. It resolves against upstream and streams the artifact through, which is why importing thousands of extensions takes seconds and costs you no storage. Your developers’ editors only ever talk to your store’s hostname.

Assessment phases and human gates4 phases run in sequence: Editor, Your store, Policy, and Upstream. A human gate labelled Approve sits in front of Policy.EditorYour storeApprovePolicyyour callUpstream

Speaks

  • VS Code Marketplace API
  • OpenVSX API
  • REST API v1
  • OpenAPI 3
  • HMAC-signed webhooks
  • Prometheus metrics

What you get

A marketplace that answers to you.

Your catalogue

One private marketplace per organisation, on a Fenko-hosted tenant subdomain, with row-level isolation from every other tenant. Point an editor at it and the public marketplace stops being part of your supply chain.

  • Security scorecards from the RiskyPlugins engine, on the extensions it covers
  • Download counts per extension, so “is anyone still using this?” has an answer
  • GCP-style IAM: principals, roles and policies rather than a flat admin list
  • API keys for CI/CD, and HMAC-signed webhooks with retry

A yanked extension stays installable

When an author pulls a version, or it is removed for a vulnerability, your developers are not stranded mid-sprint. You choose when to move.

Nothing changes for developers

The store speaks both the VS Code Marketplace and OpenVSX APIs, so editors built on either should work. VS Code, VSCodium, Cursor and Theia are the ones we have run in preview. Search, install, done.

Two consoles

A tenant console for your organisation covering extensions, galleries, users, roles and analytics. A platform console if you run the whole thing yourself.

Editors we have run in preview

  • VS Code
  • VSCodium
  • Cursor
  • Theia

Isolation

One origin, and it answers to you.

Requests are proxied rather than redirected, so nothing your developers run reaches out to a marketplace you do not control.

  • Row-level tenant isolation, with a Fenko-hosted tenant subdomain per organisation.
  • Editors only ever resolve your store’s hostname, never the upstream marketplace.
  • Approvals, rejections and quarantines are recorded against the principal who made them.

In context

The options, honestly.

MeasurePublic marketplaceManual allowlistPrivateStores
CurationNo organisation policyWhatever you maintainApproval workflow with audit trail
Risk signalNot centrally enforcedWhatever you looked upContinuous scoring, enforced as policy
Yanked versionGoneGoneStill installable until you move
New releaseLands immediatelyLands immediatelyHeld N releases back
Usage visibilityNo organisation-wide inventoryNo organisation-wide inventoryDownload counts per extension
Developer workflowUnchangedFriction and exceptionsUnchanged

Where PrivateStores sits

PrivateStores is the enforcement side of the same work as RiskyPlugins. RiskyPlugins tells you what an extension does. PrivateStores decides whether your developers can install it.

What private preview means

You get a real store, not a demo, and we set it up with you rather than handing you a signup link. In exchange we ask for the kind of feedback that only shows up in real use. Pricing is set at general availability, so preview terms are agreed directly.

What the preview runs today

The catalogue, the approval workflow and its audit record, risk thresholds fed by RiskyPlugins, per-extension release holds, the VS Code and OpenVSX APIs, IAM with principals and roles, API keys, signed webhooks, and per-extension download counts.

What is not there yet

We would rather you heard this from us than found it in week two. These are being worked on with preview teams, and none of them are available today:

  • SSO, SCIM provisioning and MFA. Not yet verified end to end against a real identity provider, so user management is manual.
  • Transactional email, and therefore no self-service password reset or account recovery. We handle account issues directly during preview.
  • Audit log export to your SIEM. Analytics export exists; shipping the audit log out does not.
  • Tenant data export and deletion, the self-service kind you would want for DPA and GDPR obligations.
  • Custom domains. Your store lives on a Fenko-hosted tenant subdomain for now, so you cannot yet put it on a hostname you own.
  • Seat limits are not enforced. Plan user counts are recorded but nothing stops you exceeding them.

If any of those are hard requirements rather than nice-to-haves, tell us when you get in touch and we will be straight about the timeline.

Ask for a preview store.

Tell us roughly how many developers, which editors they use, and whether you need to self-host. Preview teams are onboarded by us rather than through a signup form, and we will be straight about what is finished and what isn’t.