cross-platform · command-line · bash

The Unix IDE.
Written in 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.

mulle-sde — sh
~ $ 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 $ 

Edit → Reflect → Craft

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.

Edit

Set up the editor of your choice with one command, or just use any desktop GUI or the terminal.

$ mulle-sde edit

Reflect

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

Craft

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

What it does

MulleSDE is a way of working. Here is the functionality it puts at your disposal.

A virtualenv for C

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.

Dependencies, resolved

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.

Filesystem → build files

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.

Source from templates

Create well-formed source files from templates instead of copying stale boilerplate. New classes, headers and executables start consistent every time.

Fetch anything, anywhere

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.

Scriptable & extensible

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.

Cross-platform by design

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.

Built to last a century

Plain files, plain tools and a pure command-line interface mean a project you can still build a century from now.

A companion for AIs

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

One setup, everywhere

The point of mulle-sde is uniformity. Wherever you develop, the commands, the environment and the results are the same.

Supported platforms
Platform familyNotes
LinuxPrimary development platform
macOSNative toolchains, no Xcode project needed
BSDFreeBSD and friends
WindowsMinGW and WSL
AndroidCross-compilation targets
SunOSIllumos / Solaris lineage

Install

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.

  1. 1 Run the mulle-sde-developer installer

    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.

  2. 2 Start a project

    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.)

Learn it

MulleSDE strives to explain itself: every command has help, most have sub-help, and the workflow is documented as you go.

De Re mulle-sde

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 guide

Help & howtos

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