Show HN: I rewrite my game while it is still running JdBasic, a modern BASIC interpreter built around a custom bytecode virtual machine, now runs as an MCP server, enabling AI pair coding with Claude to live-patch a running game without restarting. In a 73-second video, pressing F6 pauses the VM, and commands like 'Turn the ship red and give me 100 lives' are executed via jdb_eval, while source edits trigger jdb_recompile to recompile and resume at the correct opcode. The tool, created by AtomiJD, supports hot-reloadable code, APL-style array programming, and integrations with Godot, local LLMs, and ONNX models. jdBasic can run as an MCP server. The video shows AI pair coding with Claude: while my mini shooter is running I press F6, the VM pauses, and whatever I ask Claude to change goes through the jdBasic MCP server straight into the running interpreter. - "Turn the ship red and give me 100 lives" - Claude changes two variables with jdb eval : g palette{"player"} = 255, 80, 80 : lives = 100 - "Move the shield bar 20 pixels up" - that needs a source edit and a recompile. jdb recompile compiles the code and puts the program pointer back on the right opcode. Claude resumes, everything is still at the same position with the same values, only the rendering loop now draws with the changed SUB. I built jdBasic because I missed the easiness of VB6: pause a running program, edit the code and the form, carry on. jdBasic was always meant to be a dirty little language that still does this. Using AI to code needed an MCP server inside jdBasic. Inside the game it is one small IMPORT for the MCP handling and one line in the rendering loop. Video, 73 seconds https://youtu.be/s-BRaSy1EQo · My blog post https://www.atomijd.onl/blog-post-19.html · MCP setup and tool reference https://jdbasic.org/ai-pair-coding/ · Windows zip with the shooter, nothing to install https://github.com/AtomiJD/jdBasic/releases/latest jdBasic is a modern BASIC interpreter built around a custom bytecode virtual machine with APL-style array programming, hot-reloadable code, a persistent REPL workspace, and first-class graphics, GUI, audio, networking, AI, and Godot-engine integration. It combines the immediacy of classic BASIC with powerful built-in capabilities and a "stay in the session" philosophy - no constant restarts, no rebuild loops, just think and run . Reduce friction between thinking and running code. A match-3 game, a Godot RPG whose NPCs think with a local LLM, and the VS Code form designer - all scripted in jdBasic. 🎥 Train jdBasic is on YouTube - 14 video lessons covering everything from PRINT to native compilation, all auto-generated and voiced by jdBasic itself. Watch the playlist → https://www.youtube.com/playlist?list=PLowaSH4O3MGq-veO7qSIp-9EntEjY iPZ You can: - explore ideas in a powerful interactive REPL - save and restore entire sessions with SAVEWS / LOADWS - write vectorized data pipelines using APL-inspired array operators - prototype graphics, games, and tools with SDL3 + Dear ImGui - embed in Godot 4 and script whole 3D games, tools, and visualizers in pure BASIC - talk to local LLMs llama.cpp and run ONNX models inline - pair-program with an AI agent: the built-in MCP server exposes a persistent VM that Claude Code, Cursor & Co. can run, inspect, and live-patch without restarting your program - build automation tools, REST clients, and serial-device controllers - extend the language with native modules jdbasic.org/live https://jdbasic.org/live/index.html - no installation required. The Train jdBasic YouTube series walks through the language from "Hello, World" to native compilation - 14 episodes, 5–10 minutes each, with auto-generated chapters and code-on-screen as it happens. | | Lesson | Topic | |---|---|---| | 01 | Hello jdBasic https://youtu.be/4qvPFoqxPHE | PRINT, DIM, basic types | | 02 | If and For https://youtu.be/RTI-f9cHldI | IF/ELSE, FOR/NEXT, FizzBuzz | | 03 | Arrays https://youtu.be/V33CGCt1zB8 | Vector ops, broadcasting, reductions | | 04 | Strings https://youtu.be/NUhdrMU9T9c | Slice, search, SPLIT | | 05 | Functions and SUBs https://youtu.be/ 4Q7qR1sA3Q | FUNC, SUB, recursion | | 06 | Maps https://youtu.be/vp0tCYa6 A | Key-value data | | 07 | INPUT and DO Loops https://youtu.be/1Sd7jCzY8Zc | User-driven programs | | 08 | File I/O https://youtu.be/gbFvgqIYNMM | TXTWRITER, TXTREADER$ | | 09 | Graphics https://youtu.be/qtBCNaVaRLA | SCREEN, shapes, colours | | 10 | Modules https://youtu.be/fg0ib3SgGio | EXPORT, IMPORT, code reuse | | 11 | REPL Workflow https://youtu.be/Noa4mqwEZ5w | PRETTY, LINT, SAVEWS | | 12 | Higher-Order Functions https://youtu.be/WPpzO0tHJNE | SELECT, FILTER, REDUCE, lambdas | | 13 | HTTP and JSON https://youtu.be/ecq8uZHAV7U | Talk to the web | | 14 | Native Compilation https://youtu.be/4DlthnUo56w | Compile to .exe with jdbasic -c | The entire production pipeline - voice synthesis, screen recording, FFmpeg compositing, even the YouTube uploads - is itself a jdBasic program. See jdb/tv/ /AtomiJD/jdBasic/blob/main/jdb/tv if you want to fork the rig. This is the v2 rewrite . Compared to the original tree-walking interpreter, jdBasic now ships with: - A bytecode compiler + virtual machine with inline caches, opcode fusion, and a fast intrusive‑refcount value type - APL-style vectorization - SIN , COS , + , , scatter/gather, IOTA , REDUCE , SCAN , FILTER , SELECT all operate over arrays in a single op - Eigen-backed linear algebra & DSP - SVD , QR , DET , EIG , and FFT / IFFT as first-class array builtins - SDL3 graphics with letterboxed logical presentation, TOGGLE FULLSCREEN , and a streaming-texture batch plotter GFX.PLOT POINTS TEX that can push 70k coloured pixels per frame at 30+ FPS from pure BASIC - Dear ImGui integration for instant-mode tools and debuggers - Godot 4 embed GDExtension - run jdBasic inside Godot: .jdb files become engine scripts and the GDX. suite reaches the whole engine nodes, physics, 3D meshes, audio, signals , with an in-editor debugger and Inspector-exposed variables - see embed/godot/ /AtomiJD/jdBasic/blob/main/embed/godot - Music sequencer - a tracker-style SOUND. engine patterns, voices, effects with a device-less SOUND DSP pull mode for embedding - see doc/SequencerHelp.md /AtomiJD/jdBasic/blob/main/doc/SequencerHelp.md - llama.cpp for local LLM inference CPU + optional CUDA - ONNX Runtime for classical ML inference - HTTP/HTTPS client OpenSSL , COM automation Windows , Serial I/O for embedded - Reactive variables - operator with automatic dependency propagation - Hot reload of source files without losing the workspace - DAP debug adapter so you can step through BASIC code from VS Code - A persistent REPL workspace that survives restarts via SAVEWS / LOADWS - Microcontroller ports - the same interpreter on an RP2350 or an ESP32-S3, with a REPL and a flash store on the board; on the 2.8 inch ES3C28P it boots into its own prompt on the panel, with touch, sound, a microphone and a card slot - see embedded/ /AtomiJD/jdBasic/blob/main/embedded - An MCP server jdbasic --mcp that exposes the persistent VM to LLM agents like Claude Code, Cursor, or Cline - see doc/MCP.md /AtomiJD/jdBasic/blob/main/doc/MCP.md The original v1 codebase is preserved on the legacy-v1 https://github.com/AtomiJD/jdBasic/tree/legacy-v1 branch and the v1-legacy https://github.com/AtomiJD/jdBasic/tree/v1-legacy tag for archival and bugfixes. DIM BaseValue AS INTEGER = 10 DIM Multiplier AS INTEGER = 5 DIM Result AS REACT INTEGER Result - BaseValue Multiplier PRINT Result ' 50 Multiplier = 10 PRINT Result ' 100 - updated automatically ' Generate 10 numbers, keep 5, multiply by 10 result = IOTA 10 | FILTER LAMBDA x - x 5, ? | SELECT LAMBDA v - v 10, ? PRINT result ' 60 70 80 90 100 ' All trig is vectorized - one call processes the whole array DIM angles = IOTA 360 PI / 180 DIM sines = SIN angles DIM cosines = COS angles SCREEN 800, 600, "My Tool" DIM BgColor 4 = 0.2, 0.3, 0.3, 1.0 DO CLS IF GUI.BEGIN "Control Panel", 50, 50, 300, 200 THEN GUI.TEXT "Welcome to jdBasic GUI" GUI.SEPARATOR IF GUI.BUTTON "Click Me" THEN PRINT "Clicked at " + TIME$ ENDIF GUI.COLOR "Background", BgColor ENDIF GUI.END SCREENFLIP SLEEP 16 LOOP UNTIL INKEY$ = "q" On Windows, the FORMS build flag adds a full retained-mode toolbox of real Win32 controls : buttons, text boxes, list/tree/list-view, tabs, sliders, date pickers, menus with accelerators, toolbars, status bars, MDI child windows and the classic common dialogs. Events bind by name convention, a one-parameter SUB