Basic rules

  • A package consists of an archive
  • There is one root directory named exactly like the package
  • A file called "package.4th" is in the root directory, its syntax is explained below



  • forth-package start the definition of a package, should be in the first line
  • key-value <name> <value ...> set the value of name to the remaining content of the line
  • key-list <list> <value ...> create or append <value> to the <list>

Mandatory keys

  • name name of the package starting with a letter, and consisting of letters, numbers or minus
    or more concise:[a-z]+[-a-z0-9]*
  • version version number consisting of 3 decimal numbers separated by '.'
    Once a library has been publish, it MUST obey the following versioning scheme (subset from SemVer 2.0):
    Given a version number MAJOR.MINOR.PATCH, increment the:
    MAJOR version when you make incompatible API changes,
    MINOR version when you add functionality in a backwards-compatible manner, and
    PATCH version when you make backwards-compatible bug fixes.
    Additional labels for pre-release and build meta data are not available for reasons of simplicity.
  • license name of the license you publish the system with, i.e. "GPL", "GPLv3", "MIT", ...
    use "CUSTOM" and provide a LICENSE file if you have a custom license.

Optional keys

  • description a brief summary of what your package does
  • main the main file to include, otherwise "index.4th" will be assumed

Optional lists

  • tags a few tags to categorize your package, try to match existing tags
  • dependencies package-name package-version pairs of packages required by your package

Example package.4th

    key-value name my-package
    key-value version 0.1.0
    key-value description A brief summary of what your package does
    key-value license GPL
    key-list tags GPL
    key-list tags Some-other-tag
    key-list dependencies stringstack 1.0.3
    key-list dependencies some-other-package 0.1.x