peko.toml
peko.toml
The manifest is strict: an unrecognized key anywhere is a parse error, not a warning. That catches typos, and it means a key you invent will stop the build.
Discovery walks up to sixteen parent directories looking for the file.
[project]
| Key | Type | Required | Meaning |
|---|---|---|---|
name |
string | yes | display name |
version |
string | yes | full semver, x.y.z |
bundle |
string | no | reverse-DNS id, also the keychain account for signing |
app_id |
string | no | platform app id, written by peko link |
host |
string | no | <slug>.serve.pekoui.com, written by a successful deploy server |
target_platforms |
array | no | android, ios, linux, macos, windows |
entry |
path | no | the main source file |
Without entry, the entry is source/main.peko, then source/app.peko.
[ui]
Only five keys exist here.
| Key | Type | Required | Meaning |
|---|---|---|---|
framework |
string | yes | see below |
icon |
path | no | square PNG app icon |
scheme |
string | no | custom URL scheme for deep links, lowercased |
width |
number | no | initial window width |
height |
number | no | initial window height |
framework is native, static, or an SSR framework id: next, nuxt,
sveltekit, remix, astro, angular. A bare server means next.
There is no server_framework key. The SSR framework goes in framework
itself. Writing server_framework is a parse error.
[package] and [lib]
A library uses these instead of [project].
| Key | Table | Meaning |
|---|---|---|
name, version |
package | required |
description, license, authors, repository |
package | recommended; peko verify warns when absent |
keywords, categories |
package | registry metadata |
peko |
package | minimum compiler version requirement |
root |
lib | entry source, default source/lib.peko |
[dependencies]
[dependencies]
sockets = "^1.2"
local = { path = "../local_dep" }
shots = { version = "^0.3", demo = true }A dependency takes a version requirement or a path, not both. demo = true
scopes it to demo builds: it resolves and installs normally, but its objects and
native sources are excluded from a normal or release link, so it cannot reach a
shipped binary.
[icon]
| Key | Meaning |
|---|---|
source |
the master square PNG |
project |
the editable layered .pekoicon |
macos, windows, linux, ios, android |
per-platform source overrides |
android_foreground, android_background |
adaptive icon layers, both required together |
Resolution is the per-platform override, then source, then [ui].icon.
[windows]
Values from Partner Center, needed for a Windows release build:
identity_name, publisher, publisher_display_name. Each is optional at parse
time so a partial table does not break a project targeting other platforms, but a
Windows release fails without all three.
[native]
The C build. Covered in the low-level guide.
| Key | Meaning |
|---|---|
sources |
C, Objective-C, and C++ files |
include |
include directories |
flags |
compile flags, keyed all or a platform name |
link |
link arguments, same keys |
libs |
prebuilt archives, keyed all, <os>, or <os>-<arch> |
[client]
A package that ships a JavaScript half declares it here: name is the npm
package name consumers import, and root is the directory holding it, default
client. Every build copies it into the app's .peko/client/ and registers it
in package.json.
[demo], [platforms], [capabilities]
[demo] has enabled and module (default src/demo.peko).
[platforms].supported lists operating systems. [capabilities].uses is parsed
and reserved for per-permission gating, but is informational today.