Skip to main content

An opinionated JupyterLab meta-package that bundles a curated set of extensions, ships a path-first file browser and a VS Code-style git changes panel, and applies a quieter default workspace configuration.

Project description

xtralab

An opinionated JupyterLab meta-package.

Bundles a curated set of extensions, a path-first file browser, a VS Code-style git changes panel, an agent-focused launcher, and a quieter default workspace.

Install

pip install xtralab

Usage

As a JupyterLab package

Run JupyterLab the usual way:

jupyter lab

As a desktop app

A standalone Electron build (DMG on macOS, AppImage on Linux) ships with each tagged release — grab the installer for your platform from the Releases page. Builds from the current main branch are also produced on every push as workflow artifacts under the repository's Actions tab. See CONTRIBUTING.md for the architecture and local build instructions.

What's included

  • ajlab — agent-ready JupyterLab base
  • JupyterLab 4.6+
  • jupyterlab-git — backs the bundled changes panel
  • jupyterlab-lsp + ty — Python LSP via Astral's ty (bundled); also detects typescript-language-server on PATH for JS/TS
  • jupyterlab-quickopen
  • jupyterlab-cursor-light, jupyterlab-cursor-dark
  • jupyterlab-day, jupyterlab-night themes

The bundled labextension adds:

  • A path-first file browser in the left sidebar.
  • A "Source Control" panel powered by jupyterlab-git and @pierre/diffs.
  • An agent launcher with a prompt textarea, a row of agent buttons (Claude, Codex, Gemini, Copilot, Goose, OpenCode, Kiro, Mistral Vibe), and a collapsible list of changed files. Buttons are filtered to agents installed on the machine; a typed prompt is shell-quoted and spliced into the launch command for agents that accept one.

Language servers

xtralab ships with jupyterlab-lsp and pre-registers two language servers through jupyter_server_config.d/xtralab-lsp.json:

  • Python — ty — installed as a Python dependency. Works out of the box.

  • TypeScript / JavaScript — typescript-language-server — install yourself:

    npm install -g typescript-language-server typescript
    

    Restart JupyterLab (or the desktop app) after installing.

Specs use bare command names (["ty", "server"]), so binaries are resolved from PATH at spawn time.

Where binaries are discovered

  • pip install xtralab — anything on the JupyterLab process's PATH.
  • Desktop app — the supervisor augments PATH with common shim locations (~/.volta/bin, ~/.npm-global/bin, ~/.bun/bin, ~/.asdf/shims, ~/.mise/shims, /opt/homebrew/bin, /usr/local/bin, …). Set XTRALAB_EXTRA_PATH (colon-separated) before launching the app to add directories the defaults miss.

Adding more servers

To enable another server (bash, yaml, json, dockerfile, pyright, …), install the binary then drop a JSON file into a jupyter_server_config.d/ directory:

  • pip install xtralab — run jupyter --paths and pick a config dir (typically ~/.jupyter/jupyter_server_config.d/).
  • Desktop app (macOS)~/Library/Application Support/xtralab/jupyter/config/jupyter_server_config.d/ (or xtralab dev for local dev builds).
  • Desktop app (Linux AppImage)~/.config/xtralab/jupyter/config/jupyter_server_config.d/.

Example (bash-lsp.json):

{
  "LanguageServerManager": {
    "language_servers": {
      "bash-language-server": {
        "version": 2,
        "argv": ["bash-language-server", "start"],
        "languages": ["bash", "sh"],
        "mime_types": ["text/x-sh", "application/x-sh"],
        "display_name": "bash-language-server"
      }
    }
  }
}

Pair with npm install -g bash-language-server. Reuse a bundled key to override it. See jupyterlab-lsp's docs for the full spec schema.

Customizing the launcher

Open Settings → Settings Editor → xtralab launcher and edit the agents array. Entries are merged with the defaults by id.

{
  "agents": [
    // Hide an agent
    { "id": "kiro", "enabled": false },

    // Override an agent's command (e.g. point Claude at a shell alias)
    { "id": "claude", "command": "cl", "requireAvailable": false },

    // Add a new agent; promptArgs: [] appends the prompt as a positional arg
    { "id": "aider", "label": "Aider", "command": "aider", "promptArgs": [] }
  ]
}

Fields: id (required), label, caption, command, promptArgs (how to splice the prompt — [] for positional, ["--flag"] for flagged, null to opt out), iconSvg, rank, enabled, requireAvailable.

Contributing

See CONTRIBUTING.md for the development setup, the Electron desktop app architecture, and the build pipeline.

License

BSD-3-Clause

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xtralab-0.3.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xtralab-0.3.0-py3-none-any.whl (2.2 MB view details)

Uploaded Python 3

File details

Details for the file xtralab-0.3.0.tar.gz.

File metadata

  • Download URL: xtralab-0.3.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for xtralab-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a38a7ddf2c617b38a381f9cf9b1ec444dfc8ecba5188329550a80f61bc9b842a
MD5 e7b6a1fcae1f011063f227c1792ada69
BLAKE2b-256 aadd7d4910f1739d3fe5e3f28b03f1d346e8a9c79b1653da8573e30fab4d348c

See more details on using hashes here.

File details

Details for the file xtralab-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: xtralab-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for xtralab-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d7c73854e8f25510eb9c72d77f4a5c80a78bd3a555774c24a198689d83ced368
MD5 e7d45d2524b4002c84035aa14c64539f
BLAKE2b-256 a6d8625ea506565f76a4f6f37c88ff8d7d0f2dc4d5d5c2da021b22111457faeb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page