This repository accompanies the PLDI 2026 tutorial: Implementing an Integrated Development Environment: a Quick Start Guide for PL Researchers.
This tutorial demonstrates practical techniques for rapidly prototyping integrated development environments (IDEs) for domain-specific and research programming languages. We present two complementary, production-ready approaches:
- Text-based IDE with Language Server Protocol (LSP): Implemented using Visual Studio Code and Eclipse Langium, this approach leverages traditional grammar-based parsing and standard IDE features.
- Projectional Editor: Implemented using JetBrains Meta Programming System (MPS), this parser-less approach guarantees structural correctness and supports both textual and non-textual notations.
Throughout the tutorial, we implement foundational IDE features including cross-reference resolution, autocompletion, semantic validation, type checking, and quick fixes. The two parts are independent and can be studied separately.
This repository provides two workflows:
tutorial-start— Starter project for live coding during the tutorial. Includes partial implementations to guide the coding session.main— Complete, fully functional implementation of both IDEs. Use this branch to explore the final system.
For the text-based IDE (Langium/VS Code):
- Node.js v20.0 or higher (tested with v23.10.0)
- npm v10.0 or higher (tested with v10.9.2)
- A recent version of VS Code (tested with 1.123.0)
- Download Node.js
- Download VS Code
For the projectional editor (MPS):
- JetBrains MPS 2025.3
- Download MPS
- textual/ — Text-based IDE implementation using Langium and VS Code
- projectional/ — Projectional IDE implementation using JetBrains MPS
- resources/ — Language specification and documentation
- grammar.pdf — Grammar for the textual IDE
- concepts.pdf — Language concepts for the projectional IDE
- rules.pdf — Language rules and typing
Both implementations use a subset of BEAN, a research programming language with a type system for linear and discrete types.
Refer to the README files in each subdirectory for implementation-specific details: