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 screen The 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. Admin Dashboard Extensions Groups Galleries Users Roles Policies Webhooks Analytics Settings Getting Started Collapse Organization Admin Logout Fenko Admin View Gallery Extensions Review and manage your organization's extensions Templates Import Upload Non-actioned 1 Approved 12 Rejected 1 All 14 Search by name, publisher, or ID Filter Columns Select extensions to action Approve Reject Extension Downloads Risk Status Actions G gitlens by eamodio 1,284 12 Approved E errorlens by usernamehw 912 08 Approved R es7-react-js-snippets by dsznajder 640 24 Approved T vscode-tailwindcss by bradlc 0 41 Pending D vscode-docker by ms-azuretools 418 17 Approved Y vscode-yaml by redhat 0 88 Rejected
The PrivateStores dashboard An 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. Admin Dashboard Extensions Groups Galleries Users Roles Policies Webhooks Analytics Settings Getting Started Collapse Organization Admin Logout Fenko Admin View Gallery Dashboard Overview of your organization's extension store 12 Total Extensions 3 Pending Approval 1,284 Total Downloads 48 Active Users Recent Extensions View all → G gitlens by eamodio Approved T vscode-tailwindcss by bradlc Pending E errorlens by usernamehw Approved Quick Actions Import Extension Create Group New Gallery Add Webhook View Analytics Settings
The PrivateStores roles screen Predefined roles shown as cards, each naming a role such as organization.admin or extension.reviewer, with a description and the individual permissions it grants. Admin Dashboard Extensions Groups Galleries Users Roles Policies Webhooks Analytics Settings Getting Started Collapse Organization Admin Logout Fenko Admin View Gallery Roles Define custom roles with specific permissions + New Role Predefined Roles organization.admin System Full permissions within the organization organizations.get organizations.update principals.create +51 more organization.viewer System Read-only access to organization resources organizations.get principals.get roles.list +11 more extension.admin System Full control over extensions extensions.upload extensions.get extensions.delete +6 more extension.reviewer System Review and approve extensions extensions.get extensions.review extensions.search extension.developer System Upload, update and manage versions extensions.upload extensions.update extensions.list +2 more gallery.curator System Add and remove content from galleries galleries.extensions.add galleries.get +1 more
The PrivateStores analytics screen Usage 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. Admin Dashboard Extensions Groups Galleries Users Roles Policies Webhooks Analytics Settings Getting Started Collapse Organization Admin Logout Fenko Admin View Gallery Analytics Track extension usage and engagement Last 30 days 12 Total Extensions 12 Approved 3 Pending Review 1,284 Total Downloads 48 Active Users Download Trends Extension Status 14 extensions Approved 12 Pending 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 gates 4 phases run in sequence: Editor, Your store, Policy, and Upstream. A human gate labelled Approve sits in front of Policy. Editor Your store Approve Policy your call Upstream

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.

Measure Public marketplace Manual allowlist PrivateStores
Curation No organisation policy Whatever you maintain Approval workflow with audit trail
Risk signal Not centrally enforced Whatever you looked up Continuous scoring, enforced as policy
Yanked version Gone Gone Still installable until you move
New release Lands immediately Lands immediately Held N releases back
Usage visibility No organisation-wide inventory No organisation-wide inventory Download counts per extension
Developer workflow Unchanged Friction and exceptions Unchanged

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.