usebruno/bruno · error · Error
API spec is not registered in this workspace.
Error message
API spec is not registered in this workspace.
What it means
Even with a path, readWorkspaceSpec resolves it and confirms it matches one of the specs registered in the workspace config (`getWorkspaceApiSpecs`). This is an allowlist: only specs the workspace explicitly registered can be read by the mock server, preventing arbitrary file reads via the mock-server channel.
Source
Thrown at packages/bruno-electron/src/ipc/mock-server/index.js:44
} catch {
const yaml = require('js-yaml');
return yaml.load(content);
}
};
const readWorkspaceSpec = (workspacePath, specPath) => {
if (!specPath) {
throw new Error('API spec path is required.');
}
validateWorkspacePath(workspacePath);
const resolvedPath = path.resolve(specPath);
const isRegisteredSpec = getWorkspaceApiSpecs(workspacePath)
.some((spec) => spec.path && path.resolve(spec.path) === resolvedPath);
if (!isRegisteredSpec) {
throw new Error('API spec is not registered in this workspace.');
}
if (!fs.existsSync(resolvedPath)) {
throw new Error('API spec file not found.');
}
return parseSpecContent(fs.readFileSync(resolvedPath, 'utf8'));
};
const registerMockServerIpc = (mainWindow) => {
mockServer.setMainWindow(mainWindow);
ipcMain.handle('renderer:mock-server-suggest-port', async (_event, payload = {}) => {
try {
const startPort = Number(payload.startPort) || undefined;
const port = await mockServer.suggestPort(startPort, {
additionalUsedPorts: payload.additionalUsedPorts || []
});View on GitHub (pinned to 9bdd81c7bd)
Solutions
- Register the spec in the workspace first (addApiSpecToWorkspace, or via the UI).
- Make the path you pass resolve identically to the registered entry - both absolute or both relative-to-workspace.
- Re-add the spec via the UI if it was removed.
Example fix
// before
readWorkspaceSpec(workspacePath, '/abs/path/to/openapi.yaml'); // not in workspace.yml
// after - register first, then reference by the same resolved path
await addApiSpecToWorkspace(workspacePath, { name: 'petstore', path: 'specs/petstore.yaml' });
readWorkspaceSpec(workspacePath, path.join(workspacePath, 'specs/petstore.yaml')); Defensive patterns
Strategy: validation
Validate before calling
const path = require('path');
const { getWorkspaceApiSpecs } = require('../../utils/workspace-config');
const isRegistered = (workspacePath, specPath) => {
const resolved = path.resolve(specPath);
return getWorkspaceApiSpecs(workspacePath).some(s => s.path && path.resolve(s.path) === resolved);
}; Prevention
- Always register a spec via addApiSpecToWorkspace (or the UI) before referencing it.
- Keep spec paths in workspace.yml; don't pass ad-hoc absolute paths.
- Compare paths via path.resolve to avoid relative/absolute mismatches.
When it happens
Trigger: Passing an absolute path to a spec that exists on disk but was never added to workspace.yml's `specs`; a relative-vs-absolute mismatch so `path.resolve` comparison fails; the spec was removed from config but the renderer still references it.
Common situations: Pointing the mock server at an OpenAPI file without registering it first; workspace.yml hand-edited and the spec entry dropped; path stored relative in one place and absolute in another.
Related errors
- API spec path is required.
- Mock response draft not found
- Invalid file format. Please select a valid OpenAPI spec in Y
- Mock server id is required.
- Workspace path is required.
AI-assisted analysis of usebruno/bruno@9bdd81c7bd (2026-08-13).
Data as JSON: /api/errors/45423fb27faeb901.
Report an issue: GitHub.