A web-based ABAP development environment with Monaco editor, AI-assisted coding, and direct SAP system integration.
ABAPer Editor is a browser-based IDE for SAP ABAP development. It provides a VS Code-like editing experience powered by Monaco Editor, with built-in features for ABAP syntax highlighting, client-side linting via abaplint, and AI-powered code assistance through the Convo AI (CAI) platform.
Live: abaper.bluefunda.com
- Monaco Editor with ABAP syntax highlighting and IntelliSense
- Client-side linting via abaplint (runs entirely in the browser)
- SAP system integration — connect to SAP via ADT to read, create, save, and activate objects
- AI Assistant — chat with an LLM that has MCP tools for ABAP operations (code review, create objects, run tests, S/4HANA analysis)
- Multi-system support — connect to different SAP systems via per-request credentials
- Package explorer — browse SAP packages and objects in a tree view
- Object activation — activate ABAP objects directly from the editor
- Syntax checking — real-time syntax validation against the SAP system
- Code formatting — SAP pretty printer integration
- Unit test runner — execute ABAP unit tests from the editor
- Transport management — view and create transport requests
- GitHub integration — browse and import ABAP code from GitHub repositories
Browser (SPA)
├── Monaco Editor (ABAP syntax)
├── abaplint (client-side linting)
├── Keycloak auth (multi-realm)
└── REST API calls
│
├── /abaper/* → abaper-gw (KrakenD) → abaper-ts (ADT proxy)
└── /ai/* → ai-gw (KrakenD) → CAI platform → abaper-mcp
| Service | Role |
|---|---|
| abaper-gw | API gateway (KrakenD) — JWT validation, routing |
| abaper-ts | ADT proxy — translates REST calls to SAP ADT |
| abaper-mcp | MCP server — AI tool execution for ABAP operations |
| ai-gw / CAI | AI gateway — routes chat requests to LLM with MCP tools |
- React 18 + TypeScript
- Vite — build tool
- Monaco Editor (
@monaco-editor/react) - Tailwind CSS v4 — styling
- Zustand — state management
- Keycloak JS — authentication
- abaplint (
@abaplint/core) — client-side ABAP linting - Playwright — E2E testing
- react-markdown + react-syntax-highlighter — AI response rendering
- Node.js 20+
- npm
# Install dependencies
npm install
# Start dev server (no auth mode)
NOAUTH=1 npm run devThe dev server starts on http://localhost:5173 with hot module replacement.
| Variable | Description | Default |
|---|---|---|
NOAUTH |
Disable Keycloak authentication | false |
VITE_KEYCLOAK_URL |
Keycloak server URL | https://auth.bluefunda.com |
VITE_KEYCLOAK_REALM |
Keycloak realm | trm |
VITE_KEYCLOAK_CLIENT_ID |
Keycloak client ID | abaper-editor |
VITE_GITHUB_CLIENT_ID |
GitHub OAuth client ID | — |
In development, Vite proxies API requests:
/abaper/*→http://localhost:8083(abaper-gw) orhttp://localhost:8087(direct to abaper-ts)/ai/*→http://localhost:8081(ai-gw / CAI gateway)
npm run build # TypeScript check + Vite buildOutput goes to dist/ for static hosting.
npx playwright test # Run E2E tests
npx playwright test --ui # Interactive test runnerDocker image: bdadevops/abaper-editor:latest
The Docker build uses a multi-stage approach:
- Node.js build stage —
npm ci && npm run build - Nginx stage — serves the static SPA with proper routing
CI/CD via GitHub Actions builds and pushes to Docker Hub on merge to main. Watchtower on the frontend node auto-pulls new images.
src/
├── components/
│ ├── common/ # Shared UI components
│ ├── layout/ # MenuBar, Sidebar, StatusBar
│ └── panels/ # AIPanel, ExplorerPanel, ProblemsPanel
├── hooks/ # React hooks (useABAPEditor, useAIAssistant, useAbaplint, useSAPConnection)
├── services/ # API clients (api.ts, auth.ts, cai.ts, mcp.ts)
├── stores/ # Zustand stores (editorStore, aiStore, settingsStore)
├── types/ # TypeScript type definitions
├── App.tsx # Main application component
└── main.tsx # Entry point
Private — BlueFunda BV