AtlatestRepositorysigil-web-styles
sigil-web-styles / tree / build / dev / lib / _pkg / sigil-buildproject-file.md
1
# Package File Reference3
> Configuration for Sigil packages and workspaces.5
The `package.sgl` file defines package metadata, dependencies, and build configuration.7
## File Extension9
Package files must be named `package.sgl` (not `package.sg` or other variants).11
## Package Definition13
A basic package:15
```scheme16
(package17
name: "my-app"18
version: "0.1.0"19
description: "My application"20
license: "MIT"21
authors: (list "Your Name <[email protected]>")23
source-dirs: '("src"))24
```26
### Required Fields28
- `name:` - Package name (string)29
- `version:` - Semantic version (string)31
### Optional Fields33
- `description:` - Short description34
- `license:` - License identifier (e.g., "MIT", "BSD-3-Clause")35
- `authors:` - List of author strings36
- `url:` - Repository URL37
- `source-dirs:` - Directories containing source files (default: `'("src")`)39
## Entry Point41
For executable applications, specify the entry module:43
```scheme44
(package45
name: "my-cli"46
version: "0.1.0"47
description: "A command-line tool"49
entry: '(my-cli main)51
source-dirs: '("src"))52
```54
The `entry:` field specifies the module that contains the application's `main` procedure. This is used when bundling the application into a standalone executable.56
## Dependencies58
### Workspace Dependencies60
Reference other packages in the same workspace:62
```scheme63
(package64
name: "my-app"65
version: "0.1.0"67
dependencies: (list68
(from-workspace name: "sigil-json")69
(from-workspace name: "sigil-http"))71
source-dirs: '("src"))72
```74
## Workspace Definition76
A workspace groups multiple packages together. The root `package.sgl` of a multi-package project:78
```scheme79
(workspace80
name: "my-project"81
version: "0.1.0"82
description: "A multi-package project"83
license: "MIT"84
authors: (list "Your Name <[email protected]>")86
packages: (list87
"packages/my-lib"88
"packages/my-app")90
configs: (list91
(config92
name: 'dev93
output-dir: "build/dev"94
debug?: #t95
optimize: 0)97
(config98
name: 'release99
output-dir: "build/release"100
static?: #t101
optimize: 2))103
default-config: 'dev)104
```106
### Workspace Fields108
- `packages:` - List of package directory paths109
- `configs:` - Build configurations110
- `default-config:` - Configuration used when none specified112
### Config Options114
| Option | Description |115
|--------|-------------|116
| `name:` | Configuration name (symbol) |117
| `output-dir:` | Build output directory |118
| `debug?:` | Include debug symbols |119
| `optimize:` | Optimization level (0-3) |120
| `static?:` | Enable static linking |121
| `toolchain:` | Toolchain to use (`'musl` for static builds) |123
## Running Your Application125
During development, run your application with:127
```bash128
# Run the main module129
sigil eval '(import (my-app main)) (main)'131
# Or run a file directly132
sigil eval -f src/my-app/main.sgl133
```135
To create a standalone executable:137
```bash138
sigil bundle my-app --config release139
```141
## File Location143
Sigil searches for `package.sgl` in:144
1. Current directory145
2. Parent directories (up to filesystem root)147
This allows running commands from subdirectories within a project.