NotBadAI IDE
October 9, 2025 · View on GitHub
Developer
Follow these steps to set up the development environment.
- Initialize and update git submodules:
git submodule update --init --recursive
- Create an
env.tsfile inui/src/and add the following configuration:
export const TRANSCRIPTION_API_ENDPOINT: string = ''
- install the packages
npm install
- To compile frontend assets and automatically recompile when changes are made:
make watch
To build and package the Electron application into a distributable format run:
make package
The packaged application will be available in the dist/desktop/ directory.
Code Editor
The code editor supports shortcuts similar to VS Code. Here’s a list of the popular ones.
Terminal
Multiple terminals are supported. To reset a terminal, including clearing its display and scrollback history, right-click the terminal tab and select Clear Buffer.
Extensions
Extensions are Python scripts that enable interactions with LLMs, such as chat, code apply, autocomplete, gray completions etc. You can also create your own extensions, which the editor will manage and execute (explained in a later section).
Extension Errors
If an extension encounters any errors during execution, they will appear under Extensions → Errors. It will
provide details such as error messages and stack traces to help you debug and resolve the issue.
Running Extensions
Extensions that are currently running will be listed under Extensions → Running.
From this tab, you can:
- Terminate any active extension.
- Monitor progress, as extensions that send progress updates will display a progress bar here.
Extension Updates and Notifications
- If an extension sends an update, it will appear under
Extensions→Updates. - If an extension sends a notification, it will be shown under
Extensions→Notifications.
Developing Your Own Extensions
To use your own set of extensions, create a directory named extensions at the root level of your project.
All Python modules in this directory will be automatically added to the Python path, making them available for use by the IDE.
The easiest way to get started is to copy the default extensions into your project (top level) and customize it as needed.
1. config.yaml
All extension-related settings are defined in config.yaml. From this file, you can configure the main entry file and other settings for each extension.
Any errors in the config.yaml file will be displayed in the Extensions tab.
config.yaml Priority
By default, the IDE uses the system-wide configuration located at Extensions → Management.
You can override these defaults by creating a config.yaml file in your project's root-level extensions/ directory. This local configuration takes precedence over system-wide settings, enabling per-project customization and easier extension development.
Extension Settings
You can pass custom settings to extensions through the settings section in config.yaml. Settings are organized by extension name and can contain any configuration parameters your extension needs:
settings:
extension1:
parameter1: "value1"
parameter2: "value2"
extension2:
parameter1: "value1"
parameter2: "value2"
2. Extension API
The ExtensionAPI defines:
- The data passed from the editor to the extension.
- The utility functions available for extensions to interact with the editor.
- Can be imported in your extension using
from notbadai_ide import api
Every extension must include a function with the following definition:
from notbadai_ide import api
def start():
pass
This function is executed by the editor when the extension runs.
3. Debug Logs
During extension development, you can add debug logs using the
log function
provided by the ExtensionAPI.
These logs are generated each time the extension runs.
To view the logs:
-
Go to
View→Toggle Developer Tools -
Or use the shortcut
Shift+Cmd+I
Setting Up Voice
Server Setup
We’ve tested faster-whisper-server as the backend for
transcription.
It’s quite fast and easy to set up.
- Run the transcription server.
- Install the IDE with voice support enabled:
curl -sSL https://raw.githubusercontent.com/notbadai/ide/main/install.sh | bash -s -- --voice "<URL>"