AI-powered chat assistant, right inside your Backstage developer portal.
Ask questions about the page you're viewing, get contextual answers, and chat with your AI agent β all through a floating chat bubble powered by your own LibreChat instance.
| Feature | Description |
|---|---|
| π¬ Floating Chat Bubble | Persistent AI chat overlay across all Backstage pages |
| π Page Context Awareness | Automatically sends the current page title, path, and URL to the agent |
| β‘ Streaming Responses | Real-time SSE streaming from the LibreChat Agents API |
| π Markdown Rendering | Full GitHub Flavored Markdown support (code blocks, tables, lists) |
| π Secure Backend Proxy | API keys stay server-side in app-config.yaml |
| π User API Key Override | Users can provide their own API key via in-chat settings |
| π Configurable Help Text | Customize the Settings API-key help text, including Markdown links, via apiKeyDescription |
| πΌοΈ Custom Bubble Icon | Replace the default chat icon with your own local image via iconPath |
| β API Key Validation | Test your API key with a single click β response appears as a chat bubble |
| βοΈ Configurable | Agent ID and base URL set centrally; users only manage their API key |
| Package | Description |
|---|---|
@nospt/backstage-plugin-librechat |
Frontend plugin β chat bubble, settings, streaming client |
@nospt/backstage-plugin-librechat-backend |
Backend plugin β proxies requests to LibreChat |
Installation and configuration instructions live in each plugin's README:
- Frontend plugin β β chat bubble, settings, streaming client
- Backend plugin β β proxies requests to LibreChat
Every message you send includes the current Backstage page context:
- Page title β e.g.,
"my-service β Backstage" - Page path β e.g.,
/catalog/default/component/my-service - Full URL β the complete URL of the page
This context is injected as a system message so the AI agent can provide relevant answers about the catalog entity, TechDocs page, or any other Backstage content you're viewing.
A small context bar below the chat header shows which page is currently being shared.
sequenceDiagram
participant User
participant Backstage
participant Frontend Plugin
participant Backend Plugin
participant LibreChat
User->>Backstage: Types message in chat bubble
Frontend Plugin->>Backstage: Captures page context (title, path, URL)
Frontend Plugin->>Backend Plugin: POST /api/librechat/chat (SSE stream)
Backend Plugin->>LibreChat: POST /api/agents/v1/chat/completions
LibreChat-->>Backend Plugin: Streamed AI response
Backend Plugin-->>Frontend Plugin: SSE chunks
Frontend Plugin-->>User: Renders Markdown response in real-time
# Install dependencies
yarn install
# Configure your LibreChat instance
# Edit app-config.yaml with your baseUrl, agentId, and optionally apiKey
# Start both frontend and backend
yarn start:dev
# Or start them separately:
yarn start # Frontend dev server (port 3000)
yarn start:backend # Backend dev server (port 7007)| Concern | How it's handled |
|---|---|
| API key storage | Default key in app-config.yaml (server-side, @visibility secret). User overrides stored in browser via Backstage Storage API |
| Backend proxy | All LibreChat requests go through the backend β API keys never exposed to the browser |
| Input validation | Messages validated for role, length, and format before proxying |
| Agent ID | Sanitized with strict alphanumeric pattern; configured server-side only |
Made with β€οΈ by NOS InovaΓ§Γ£o
