Configuration
The implemented version 1 JSON build manifest, validation rules and future ideas.
Implemented, but not stable
This is the JSON schema used by the current Rust builder. It can change before release. TypeScript examples below are concepts only.
Minimal working configuration
Create bsis.json beside a folder named payload:
hello
- bsis.json
payload
- hello.txt
{
"schema_version": 1,
"product": {
"id": "bsis.hello",
"name": "BSIS Hello",
"version": "0.1.0",
"publisher": "BSIS"
},
"files": [
{ "from": "payload", "to": "app" }
]
}
This example includes the contents of payload under the installation destination's app folder. A single source file can also be mapped to a relative target file.
Field reference
| Field | Type | Rules |
|---|---|---|
schema_version | integer | Must equal 1 |
product.id | string | 1–100 ASCII letters/digits/dots/hyphens/underscores |
product.name | string | Non-empty display name, up to 128 bytes |
product.version | string | Non-empty version label, up to 64 bytes |
product.publisher | string | Publisher label, up to 128 bytes |
files | array | Between 1 and 50,000 source mappings |
files[].from | string | Relative file or directory path, resolved from the configuration file's directory |
files[].to | string | Relative destination inside the installation root |
Unknown keys are rejected. That makes unsupported features fail explicitly rather than being silently ignored.
Source and destination rules
Mappings use relative paths, not C:\\... paths or a way to write outside the installation target. Directory mappings recursively include regular files. Build-time source symlinks and reparse points are not supported.
BSIS validates destination path components against traversal, conflicting files and directories, case-insensitive duplicate Windows paths and invalid Windows names.
The build manifest and the embedded package manifest are different objects: the embedded manifest contains the enumerated files, lengths and SHA-256 hashes after packaging.
Packaging with this file
From the core repository, run:
cargo run -p bsis -- build --config examples/hello/bsis.json --runtime target/release/bsis.exe --output BSIS-Hello-Setup.exe
See CLI reference for full flags and Packaging for the output format.
Proposed TypeScript authoring API
The following is a design sketch, not an importable package or supported BSIS configuration:
// Concept only — @bsis/core is not published.
import { defineConfig } from "@bsis/core";
export default defineConfig({
app: { name: "Example App", version: "1.0.0" },
files: [{ from: "./dist", to: "{installDir}" }],
ui: "./installer",
});
Custom wizard screens, localization, appearance settings, shortcuts, elevation, updates and plugins are not recognized keys in the current JSON format. Refer to Roadmap for the planned developer API.
Validate before building
Use the implemented plan command to resolve every source mapping, hash source file contents, detect Windows destination collisions and preview the uncompressed package inventory without generating a setup executable.
cargo run --locked -p bsis -- plan --config examples/hello/bsis.json --json
See Package preflight for reported fields and error conditions. The schema remains version 1; this command does not add any new configuration keys.