usebruno/bruno · warning · Error
Single object export requires exactly one environment
Error message
Single object export requires exactly one environment
What it means
Thrown by 'renderer:export-environment' when exportFormat is 'single-object' but the environments array does not have exactly one entry. The single-object format writes one JSON file representing one environment, so zero or multiple environments are rejected.
Source
Thrown at packages/bruno-electron/src/ipc/collection.js:1027
const baseFileName = `bruno-${environmentType}-environments`;
const uniqueFileName = generateUniqueName(baseFileName, (name) => fs.existsSync(path.join(filePath, `${name}.json`)));
const fullPath = path.join(filePath, `${uniqueFileName}.json`);
const exportData = {
info: {
type: 'bruno-environment',
exportedAt: new Date().toISOString(),
exportedUsing: `Bruno/v${appVersion}`
},
environments
};
const jsonContent = JSON.stringify(exportData, null, 2);
await fs.promises.writeFile(fullPath, jsonContent, 'utf8');
} else if (exportFormat === 'single-object') {
// single environment json file
if (environments.length !== 1) {
throw new Error('Single object export requires exactly one environment');
}
const environment = environments[0];
const baseFileName = environment.name ? `${environment.name.replace(/[^a-zA-Z0-9-_]/g, '_')}` : 'environment';
const uniqueFileName = generateUniqueName(baseFileName, (name) => fs.existsSync(path.join(filePath, `${name}.json`)));
const fullPath = path.join(filePath, `${uniqueFileName}.json`);
const jsonContent = JSON.stringify(environmentWithInfo(environment), null, 2);
await fs.promises.writeFile(fullPath, jsonContent, 'utf8');
} else {
throw new Error(`Unsupported export format: ${exportFormat}`);
}
} catch (error) {
return Promise.reject(error);
}
});
// rename item
ipcMain.handle('renderer:rename-item-name', async (event, { itemPath, newName, collectionPathname }) => {View on GitHub (pinned to 9bdd81c7bd)
Solutions
- Switch the user to 'folder' export when more than one environment is selected.
- Disable the single-object option in the UI unless exactly one environment is selected.
- Reduce the selection to one environment before invoking.
Example fix
// before
await window.Ipc.invoke('renderer:export-environment', { environments: allEnvs, environmentType, filePath, exportFormat: 'single-object' });
// after
const fmt = selectedEnvs.length === 1 ? 'single-object' : 'folder';
await window.Ipc.invoke('renderer:export-environment', { environments: selectedEnvs, environmentType, filePath, exportFormat: fmt }); Defensive patterns
Strategy: validation
Validate before calling
if (exportFormat === 'single-object' && environments.length !== 1) {
throw new Error('Select exactly one environment for single-object export');
}
await window.Ipc.invoke('renderer:export-environment', { environments, environmentType, filePath, exportFormat }); Type guard
function canSingleObjectExport(environments: unknown[], fmt: string): boolean {
return fmt !== 'single-object' || (Array.isArray(environments) && environments.length === 1);
} Prevention
- Disable 'single-object' in the UI unless exactly one environment is selected.
- Default to 'folder' export for multi-select.
- Validate selection size before opening the format picker.
When it happens
Trigger: Selecting 'single object' export with a multi-select of environments, or with none selected; passing an array of length 0 or >= 2 with exportFormat: 'single-object'.
Common situations: UI exposes a 'select all + single-file' combination, batch export menu defaults to multi-select, or the user changed selection after picking the format.
Related errors
- Unsupported environment type: ${environmentType}
- environment: ${newEnvFilePath} already exists
- Export path must be an absolute directory path
- Unsupported export format: ${exportFormat}
- Collection path does not exist
AI-assisted analysis of usebruno/bruno@9bdd81c7bd (2026-08-13).
Data as JSON: /api/errors/80d23566a9418bd9.
Report an issue: GitHub.