kwburns-kongandjackkav 61acb4924d fix(plugins): missing plugins (Kong/insomnia#10295) INS-3364 (#10317)
* fix(templating): reload plugins in the persistent render worker

The persistent templating worker caches its Liquid engine and plugin tags
once per session; Settings > Plugins Reload never invalidated it, nor the
separate plugin registry cache in templating-worker-database.ts. A plugin
missing on the first render stayed broken all session. Adds a reload
message to invalidate the worker's cache and a plugin.reloadPlugins
endpoint for the registry, plus regression tests.

* fix(templating): fetch a fresh auth token for the reload message

The reload message needs an auth token normally only set by a render job's
payload, so clicking Reload before sending any request silently failed.
Fetch a token specifically for the reload message instead.

* fix(plugins): surface load-error and name-collision plugins instead of dropping them

Kong/insomnia#10295: a plugin whose require() throws, or whose name
collides with another folder, used to vanish silently. Both now show as a
disabled row with a visible reason, and Settings > Plugins gains an
expandable details panel (display name, description, effective permission
set, warnings).

* fix(plugins): resolve symlinks before trusting a plugin folder's location

traversePluginPath's containment check was purely lexical, so a plugin
folder that was itself a symlink to somewhere outside the configured
plugin path passed it and got require()'d from its real target with the
sandbox off. Re-check against the realpath-resolved base.

* fix(templating): reconcile #10317 with merged S1 inventory + order-independent collision policy

Post-merge fixes so #10317 is consistent with what landed on develop (S1 #10320, #10326):

- Add a templating-worker-database-inventory.ts row for the new plugin.reloadPlugins handler this PR
  introduces (S1's G1 no-drift gate requires every pluginToMainAPI handler to have a row). Classified
  sandbox-orchestration / host-only / registry-lookup (no caller input; triggers a trusted rescan).
- Update plugin-vanish-name-collision smoke test to the order-independent collision policy this
  branch now uses after the merge: a name claimed by two folders loads NEITHER active (both disabled
  with a collision marker), instead of first-folder-wins. Keeps a colliding folder from inheriting
  another's name-keyed `elevated` grant via load order (#10326), while still surfacing both (P0-B).

* fix(plugins): close prefix-match symlink bypass + fix per-row detail expansion

- traversePluginPath's realpath re-check used startsWith() instead of the
  isContainedIn() helper, reintroducing the exact prefix-match bypass that
  helper was written to prevent (e.g. a plugin folder symlinked to
  /plugins-evil would pass a startsWith('/plugins') check). Reuse
  isContainedIn on the realpath-resolved paths instead.
- Settings > Plugins keyed the details-expansion Set by plugin.name, but
  colliding folders intentionally share a name, so expanding one row
  expanded every row with that name. Key by plugin.directory instead,
  which is already used as the row's unique GridList id.

Flagged by Copilot and Aikido on Kong/insomnia#10317.

* fix(plugins): (#10295 follow-ups) route plugin_reload shortcut through worker reload; null-proto plugin maps (#10346)

Two same-bug-class follow-ups to the #10295 fix:
- use-global-keyboard-shortcuts.ts: the `plugin_reload` shortcut called only plugins.reloadPlugins(),
  bypassing the render-worker cache invalidation (reload()) that the Settings→Plugins button does — a
  live instance of the P0-A staleness bug. It now rescans AND invalidates the Liquid-engine cache.
- plugins/index.ts: pluginMap and nameCounts are now Object.create(null). With a plain {}, a plugin
  named `toString`/`valueOf`/`hasOwnProperty`/etc. matches an inherited prototype member, which could
  skew duplicate detection and — via `name in pluginMap` in the load-error handler — silently drop a
  failed plugin instead of surfacing a disabled row (a P0-B hole for prototype-method names).

* fix(plugins): re-check duplicate names before running a plugin's code

The duplicate-name scan in getPlugins() takes a snapshot before the load
pass's own walk, which has await points of its own. A folder claiming an
already-elevated plugin's name that appears after the snapshot but before
the load pass reaches it wasn't caught, since the "unique name" success path
overwrote pluginMap unconditionally. Re-run the same scan immediately before
a folder's code executes, so a name that's since become ambiguous is routed
into the same disabled row the initial scan already produces.

---------

Co-authored-by: jackkav <jackkav@gmail.com>
2026-08-07 16:21:45 +02:00
2026-07-15 09:30:21 +00:00
2025-04-11 13:11:34 +02:00
2025-09-29 16:37:33 +00:00
2023-04-21 10:32:30 +00:00
2025-04-11 13:37:19 +02:00
2025-04-11 13:37:19 +02:00
2025-04-11 13:37:19 +02:00
2024-04-04 14:48:56 +02:00
2025-09-03 14:26:49 +02:00
2025-09-03 14:26:49 +02:00
2023-07-10 23:54:42 +02:00

Insomnia API Client

Website Stars GitHub commit activity Slack Channel license Twitter Follow

Insomnia is an open-source, cross-platform API client for GraphQL, REST, WebSockets, Server-Sent Events (SSE), gRPC and any other HTTP compatible protocol.

With Insomnia you can:

  • Debug APIs using the most popular protocols and formats.
  • Design APIs using the native OpenAPI editor and visual preview.
  • Test APIs using native test suites and collection runner.
  • Mock APIs using a cloud or self-hosted mocking server.
  • Build CI/CD pipelines using the native Insomnia CLI for linting and testing.
  • Collaborate with others using the many collaboration features.
  • And more including the ability to use 3rd party plugins.

The following storage options are supported for your Insomnia projects, collections, design specs and all other resources:

  • Local Vault: for 100% local storage of collections, design specs and every other resource.
  • Git Sync: for Git storage using any 3rd party Git repository, without going through the cloud.
  • Cloud Sync: for cloud collaboration, optionally end-to-end encrypted (E2EE) in the cloud.

Insomnia API Client

Get started for free

Insomnia is available for Mac, Windows, and Linux and can be downloaded from the website:

https://insomnia.rest

Account & Subscriptions

You can use Insomnia without an account with the local Scratch Pad, or you can create an account for free to get access to the full capabilities of the product.

Even with an account, Insomnia only stores your projects and files accordingly to the storage backend that you have selected, which can be Local Vault, Cloud Sync, Git Sync or any combination of them. As such - for example - you have the freedom to choose to store sensitive projects 100% locally or in a Git repository, while still being able to collaborate on others in the cloud. It's the best of both worlds.

For added security, Insomnia also offers a Private Environments feature, where your environments configuration is always stored locally and never in the cloud, independently from the storage option that you have chosen for your project.

Premium features and support

Insomnia has a very generous free plan that will be satisfactory for most users, but if you need to get access to premium capabilities like unlimited collaboration, the Git Sync feature, the ability to create organizations for your projects, using a 3rd party IDP for logins (SAML, OIDC) and many other features, then you can explore the other subscription plans.

You can compare all subscription plans and get started for free.

Why does Insomnia require an account?

Insomnia does not require an account if you decide to use the local Scratch Pad, but to access most capabilities of the product we require an account. Your account data is securely stored in compliance with ISO27001, SOC 2 Type II, ISO27018, Gold CSA STAR regulations and in accordance with our terms of service and privacy policy.

We require an account to sustainably build and improve the product, and to make sure we can continue to offer the many core capabilities in a free and open-source distribution. While open source software is free to use, it is unfortunately not free to build, and our ability to continue working on Insomnia is dependent on our ability to convert a subset of free users (that need premium features) to become paying customers of our product.

If you are a user that cannot share API data like collections and design specifications to the cloud, this is still possible by selecting "Local Vault" as the storage of your Insomnia projects: having an Insomnia account is not tied to how you wish to store your sensitive API data (which can be stored 100% locally via Local Vault, on a 3rd party Git repository without any cloud storage via Git Sync, or in the cloud for ease of collaboration via Cloud Sync).

Bugs and Feature Requests

Have a bug or a feature request? First, read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.

For more generic product questions and feedback, join the Slack Team.

Contributing

Please read through our contributing guidelines and code of conduct. Included are directions for opening issues, coding standards, and notes on development.

Documentation

Check out our official Insomnia Documentation.

Develop Insomnia

Development on Insomnia can be done on Mac, Windows, or Linux as long as you have Node.js and Git. See the .nvmrc file located in the project for the correct Node version.

Initial Dev Setup

This repository is structured as a monorepo and contains many Node.JS packages. Each package has its own set of commands, but the most common commands are available from the root package.json and can be accessed using the npm run … command. Here are the only three commands you should need to start developing on the app.

# Install and Link Dependencies
npm i

# Run Lint
npm run lint

# Run type checking
npm run type-check

# Run Tests
npm test

# Start App with Live Reload
npm run dev

# Start App with both renderer process live reload and main process auto restart
npm run dev:autoRestart

Linux

If you are on Linux, you may need to install the following supporting packages:

Ubuntu/Debian
# Update library
sudo apt-get update

# Install font configuration library & support
sudo apt-get install libfontconfig-dev
Fedora
# Install libcurl for node-libcurl
sudo dnf install libcurl-devel

Also on Linux, if Electron is failing during the install process, run the following

# Clear Electron install conflicts
rm -rf ~/.cache/electron

Windows

If you are on Windows and have problems, you may need to install Windows Build Tools

Editor Requirements

You can use any editor you'd like, but make sure to have support/plugins for the following tools:

  • ESLint - For catching syntax problems and common errors
  • JSX Syntax - For React components

Develop Inso CLI

  • npm i
  • Start the compiler in watch mode: npm run inso-start
  • Run: ./packages/insomnia-inso/bin/inso -v

Plugins

Search for, discover, and install plugins from the Insomnia Plugin Hub!

Community Projects

License

Apache-2.0 © Insomnia

S
Description
No description provided
Readme Apache-2.0
252 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 97.8%
CSS 1.1%
JavaScript 0.6%
MDX 0.3%
C++ 0.1%