Directory Layout
Every package follows a predictable directory layout. The exact contents depend on the package type.
Executables
An Executable package builds from Src/Main.rux, which defines Main():
App/
├── Rux.toml # Package manifest
├── Src/ # Source files
│ ├── Main.rux # Contains the Main entry point
│ └── ... # Other folders or source files
├── Bin/ # Created by the compiler
│ ├── Debug/ # Debug build output
│ └── Release/ # Release build output
├── Temp/ # Intermediate build files
├── README.md # Brief Markdown description
├── LICENSE.md # License of the package
└── .gitignore # Excludes /Bin and /Temp from the repository
Bin/ and Temp/ are generated by the toolchain and should be listed in .gitignore. The root may also hold other directories such as Art, Docs, Icons, or Images.
README.md and LICENSE.md are the conventional targets of the manifest's ReadmeFile and LicenseFile fields, which is what makes them show up on the package's registry page.
Native libraries
SharedLibrary and StaticLibrary packages use the same layout without an entry point. Scaffolding creates Src/Lib.rux:
Math/
├── Rux.toml # Package manifest
├── Src/ # Source files
│ ├── Lib.rux # Library declarations and public symbols
│ └── ... # Other folders or source files
├── Bin/ # Created by the compiler
│ ├── Debug/ # Debug build output
│ └── Release/ # Release build output
├── Temp/ # Intermediate build files
├── README.md # Brief Markdown description
├── LICENSE.md # License of the package
└── .gitignore # Excludes /Bin and /Temp from the repository
The output filename follows the platform conventions listed under Package Types.
Source libraries
SourceLibrary packages cannot be built directly. They are compiled into other projects as dependencies, so they have no Bin/ output:
Core/
├── Rux.toml # Package manifest
├── Src/ # Source files
│ ├── Lib.rux # Source-library declarations
│ └── ... # Other folders or source files
├── README.md # Brief Markdown description
├── LICENSE.md # License of the package
└── .gitignore # Excludes some items if necessary
Yanking
Yanking withdraws a published version from new dependency resolution while leaving it available to builds that already depend on it. It is the way to retire a release that turned out to be broken, insecure, or published by mistake.
Package Manifest
Every Rux package is described by a Rux.toml file at its root. It carries the package's identity, metadata, build settings, and dependencies, and it is required for anything that takes part in the build system or a workspace.