December 12, 2007 - Updated the list of implemented applications, put up a todo list and infrastructure documentation. Expect another release towards the end of the month.

June 18, 2007 - Put out toybox-0.0.3.tar.bz2 since it's been too long since I did something like that. This one implements catv, count, df, echo, false, oneit, pwd, sleep, sync, toysh, true, which, and yes (which is what "make defconfig" enables). There are several other commands not enabled by defconfig, because they don't really work yet.

Most of the general infrastructure's there now, although lots of tweaking and optimizing is still needed. The test suite is skeletal and not entirely checked in yet, but I'm working on that.

I don't have nearly as much time to work on this as I'd like, but I'm making a little progress.

January 31, 2007 - Screwing up the web page a bit, adding an index bar along the side which doesn't properly connect up to anything yet. (Busy implementing mke2fs and gene2fs.)

Warning: lots of this page is about what I plan to do, not what I've already done. See my development blog, or browse the mercurial archive.

What is ToyBox?

The goal of the Toybox project is to create simple implementations of all the important Linux command line utilities. These implementations should be small (the entire project should total less than a megabyte, uncompressed), fast, simple, and correctly implemented (which is related to standards compliance, but isn't quite the same thing). Click for more about the design goals

Toybox has configurable levels of functionality, and should scale from tiny embedded systems up to full general purpose desktop and development environments. The author plans to run it on his laptop, and the Firmware Linux project is trying to get a complete Linux system to rebuild itself from source code using toybox.

Toybox is Licensed under GPL version 2.

Toybox can be built as a single "swiss army knife" executable (ala BusyBox or Red Hat's Nash), or each command can be built as a traditional independent executable.

Which commands are planned?

Relevant Standards

Most commands are implemented according to The Single Unix Specification version 3. This does not mean that Toybox is implementing every SUSv3 utility: some such as SCCS and ed are obsolete, while others such as c99 are outside the scope of the project. Toybox also isn't implementing full internationalization support: it should be 8-bit clean and handle UTF-8, but otherwise we leave this to X11 and higher layers. And some things (like $CDPATH support in "cd") await a good explanation of why to bother with them.

The other major sources of commands are the Linux man pages, and testing the behavior of existing commands (although not generally looking at their source code).

What commands are implemented?

The following commands are currently implemented: basename, catv, chroot, count, df, dirname, dmesg, echo, false, hello, mkfifo, oneit, pwd, sha1sum, sleep, sync, true, tty, which, yes.

The following commands are partly implemented, in a somewhat usable but not necessarily complete state: bzcat/bunzip2, help, mke2fs, netcat/nc, sh/toysh, mdev, touch, readlink.

The following are partially implemented commands that don't actually do anything yet: mke2fs, md5sum.

For more information, see the todo list.

Command Shell

The Toybox Shell (toysh) aims to be a reasonable bash replacement. It implements the "sh" and "toysh" commands, plus the built-in commands "cd" and "exit". This is the largest single sub-project in toybox.

The following additional commands may be built into the shell (but not as separate executables): cd, exit, if, while, for, function, fg, bg, jobs, source, alias, export, set, unset, read, trap, and exec. (Note: not done yet.)

Download

This project is maintained as a mercurial archive. To get a copy of the current development version, either use mercurial (hg clone http://landley.net/toybox) or click on one of the zip/gz/bz2 links at the top of the mercurial archive browser page to get an archive of the appropriate version. Click tags to the tagged release versions ("tip" is the current development version).

My development log is currently the best way to track what's going on with this project. There's also a mailing list for toybox development.