24 && $el.scrollHeight - $el.clientHeight > 150) scrolled = true; else if ($el.scrollTop < 4) scrolled = false">
# Set up Vaadin
Set up this computer for a developer who is new to Vaadin. When you finish:
1. A Vaadin starter app in `my-vaadin-app/`, inside the current folder, builds and runs.
2. You, the agent reading this, are connected to the Vaadin MCP servers (docs and add-on Directory) and have the Vaadin skills, if you support them.
3. Their IDE has the Vaadin plugin.
The official docs are the source of truth: https://vaadin.com/docs/latest/getting-started/dev-environment and https://vaadin.com/docs/latest/building-apps/agentic-development.
Start by telling the developer in two sentences what you'll do, that it takes a few minutes and may ask them to approve commands, and that nothing they have will be removed. Then work through the steps without stopping to ask, and finish with a report.
## Rules
- **Configure only yourself.** Install plugins and MCP servers into the agent you are running inside. Other agents' CLIs and configuration on this machine (`claude`, `codex`, `~/.claude`, …) are not you: don't run their plugin or MCP commands, and don't read or change their configuration.
- **Never install Java,** and never delete, downgrade or overwrite the developer's JDKs, Node, Maven settings, IDE settings or agent configuration. Ask before anything that needs `sudo` or an admin password.
- **Change your configuration with your own CLI** where you have one. In a config file, add your entry and leave the rest as it is.
- **Use your sandbox's escalation path.** This needs network access and writes to `~/.m2`, `~/.vaadin` and your configuration.
- **Run long commands in the background,** logging to a file you poll. The first build downloads several hundred megabytes.
- **Run twice, change once.** Leave what's already done; a second run must change nothing.
- **Report only what you verified,** with the command that proved it.
## 1. Java
Vaadin needs a full JDK 21 or newer. Check it as IDEs and agents see it, in a fresh login shell: `bash -lc 'java -version; javac -version; echo $JAVA_HOME'` (`zsh -lc` on zsh; on Windows, what a new PowerShell window sees). Java is ready when both report 21 or newer and `JAVA_HOME`, if set, points to that JDK.
If it isn't, stop here and change nothing. Tell the developer what you found and give one way to install Eclipse Temurin for their OS:
- **macOS with Homebrew:** `brew install --cask temurin@25`
- **SDKMAN:** `sdk install java <version>-tem` (see `sdk list java`)
- **Linux:** the distribution's package, such as `sudo apt install openjdk-21-jdk`; without admin rights, the archive from https://adoptium.net/temurin/releases/ unpacked into `~/.jdks`, with `JAVA_HOME` and `PATH` set at the top of both `~/.profile` and `~/.bashrc` (Ubuntu's `~/.bashrc` stops early for non-interactive shells)
- **Otherwise:** the installer from https://adoptium.net/temurin/releases/; on Windows, tick "Set JAVA_HOME variable"
Then ask them to open a new terminal, check `java -version` and `javac -version`, and paste this prompt again.
## 2. Vaadin MCP server and skills
Add them at user level, so they work in every project. The server is `https://mcp.vaadin.com/docs` (streamable HTTP, no authentication). The `vaadin-skills` plugin adds the server and the skills together. If it's already installed, leave it.
- **If you are Claude Code:** `claude plugin marketplace add vaadin/agent-marketplace`, then `claude plugin install vaadin-skills@vaadin-marketplace`. If `CLAUDE_CODE_EXECPATH` is set, use that binary as `claude`. Verify with `claude plugin list` and `claude mcp list`.
- **If you are Codex:** `codex plugin marketplace add vaadin/agent-marketplace --ref main`, then `codex plugin add vaadin-skills@vaadin-marketplace`. Verify with `codex plugin list --marketplace vaadin-marketplace` and `codex mcp list`.
- **Any other agent:** add the server your own documented way (see your docs, or https://vaadin.com/docs/latest/building-apps/agentic-development/mcp/supported-tools).
- **If you support neither plugins nor MCP:** change nothing, and say so in the report.
Also add the Vaadin Directory MCP server, which finds add-ons: `https://vaadin.com/directory/mcp` (streamable HTTP, no authentication), named `vaadin-directory` so it doesn't clash with `vaadin`. Claude Code: `claude mcp add --transport http vaadin-directory https://vaadin.com/directory/mcp --scope user`. Codex: `codex mcp add vaadin-directory --url https://vaadin.com/directory/mcp`. Other agents: the same way as the docs server. If it's already there, leave it.
New tools load only after a restart, so report a new server as configured, not as working.
## 3. IDE
For each installed IDE, add the Vaadin plugin if it's missing. IntelliJ IDEA: if it's closed, run its launcher with `installPlugins com.vaadin.intellij-plugin`; if it's open, ask the developer to install "Vaadin" from Settings → Plugins. VS Code: `code --install-extension vaadin.vaadin-vscode`, plus `vscjava.vscode-java-pack` if Java support is missing. Install no IDE; if there is none, recommend IntelliJ IDEA (the free edition is enough).
## 4. The app
1. If `my-vaadin-app/` doesn't exist yet, download `https://start.vaadin.com/skeleton?platformVersion=latest&javaVersion=<25 if the JDK is 25 or newer, otherwise 21>&groupId=com.example&artifactId=my-vaadin-app&frameworks=flow&ref=ai-prompt` and unzip it in the current folder. It unpacks to `my-vaadin-app/`, already a Git repository.
2. In it, run `./mvnw -B spring-boot:run` (`.\mvnw.cmd` on Windows). If port 8080 is taken, set `SERVER_PORT` to a free port. When the log says `Started Application`, request the page and expect HTTP 200. Leave it running.
If something fails, read the error, fix the cause within these rules, and try again. If a host is unreachable, tell the developer which one to ask their IT team about.
## Report
A short table: JDK, Vaadin MCP server, Directory MCP server, Vaadin skills, IDE plugin and the app, each ✅, ⚠️ or ❌ with the command that proved it. Then the next steps, as a short numbered list in plain words, leaving out what doesn't apply:
1. Open the app at its address.
2. Restart you so the Vaadin tools load, saying exactly how for you. The app stops when you restart; run it again from the IDE (open `my-vaadin-app` and run `Application`) or ask you.
3. Try a first change, such as asking you to "add a priority field to the task form".
`my-vaadin-app/` is theirs to keep or delete.