Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Here is an overview of the Piston architecture. Everything is developed under the MIT license, unless specified otherwise.
These are places to get started with Piston.
- piston-examples - Small examples
- piston-tutorials - Getting started
- piston wiki - Information for people working on the Piston project
- piston_window - A window wrapper for convenience
These projects demonstrate the functionality of Piston.
- skeletal_animation_demo - Demonstrates 3D skeletal animation using Gfx
- piston-music - Simple music library using SDL2 and current library
- hematite - Demonstrates 3D voxel rendering (Minecraft)
The Piston core
These libraries model the input, window and event loop. The core does not depend on any platform specific API. It uses a modular design to reduce effects of breaking changes. The reason is to write generic libraries that work across projects, and to make 90% of the ecosystem reusable and platform/API independent.
These libraries supports the functionality and integration between other libraries. They are small and simple. The reason is to give the user free choice of higher level libraries that overlap in functionality, but keep the integration internally in Piston.
- piston-rect - Simple rectangle layout
- current - "Globals" for prototyping, high level libraries, diagnostics
- table - Dynamical typed Lua-like table structure
- texture_packer - Pack small images together into larger ones
- select_color - Color selection
- read_color - Read hex colors
- read_token - Read tokens using look-ahead
- range - Range addressing
- fps_counter - FPS counter
- find_folder - Find a folder from current directory
- array - Convenience methods for working with arrays
- piston-shaders - Repository for GPU shaders
- piston-history_tree - A persistent history tree for undo/redo
These are bindings to C libraries.
- glfw-rs - GLFW3 bindings and idiomatic wrapper for Rust.
- freetype-rs - Safe wrappers for FreeType fonts
- freetype-sys - Low level wrappers for FreeType fonts
- physfs-rs - PhysFS bindings
These libraries can be used separately or together with the Piston ecosystem. The reason is to decouple dependencies such that the functionality in these libraries can be reused as much as possible.
- image - Image encoding and decoding
- imageproc - Image processing operations
- piston_collada - Advanced standard format for 3D
- wavefront_obj - Simple 3D format
- hematite_nbt - Minecraft's Named Binary Tag (NBT) format
- piston_meta - Meta parsing for domain specific text formats
- dyon - A rusty dynamically typed scripting language
Image formats & processing
- image - Collects encoders and decoders
- gif - GIF encoder and decoder
- png - PNG decoder
- color_quant - Color quantization
These integrates Piston with various external APIs. The window and graphics backends are decoupled. The reason is greater flexibility when shipping a product, easier to compare API design and performance, and works both for cross and native platforms.
Window (uses the piston core):
2D graphics (uses piston2d-graphics:
Libraries that extends Piston
These libraries leverages the generic functionality of Piston into higher level features.
- conrod - Immediate UI
- camera_controllers - 3D camera navigation
- piston-ai_behavior - AI behavior trees
- piston-button_tracker - Tracking mouse/button events
- piston-button_controller - Handles events and state for buttons
- piston-split_controller - Split layout
- piston2d-scroll_controller - Handling scroll area
- piston2d-sprite - Sprite animation
- piston2d-shapes - Convenience structs for 2D shapes
- piston2d-drag_controller - Drag & drop for 2D
- timer_controller - Timer events
- carboxyl_window - Functional reactive programming for window events, GNU license
- elmesque - 2D graphics inspired by the Elm graphics modules
These libraries uses the Gfx backend agnostic graphics API.
- dev_menu - Uses pistoncore-input
- gfx_text - Uses FreeType
- gfx_debug_draw - Rendering lines and text in 3D space
- piston3d-gfx_voxel - Voxel rendering
- piston-gfx_texture - Integrates Gfx textures with Piston
- pluto - Game competition website, using Rust server stack
- hematite - A Minecraft client
- hematite_server - A Minecraft server
Sorted by activity.
- mix_economy - Mix regulate economies in MMO worlds
- opengex - Rust library for OpenGEX format
- turbine - 3D game engine with built-in editor
- editor - Editor interface
- inventory - Plugin management in Rust programs
- mush - GUI for graphs
- gfx_window_shared - An alternative window backend using Gfx
- graphics-lab - Visualize and test 2D graphics
- axis_helper - A 3D axis helper
- control_point - Manipulating control points
- vec - SIMD instructions for generic vectors