S{cripting,ystem,tack} Management (SM) Framework (Core)
Shell Perl Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin If run as root, link sm to /bin/sm. Jan 15, 2014
core Ensuring the specified branch is what is cloned and checked out. Apr 1, 2016
.gitmodules Finished move of bdsm- to sm- for extension sets. Aug 19, 2011
.travis.yml use the new tf env-array matching Aug 9, 2012
LICENSE Apache 2.0 => MIT License. Jan 11, 2014
LICENSE.gplv3 Added bdsm-ll (GNU Parallel) License notice and file. Jul 29, 2011
README.md Updated manual url in Readme May 18, 2014
local use zsh from PATH in local Dec 18, 2011


S{cripting,ystem,tack} Management (SM) Framework (Core)

SM is a system scripting & management framework together with a domain specific language API (DSL) for managing software, systems and stacks!


SM delivers an extensible scripting framework providing a very robust DSL API. A primary tenet of SM is that it must handle as much pain as possible, so you don't have to! With SM's DSL APIs, you can quickly create your own high-quality extensions, and expose their commands through SM's command line interface (CLI).


SM itself is a scripting framework that enables very rich DSL commands known as 'apis'. SM lets you use the DSL APIs to painlessly write powerful 'extensions', which are essentially named sets of scripts (directories!). With SM, you'll find you can install and manage a multitude of extensions - and even entire sets of extensions - providing unprecedented levels of control and automation productivity that are unleashed by the creative abilities of SM's energetic community of extension authors :)


The easiest way to install is to use following oneliner:

curl -L https://get.smf.sh | sh


The manual may be downloaded as a PDF. Keep in mind that it is a work in progress. Suggestions on improving the manual are most welcome.

The latest version of the manual is kept at the following url:


Anytime updates are made to the manual a new version is pushed to that url.

Creating Extensions

There are only a few requirements when creating your own SM extensions. The extension must live in a dedicated directory. Within this directory are (at least) the subdirectory bin/, containing at least one executable file called 'help'.

Additionally, in the root of the extension directory you must include a text file called VERSION, with a version number that follows semantic versioning convention (http://semver.org/); that is, in the format of X.Y.Z, where X,Y and Z are positive integers.

An extension must also have a README file, in which you should explain your extension's primary purpose, and any special considerations to be kept in mind when using it.

The contents of the bin directory can be any executable file. This means, for example, that C-compiled binaries, Ruby Scripts, python, lua, etc... may all be used according to your requirements and preferences.

Of course, the extensions I write are generally in bash; but you can bring your own implements of choice to the SM party ;)

Additionally, if you write your extensions in bash, a nice DSL is automatically loaded for you. You can read more about the DSL in the online documentation.


Wayne E. Seguin


Development repositories are found on the SM GitHub organization page: https://github.com/sm/ In the spirit of free software, everyone is encouraged to help improve this project.

Ways that you may contribute to the project are by:

  • using the latest development and release versions
  • reporting bugs in #smf.sh on irc.freenode.net
  • suggesting new features in #smf.sh on irc.freenode.net
  • writing or editing documentation, which is greatly appreciated
  • translating documentation to a new language, I speek tech and poor engrish
  • writing extensions
  • writing code (no patch is too small: fix typos, add comments, clean up inconsistent whitespace)
  • performing code reviews and assisting with refactoring
  • resolving issues
  • reviewing patches
  • donating, xoxo!


All SM Core scripts and extensions themselves are are licensed under the Apache License v2.0

Copyright (c) 2009-2011 Wayne E. Seguin

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at


Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

License Exceptions:

bin/sm-ll, bin/sm-sql, bin/sm-sem are all part of the GNU Parallel project and are licensed under the GNU GPL v3 which can be read at either LICENSE.gpl3 or on the web at http://www.gnu.org/licenses/gpl.html