Zsh Ultimate Programmer's Extensions Refurbished

Jaromil d8e9350523 remove -regex-match for =~ as zsh ditched the former 2 years ago
.gitignore 5da7c7bb47 first refurbishing of Zuper 0.1 4 years ago
COPYING.txt 5da7c7bb47 first refurbishing of Zuper 0.1 4 years ago
Makefile 4fed4af700 bump version and add simple makefile 3 years ago
README.md 5464a0f9d5 refactoring 3 years ago
zuper d8e9350523 remove -regex-match for =~ as zsh ditched the former 2 years ago
zuper.init d59b4d64cb improved option parser with __empty and __unknown 3 years ago


 _  _  _  _  _
          _(_)_         _   _  _  _  _    _  _  _  _  _       _  _
        _(_) (_)       (_) (_)(_)(_)(_)_ (_)(_)(_)(_)(_)_  _ (_)(_)
      _(_)   (_)       (_) (_)        (_(_) _  _  _ (_)(_)(_)
    _(_)     (_)       (_) (_)        (_(_)(_)(_)(_)(_)(_)
 _ (_) _  _  (_)_  _  _(_)_(_) _  _  _(_(_)_  _  _  _  (_)
(_)(_)(_)(_)(_)(_)(_)(_) (_(_)(_)(_)(_)   (_)(_)(_)(_) (_)

Zsh Ultimate Programmer's Extensions Refurbished


Zuper is a minimalist library of extensions for Zsh programming, because believe it or not Zsh is so slick and powerful that it can be used as a programming language.


  • key/value store on files mapped to associative arrays
  • consul k/v integration using native get/set over ztcp
  • nifty messaging using colors and intl support (gettext)
  • procedural flow debugging functions and variable monitor
  • clean exit and destructors registration
  • improved temp file handling
  • more to come...


Zuper requires the following programs to be installed:

zsh curl sed awk hexdump


Documentation is still lacking, however to use Zuper in Zsh scripts one must first source its main library zuper, then declare global variables and arrays, then source zuper.init and at the end of the program call endgame for a clean exit. Example test program:

#!/usr/bin/env zsh

# switch on debugging output

# switch logging into test.log

##### INIT
# load our zuper library
source zuper
# declare a custom global variable
# assign a default value to our global variable
# declare a global associative map
# conclude the init phase
source zuper.init

# register the zdump debug function to be executed on exit

# declare a custom function to print it out
testfun() {
    # register the function in the debug flow
    fn "testfun"
    # print out with nice green colors
    notice "Custom var: $myvar"
    # create a tempfile
    ztmp && mytmp=$ztmpfile
    # put the value into the tempfile
    print $myvar >> $mytmp
    # print out the path to the tempfile
    act "Temp file: $mytmp"
    # print out the contents of the tempfile
    act "Content: `cat $mytmp`"
    # the tempfile will be deleted in endgame()
    # but can also be delete earlier here, optionally

# call our custom function

# we use words and their md5
    lorem f737a087bca81f69a6048ec744c73e41
    ipsum 02063b9bf9d6e15ad61226fa4584aae0
    dolor 5f20730ddc7a1fedbf265358f0ce4f26

# save the map into a file
zkv.save mymap test.map

# free the map

# re-declare the map
typeset -A mymap
# re-load saved contents
zkv.load test.map
# dump contents
for i in ${(k)mymap}; do
    print "$i \t ${mymap[$i]}"

# end of the program (will call destructors)


Here we reference applications where zuper is used succesfully:

If you use it, let us know! http://dyne.org/contact


Zuper is designed, developed and maintained by Denis Roio jaromil@dyne.org

Zuper is Copyright (C) 2015 by the Dyne.org foundation

This source code is free software; you can redistribute it and/or modify it under the terms of the GNU Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This source code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please refer to the GNU Public License for more details.

You should have received a copy of the GNU Public License along with this source code; if not, write to: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.