Settings
Every setting in JSLab's nine Settings tabs, with its default and what it changes.
⌘,, or JSLab → Settings…, opens the Settings window. It has nine tabs: General, Editor, Formatting, Appearance, Keybindings, AI, NPM, Build and Advanced. Search across all of them with the search field.
Every field has help text, and changes apply as you make them. Only a change of interface language needs a restart, and JSLab says so.
Every option, searchable in one window, applied the moment you change it.
General
| Setting | Default | What it does |
|---|---|---|
| Auto Run | On | Runs code automatically as you type. |
| Auto Log | On | Shows the value of each top-level expression. |
| Default Runtime | Bun | The runtime for new tabs. |
| Default Language | TypeScript | The language for new tabs. |
| Format on Run | Off | Formats with Prettier before each run, unless you’re typing. |
| Confirm Close | Off | Asks before closing any tab. |
| Language | System | The language of menus and panels. Needs a restart. |
| Show tips | On | A short tip in the status bar the first time you meet a feature, during your first week. |
Reset tips shows the first-week tips again and clears the ✓ marks in Learning & Tips.
Editor
Line numbers, wrapping, brackets, minimap, hovers, fonts and more are all in Settings.
| Setting | Default | What it does |
|---|---|---|
| Line Numbers | On | Line numbers in the gutter. |
| Line Wrap | On | Wraps long lines to the editor’s width. |
| Vim Keys | Off | Vim key bindings. ⌘R still runs in every mode. |
| Close Brackets | On | Inserts the closing bracket or quote as you type the opening one. |
| Invisibles | Off | Shows spaces and tabs. |
| Active Line | Off | Highlights the line with the cursor. |
| Autocomplete | On | Suggests completions as you type. |
| Linting | On | Shows TypeScript diagnostics inline. They never block a run. |
| Hover Info | On | Shows type information when you hover over code. |
| Hover Delay | 400 ms | How long before hover information appears, from 100 to 2,000 ms. |
| Signatures | On | Parameter hints as you type a call. |
| Format on Save | Off | Formats with Prettier before saving a file. |
| Minimap | Off | A code overview beside the scroll bar. |
Formatting
The Prettier options: Print Width, Tab Width, Use Tabs, Semicolons, Single Quotes, Quote Props, JSX Single Quotes, Trailing Commas, Bracket Spacing, Bracket Same Line and Arrow Parens. See Formatting for their defaults.
Appearance
| Setting | Default | What it does |
|---|---|---|
| Theme | Graphite | The color theme for the editor and the window. |
| Follow System Appearance | Off | Switches between the Light Theme and Dark Theme with macOS. |
| Light Theme | Graphite Light | The theme in light mode, when following the system. |
| Dark Theme | Graphite | The theme in dark mode, when following the system. |
| Font | JetBrains Mono | The font for the editor and the output. |
| Font Size | 14 | From 8 to 72. |
| Font Ligatures | On | Combines pairs like => when the font supports it. |
| Zoom | 1 | Scales the editor, output and side bar, from 0.5 to 2. |
| Motion | System | How much JSLab animates: System follows macOS Reduce Motion; Reduced and Full override it. |
| Intro Sound | On | Plays the chime during the first-launch intro. |
| Tab Bar | On | Shows the tab bar even with one tab open. |
| Activity Bar | On | The activity bar on the left. |
| Status Bar | On | The status bar at the bottom. |
| Side Bar | Off | The side bar. |
| Side Bar Width | 280 | In pixels, from 240 to 600. Dragging the side bar’s edge sets it too. |
| Layout | Horizontal | The split direction for new tabs. |
| Output Highlighting | On | Colors output values by type. |
| Output Line Numbers | On | Shows the source line beside each output row. |
Keybindings
Every command, its shortcut, where it applies and whether the binding is a default or yours. Record, reset or clear shortcuts here, or open keybindings.json. See Keybindings and the command palette.
AI
| Setting | Default | What it does |
|---|---|---|
| Provider | None | Which service answers AI Chat: None, Ollama (Local), OpenAI, Anthropic or Google Gemini. |
| Ollama Model, OpenAI Model, Anthropic Model, Gemini Model | Blank | The model to ask for. Blank uses the default that ships with this version. |
| Ollama Base URL, OpenAI Base URL, Anthropic Base URL, Gemini Base URL | Blank | The endpoint. Blank uses the provider’s standard endpoint. |
| Send Recent Output | On | Includes the most recent run’s output as context, up to 20 KB. |
Below them, API Keys stores a key for OpenAI, Anthropic and Google Gemini in your macOS Keychain. See AI providers and keys.
NPM
| Setting | Default | What it does |
|---|---|---|
| Allow Install Scripts | Off | Lets packages run their install scripts, with your permissions. Applies to future installs. |
| Install Types Automatically | Off | Installs @types/<package> when an installed package has no types of its own. |
Below them is an editor for JSLab’s own .npmrc, with Save and Reset. See npm packages.
Build
Decorators work as they are, and Settings → Build turns on pipelines, do expressions and other proposals.
function logged<This, Args extends unknown[], Result>(
method: (this: This, ...args: Args) => Result,
context: ClassMethodDecoratorContext<This>,
) {
return function (this: This, ...args: Args): Result {
console.log(`→ ${String(context.name)}(${args.join(", ")})`);
return method.apply(this, args);
};
}
class Greeter {
@logged
hello(name: string) {
return `Hello, ${name}`;
}
}
new Greeter().hello("Ada");
The syntax the transform accepts, and Tailwind for browser tabs.
| Setting | Default | What it does |
|---|---|---|
| Decorators | 2023-11 (standard) | Decorator syntax: 2023-11 (the standard), Legacy (TypeScript’s experimentalDecorators) or None. |
| Pipeline Operator | Off | Hack-style |> with % as the topic token. |
| Do Expressions | Off | do { … } blocks that produce a value. |
| Throw Expressions | Off | throw as an expression, for example value ?? throw new Error(). |
| function.sent | Off | The value last passed to a generator’s next(). |
| RegExp Modifiers | On | Inline flags such as (?i:a) in regular expressions. |
| Optional Chaining Assignment | On | a?.b = c assigns only when a isn’t null or undefined. |
| Tailwind by Default | Off | Tailwind for every browser tab that hasn’t set its own. A tab’s Tailwind switch in the status bar overrides it. |
Advanced
| Setting | Default | What it does |
|---|---|---|
| Show Undefined | Off | Gives expressions whose value is undefined their own output row. |
| Loop Protection | On | Stops loops that run more iterations than the Loop Limit. |
| Loop Limit | 2,000 | Iterations before loop protection stops a loop, from 100 to 10,000,000. |
| Auto Run Delay | 300 ms | How long after you stop typing before code runs, from 0 to 5,000 ms. |
| Unresponsive Timeout | 3,000 ms | How long without a response before JSLab offers to kill a run, from 1,000 to 60,000 ms. |
| Output Limit | 10,000 | The most entries kept per run before output is truncated, from 100 to 100,000. |
| Automatic Updates | On | Checks for, downloads and installs updates in the background. See Updates. |
The Advanced tab also has three buttons:
- Open Data Folder shows JSLab’s data folder in Finder.
- Reset All Settings… returns every setting to its default, after you click Confirm Reset.
- Restart in Safe Mode relaunches JSLab with Auto Run paused. See Troubleshooting.
Settings are saved in settings.json in JSLab’s data folder.