[package]
edition = "2024"
rust-version = "1.95"
name = "ponko"
version = "0.0.1"
authors = ["Leon Mamić and Ponko contributors"]
build = "build.rs"
exclude = [
"/book",
"/.github",
"/web",
"/include",
"/examples/cpp",
"/docs",
"/rustfmt.toml",
"/CLAUDE.md",
"/AGENTS.md",
"/.mcp.json",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A fast 2D game engine for simulating millions of things: ECS on all cores, hot reload, an in-game inspector, AI-agent control, and a C++ API."
homepage = "https://ponko.dev/"
documentation = "https://docs.rs/ponko/"
readme = "PONKO.md"
keywords = [
"gamedev",
"engine",
"2d",
"ecs",
"simulation",
]
categories = [
"game-engines",
"game-development",
"simulation",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/bozoslav/crabbyengine"
[package.metadata.docs.rs]
features = [
"physics",
"physics3d",
"steam",
"3d",
"navmesh",
]
[features]
3d = [
"dep:gltf",
"image/jpeg",
"image/hdr",
"image/exr",
]
audio = [
"dep:kira",
"dep:cpal",
]
default = [
"audio",
"window",
"inspector",
"gamepad",
]
gamepad = [
"window",
"dep:gilrs",
]
hotpatch = [
"dep:subsecond",
"dep:dioxus-devtools",
]
inspector = [
"window",
"dep:egui",
"dep:egui-wgpu",
"dep:egui-winit",
]
navmesh = [
"3d",
"dep:navmesh-rs",
]
physics = ["dep:rapier2d"]
physics-determinism = [
"physics",
"rapier2d/enhanced-determinism",
"rapier3d?/enhanced-determinism",
]
physics3d = [
"3d",
"dep:rapier3d",
]
profiling = [
"dep:puffin",
"dep:puffin_http",
]
steam = ["dep:steamworks"]
window = [
"dep:wgpu",
"dep:winit",
"dep:pollster",
]
[lib]
name = "ponko"
path = "src/lib.rs"
[[example]]
name = "3d"
path = "examples/3d.rs"
required-features = ["3d"]
[[example]]
name = "action_map"
path = "examples/action_map.rs"
[[example]]
name = "ants"
path = "examples/ants.rs"
[[example]]
name = "audio3d"
path = "examples/audio3d.rs"
required-features = ["3d"]
[[example]]
name = "battle"
path = "examples/battle.rs"
[[example]]
name = "boids"
path = "examples/boids.rs"
[[example]]
name = "bunnymark"
path = "examples/bunnymark.rs"
[[example]]
name = "bunnymark_ecs"
path = "examples/bunnymark_ecs.rs"
[[example]]
name = "compute"
path = "examples/compute.rs"
required-features = ["3d"]
[[example]]
name = "ecs"
path = "examples/ecs.rs"
[[example]]
name = "editor"
path = "examples/editor.rs"
[[example]]
name = "ffi_bench"
path = "examples/ffi_bench.rs"
[[example]]
name = "flow"
path = "examples/flow.rs"
[[example]]
name = "gamepad"
path = "examples/gamepad.rs"
[[example]]
name = "headless"
path = "examples/headless.rs"
[[example]]
name = "hotpatch"
path = "examples/hotpatch.rs"
[[example]]
name = "lights"
path = "examples/lights.rs"
required-features = ["3d"]
[[example]]
name = "lockstep"
path = "examples/lockstep.rs"
[[example]]
name = "navmesh3d"
path = "examples/navmesh3d.rs"
required-features = ["navmesh"]
[[example]]
name = "net_messages"
path = "examples/net_messages.rs"
[[example]]
name = "net_replication"
path = "examples/net_replication.rs"
[[example]]
name = "particles"
path = "examples/particles.rs"
required-features = ["3d"]
[[example]]
name = "physics"
path = "examples/physics.rs"
required-features = ["physics"]
[[example]]
name = "physics3d"
path = "examples/physics3d.rs"
required-features = ["physics3d"]
[[example]]
name = "ribbons"
path = "examples/ribbons.rs"
required-features = ["3d"]
[[example]]
name = "scene_viewer"
path = "examples/scene_viewer.rs"
required-features = ["3d"]
[[example]]
name = "shaders"
path = "examples/shaders.rs"
required-features = ["3d"]
[[example]]
name = "skinning"
path = "examples/skinning.rs"
required-features = ["3d"]
[[example]]
name = "sprites"
path = "examples/sprites.rs"
[[example]]
name = "streaming"
path = "examples/streaming.rs"
required-features = ["3d"]
[[example]]
name = "terrain"
path = "examples/terrain.rs"
required-features = ["3d"]
[[example]]
name = "tiles"
path = "examples/tiles.rs"
[[example]]
name = "ui"
path = "examples/ui.rs"
[[example]]
name = "ui_panel"
path = "examples/ui_panel.rs"
required-features = ["3d"]
[[example]]
name = "ui_shop"
path = "examples/ui_shop.rs"
[[example]]
name = "vehicle"
path = "examples/vehicle.rs"
required-features = ["physics3d"]
[[example]]
name = "window"
path = "examples/window.rs"
[[test]]
name = "actions"
path = "tests/actions.rs"
[[test]]
name = "actions_alloc"
path = "tests/actions_alloc.rs"
[[test]]
name = "alloc_counting"
path = "tests/alloc_counting.rs"
[[test]]
name = "attach"
path = "tests/attach.rs"
[[test]]
name = "audio"
path = "tests/audio.rs"
[[test]]
name = "contacts3d"
path = "tests/contacts3d.rs"
[[test]]
name = "control"
path = "tests/control.rs"
[[test]]
name = "determinism"
path = "tests/determinism.rs"
[[test]]
name = "events"
path = "tests/events.rs"
[[test]]
name = "flow"
path = "tests/flow.rs"
[[test]]
name = "headless"
path = "tests/headless.rs"
[[test]]
name = "hot_reload"
path = "tests/hot_reload.rs"
[[test]]
name = "joints3d"
path = "tests/joints3d.rs"
[[test]]
name = "lights"
path = "tests/lights.rs"
[[test]]
name = "morph3d"
path = "tests/morph3d.rs"
[[test]]
name = "navmesh3d"
path = "tests/navmesh3d.rs"
[[test]]
name = "navmesh3d_large"
path = "tests/navmesh3d_large.rs"
[[test]]
name = "net"
path = "tests/net.rs"
[[test]]
name = "net_messages"
path = "tests/net_messages.rs"
[[test]]
name = "net_replication"
path = "tests/net_replication.rs"
[[test]]
name = "perf_report"
path = "tests/perf_report.rs"
[[test]]
name = "physics"
path = "tests/physics.rs"
[[test]]
name = "physics3d"
path = "tests/physics3d.rs"
[[test]]
name = "physics3d_alloc"
path = "tests/physics3d_alloc.rs"
[[test]]
name = "physics3d_joint_guide"
path = "tests/physics3d_joint_guide.rs"
[[test]]
name = "physics3d_streaming"
path = "tests/physics3d_streaming.rs"
[[test]]
name = "profiling"
path = "tests/profiling.rs"
[[test]]
name = "profiling_off"
path = "tests/profiling_off.rs"
[[test]]
name = "ragdoll3d"
path = "tests/ragdoll3d.rs"
[[test]]
name = "reflect"
path = "tests/reflect.rs"
[[test]]
name = "reflection_probes"
path = "tests/reflection_probes.rs"
[[test]]
name = "scenes"
path = "tests/scenes.rs"
[[test]]
name = "spatial"
path = "tests/spatial.rs"
[[test]]
name = "stream"
path = "tests/stream.rs"
[[test]]
name = "three"
path = "tests/three.rs"
[[test]]
name = "tiles"
path = "tests/tiles.rs"
[[test]]
name = "ui"
path = "tests/ui.rs"
[[test]]
name = "ui_retained"
path = "tests/ui_retained.rs"
[[test]]
name = "vehicle3d"
path = "tests/vehicle3d.rs"
[dependencies.bytemuck]
version = "1.25.2"
features = ["derive"]
[dependencies.dioxus-devtools]
version = "0.7.10"
optional = true
default-features = false
[dependencies.egui]
version = "0.37"
features = ["default_fonts"]
optional = true
default-features = false
[dependencies.egui-wgpu]
version = "0.37"
optional = true
default-features = false
[dependencies.egui-winit]
version = "0.37"
optional = true
default-features = false
[dependencies.epaint_default_fonts]
version = "0.37.0"
[dependencies.fontdue]
version = "0.9.5"
[dependencies.gilrs]
version = "0.11.2"
optional = true
[dependencies.glam]
version = "0.34.2"
features = ["serde"]
[dependencies.gltf]
version = "1.4.1"
features = [
"utils",
"names",
"extras",
]
optional = true
default-features = false
[dependencies.half]
version = "2.7.1"
[dependencies.image]
version = "0.25.10"
features = ["png"]
default-features = false
[dependencies.kira]
version = "0.12.6"
features = [
"cpal",
"ogg",
"vorbis",
"wav",
"pcm",
"mp3",
"flac",
]
optional = true
default-features = false
[dependencies.navmesh-rs]
version = "0.2.1"
features = [
"std",
"libm",
"recast",
"detour",
"crowd",
"tilecache",
"polyref64",
]
optional = true
default-features = false
[dependencies.pollster]
version = "1.0.1"
optional = true
[dependencies.ponko_ecs]
version = "0.0.1"
features = ["serde"]
[dependencies.puffin]
version = "0.20.0"
optional = true
[dependencies.puffin_http]
version = "0.17.0"
optional = true
[dependencies.rapier2d]
version = "0.36.1"
optional = true
[dependencies.rapier3d]
version = "0.36.1"
optional = true
[dependencies.rayon]
version = "1.12.0"
[dependencies.renet]
version = "2.0.0"
[dependencies.serde]
version = "1.0.229"
features = ["derive"]
[dependencies.serde_json]
version = "1.0.154"
[dependencies.steamworks]
version = "0.13.1"
optional = true
[dependencies.subsecond]
version = "0.7.10"
optional = true
[dependencies.taffy]
version = "0.15.1"
features = [
"std",
"taffy_tree",
"flexbox",
"grid",
"content_size",
]
default-features = false
[dependencies.web-time]
version = "1.1.0"
[dependencies.wgpu]
version = "30.0.1"
features = ["glsl"]
optional = true
[dependencies.winit]
version = "0.30.13"
optional = true
[target."cfg(any(unix, windows))".dependencies.libc]
version = "0.2"
[target.'cfg(target_arch = "wasm32")'.dependencies.cpal]
version = "0.18.2"
features = ["wasm-bindgen"]
optional = true
[target.'cfg(target_arch = "wasm32")'.dependencies.js-sys]
version = "0.3.107"
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen]
version = "0.2.130"
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen-futures]
version = "0.4.80"
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
version = "0.3.107"
features = [
"Window",
"Document",
"Element",
"HtmlCanvasElement",
"Location",
"Response",
"console",
]
[target.'cfg(target_arch = "wasm32")'.dependencies.wgpu]
version = "30.0.1"
features = ["webgl"]
optional = true
[profile.dev]
opt-level = 1