Swift Stream IDE

I'm working on a VS Code extension called Swift Stream IDE , which has been available on the official marketplace since last fall – but today, I'm finally ready to announce it.

Its main features:

  • Containerized development, so the experience is consistent across all platforms
  • A lovingly prepared development environment, ready to play with, right away
  • Expandable tooling via Features Collection , for adding powerful integrations in one click

The main goal is to make Swift development more convenient and accessible to everyone, and to challenge the idea that Swift is only for iPhone development.

These days, many developers are used to convenience – they don’t want to set up their environments manually through a bunch of commands. Sadly (but maybe realistically), even user-friendly CLI tools aren’t appealing to a large part of the developer audience anymore. I believe this IDE can bring more new developers into Swift simply because it’s easy to get started in a familiar environment – and without needing to buy a Mac. As long as your platform supports VS Code and Docker, you can start playing with Swift using a preconfigured environment in just one click.

I originally built this for myself and use it daily in my development. I believe the best products are created when their makers rely on them every day.

A bit of backstory: the name stream comes from the swift.stream domain I bought six years ago for my Discord community, where we discuss iOS, macOS, server, web, and other streams of Swift development.

The extension currently supports Server, Web, Embedded, and Pure streams.
The Android stream is actively being developed and will be available soon.

You can create a project for any stream using prebuilt templates in the Start New Project wizard. Just select a stream and click Create – the extension will generate project files in the selected folder, set up the devcontainer, and launch it. Docker images are prebuilt for each stream, and for Embedded I’ve prepared dedicated images for each board manufacturer: ESP32, Raspberry Pi, STM32, and NRF.

It’s such a relief not to worry whether my projects still compile after some time – the devcontainer environment stays stable and consistent.

When the container starts, it’s almost ready to use – all necessary packages and libraries are preinstalled. However, the Swift toolchain and SDKs are not baked into the image. Instead, a startup script checks if they already exist on shared Docker volumes. If not, it initiates a download; if yes, everything’s ready. This approach allows multiple containers to reuse the same toolchains and SDKs, saving disk space and download time. Switching between toolchains is fast and efficient, too.

Once the container is running and the toolchain is ready, you can begin development. And yes, the official Swift VS Code extension is preinstalled and preconfigured via devcontainer.json

Why call it an IDE? Because it's a true Integrated Development Environment on two levels:

  1. The container itself, with all required dependencies, libraries, files, and extensions
  2. A rich, user-friendly interface and keybindings – like a purpose-built IDE

On the left side of VS Code, you’ll find the Swift logo. Clicking it opens the extension’s UI panel, which offers many useful actions: select target, build, run, test, toggle hot rebuild, build release binaries (glibc/musl), clear caches, restart LSP, choose toolchain, change ports (for server and web), flash the firmware, manage devcontainer settings like SSH agent, volume mounts, local terminal, and more. There’s also a Support section with links to Swift Forums, documentation, Discord chats, and related repositories.

One of my favorite parts is the Features Collection – it’s like having extensions for the IDE itself. For example, the Server Stream currently supports a few features (with more on the way) like:

  • Nginx — test your server behind a local Nginx config
  • Ngrok — expose your server to the internet for testing, including OAuth flows
  • Fly.io — one-click deployment to production

Support for Heroku, Vercel, Azure, and other cloud platforms is also in the pipeline — the code is already drafted.

The Web Stream, for example, includes a Firebase feature that lets you deploy a WebAssembly-based Swift app in one click. More one-click deployment features are coming.

Feel free to suggest new ideas for the Features Collection!
Currently, there’s only one type of feature: it installs a CLI tool via devcontainer.json and adds a convenient UI around it. But there’s also potential to implement various local features that could perform useful tasks within the project. For example, one idea is a feature that automatically tracks Swift files in an embedded project using the CMake build system, so you wouldn’t need to manually edit CMakeLists.txt

Each stream is like its own world, with its own UI, functions, and features – for example, the Web stream compiles not just Swift but also JS/TS and SCSS and compressing wasm files , the Embedded stream supports not only SwiftPM but also CMake, Makefile, and Shell scripts as build systems, and the Android stream builds for multiple targets in release mode, etc.

The Embedded Stream... ah, this one is my favorite! There’s something magical about writing Swift code and seeing it run on real hardware. You can literally touch and test what you’ve just built. For it I took official embedded Swift examples, prepared container environments for them, and made sure they compile. This stream is currently in preview mode. in Start New Project wizard I’ve labeled which projects compile successfully, which need verification, and which don’t work yet and could use some help. I'm still working on adding more conveniences for each embedded target. For now, build and flash commands are already here – and more is coming.

Some of the embedded projects currently lack proper syntax highlighting – I’m investigating how to enable it and would appreciate any help. The NRF project downloads idk about 50 toolchains on the first launch; I’m also exploring whether it’s possible to configure the manifest to fetch only the required ones, or how to properly cache them on a docker volume.

The Android Stream is the most desired one for me. I previously worked on a dedicated VS Code extension for Android development based on vgorloff ’s toolchain — many thanks to him for that work. Unfortunately, I had to pause development when the toolchain was no longer maintained.
But now, thanks to the amazing new SDK from finagolfin , I’ve started reviving my earlier codebase and integrating it into Swift Stream IDE .
The Android stream will be available soon, initially labeled as a preview.

The project is free and open source, licensed under MIT.
I’d love to hear your feedback – it would really help me polish things faster and better.

29 Likes

Didn't see a link. Is this the repo? GitHub - swiftstream/IDE: ⌨️ Powerful Swift IDE for VS Code. Create, manage, and deploy: web, server, embedded, and android applications.

1 Like

Yeah thank you, it is the correct link. I just wasn’t sure if I could post it here.

Here’s also the link to the marketplace Swift Stream IDE - Visual Studio Marketplace

2 Likes

I'm checking it out now. My only initial "gripe" is that the Swift Stream IDE seems to think I want to use the Verdana font by default:

"editor.fontFamily": "Verdana, Verdana, Menlo, Monaco, 'Courier New', monospace",
"editor.codeLensFontFamily": "Verdana, Verdana, Menlo, Monaco, 'Courier New', monospace"

I can imagine you want to provide a certain look and feel- but maybe consider leaving the font alone for the devcontainers?

Yeah, good point, I'll make it optional in the Start New Project wizard. Thanks for the heads up!

2 Likes