Edit
Set up the editor of your choice with one command, or just use any desktop GUI or the terminal.
$ mulle-sde edit
cross-platform · command-line · bash
mulle-sde is a command-line IDE and dependency manager built for C and Objective-C development (C++ very likely works too). Think npm or virtualenv for C languages: one uniform setup that gets you going in seconds, with a project that still builds next year — and the century after.
~ $ mkdir myproject && cd myproject
~/myproject $ mulle-sde init
# pick a project type, get a working environment
~/myproject $ mulle-sde craft
# fetch, build and install dependencies, then the project
~/myproject $ mulle-sde run
Hello, world!
~/myproject $
One simple principle runs through everything. You work with files the way you always have; mulle-sde keeps the build machinery in step and does the heavy lifting of fetching and building dependencies.
Set up the editor of your choice with one command, or just use any desktop GUI or the terminal.
$ mulle-sde edit
Changes in the filesystem are picked up and turned into build system files and headers. Add, move or rename a source file, then reflect — the build files update themselves.
$ mulle-sde reflect
Fetch dependencies, build them and install them local to your project. Then build the project itself. Everything reproducible, everything in one tree.
$ mulle-sde craft
MulleSDE is a way of working. Here is the functionality it puts at your disposal.
Every project gets its own isolated, per-project environment: settings, paths and dependencies live with the project instead of polluting your machine. Separate projects stop fighting over versions.
Fetch archives and git repositories — recursively — build them and install them locally or wherever you choose. Build instructions for third-party projects are loaded from GitHub, so recipes travel with the ecosystem.
Your directory structure is the project. mulle-sde transforms it into the files your build system wants, and speaks to many of them — CMake, make, meson, autoconf and more — and parallelizes the build.
Create well-formed source files from templates instead of copying stale boilerplate. New classes, headers and executables start consistent every time.
Remote files and repositories can be pulled down and placed anywhere in your project tree — vendoring, generated assets or external sources, all tracked by the project.
Extensions add languages and build tools, callbacks hook into reflection. It is bash all the way down, so you can read it, change it and automate it without a build step of its own.
The same setup and the same workflow whether you are on Linux, macOS, a BSD, SunOS, Android or Windows. Keep the dependency isolation of Docker without the container overhead.
Plain files, plain tools and a pure command-line interface mean a project you can still build a century from now.
Self-explanatory by design: help texts, howtos and file comments
describe the workflow, and the filesystem-driven model is
deterministic. It complements AI harnesses like
opencode:
mulle-sde api surfaces dependency documentation and
mulle-sde code searches their source.
$ mulle-sde api
$ mulle-sde code
The point of mulle-sde is uniformity. Wherever you develop, the commands, the environment and the results are the same.
| Platform family | Notes |
|---|---|
| Linux | Primary development platform |
| macOS | Native toolchains, no Xcode project needed |
| BSD | FreeBSD and friends |
| Windows | MinGW and WSL |
| Android | Cross-compilation targets |
| SunOS | Illumos / Solaris lineage |
The recommended route is to install from the proper developer environment,
mulle-sde-developer.
Its README will list the prerequisites per platform — compiler tools,
git, curl, cmake and
sudo — so check those first if you are unsure what is
already installed.
installer-all fetches the required commands and
installs mulle-sde-developer
together with the whole mulle-sde toolchain. It installs into
/usr/local by default:
$ curl -L -O 'https://raw.githubusercontent.com/mulle-sde/mulle-sde/master/bin/installer-all' \
&& chmod 755 installer-all \
&& sudo SDE_PROJECTS="mulle-sde-developer;latest" ./installer-all /usr/local
Without sudo, install under your home instead
with ./installer-all ~ no, then make sure
${HOME}/bin is on your PATH.
Create a project, pick a type at the prompt, and craft it:
$ mkdir myproject && cd myproject
$ mulle-sde init
$ mulle-sde craft
Building without mulle-sde.
A mulle-sde project is still a normal CMake project, so you can build it
directly with cmake — mulle-sde mostly orchestrates the build
systems for you. What you lose is dependency management: without
mulle-sde you must provide the project's dependencies yourself. (The
mulle-core
amalgamation is the exception — it bundles its constituents, so it needs
nothing extra.)
MulleSDE strives to explain itself: every command has help, most have sub-help, and the workflow is documented as you go.
A short introductory guide that gives a good overview of the whole system, including how to use mulle-sde in an existing Makefile project with minimal friction.
Read the built-in topics without leaving the terminal. e.g. learn why a test directory is an isolated mulle-sde project:
$ mulle-sde help
$ mulle-sde howto testing