Last Updated: October 2, 2025
Version: v0.0.2
Welcome to the FerrisScript FAQ! Find answers to common questions about installation, usage, and Godot integration.
Can’t find your answer? Check TROUBLESHOOTING.md or ask in GitHub Discussions.
See the README Installation section for detailed setup instructions.
First build: 3-5 minutes on modern hardware due to dependency compilation
Subsequent builds: 1-2 seconds if no code changes
Clean rebuild: 3-5 minutes
Tip: Use cargo build --release for optimized builds (takes longer but produces faster binaries).
No! You can build and test the FerrisScript compiler and runtime without Godot:
cargo build --workspace
cargo test --workspace
You only need Godot if you want to:
godot_test/Common issues:
rustc --version and ensure it’s 1.70+
rustup updatecargo clean && cargo buildcargo build --offline if you’ve built beforeSee TROUBLESHOOTING.md for platform-specific solutions.
Not in v0.0.1 - Currently FerrisScript is designed for Godot integration.
Coming in v0.2.0 - Standalone mode will allow:
.ferris scripts independentlySee v0.1.0-ROADMAP.md for planned features.
.ferris or .rscr?The correct extension is .ferris ✅
All FerrisScript files use .ferris:
examples/hello.ferris
examples/bounce.ferris
examples/move.ferris
Note: Early documentation incorrectly referenced .rscr - this was corrected in v0.0.2.
| Feature | Rust | FerrisScript |
|---|---|---|
| Type system | Full Rust ownership | Simplified ownership (v0.0.1) |
| Compilation | Native binary | Interpreted via runtime |
| Target | Systems programming | Game scripting |
| Borrowing | Full borrow checker | Planned for v0.1.0 |
| Macros | Full macro system | Not supported |
| Standard library | std, alloc, core | Godot-specific + subset |
| Async/await | Full async runtime | Not supported yet |
TL;DR: FerrisScript is inspired by Rust’s syntax but simplified for game scripting. It’s not a Rust compiler.
Not directly - FerrisScript is not a Rust compiler and doesn’t have access to cargo/crates.io.
However:
crates/runtime/)Workaround for v0.0.1: Modify the runtime source code to add functionality.
FerrisScript and GDScript can coexist in the same Godot project:
Example:
// my_script.ferris
pub fn process_input(input: Input) -> Vector2 {
// Performance-critical code in FerrisScript
}
# my_scene.gd
extends Node2D
func _ready():
var ferris_script = FerrisScriptNode.new()
var result = ferris_script.process_input(Input.get_mouse_position())
Best practice: Use FerrisScript for performance-critical logic, GDScript for game logic/UI.
v0.0.1 Supported Types:
Vector2 - 2D vectorsNode - Base Godot node typei32, f32, bool, StringComing in v0.1.0:
Vector3 (3D vectors)Color (RGBA colors)Transform (3D transforms)Resource (Godot resources)See v0.1.0-ROADMAP.md for complete type roadmap.
Not yet - REPL (Read-Eval-Print Loop) is planned for v0.2.0.
Current workflow:
.ferris filescargo buildAlternatives:
cargo test for quick feedbackSee the README “Using in Godot” section for the 4-step process:
godot_test/addons/ferrisscript/bin/.gdextension fileFull tutorial: Coming in Phase 4 (Advanced Documentation).
.ferris files. Why?Common causes:
res://addons/ferrisscript/ferrisscript.gdextension.gdextension must point to correct binary
ferrisscript_godot_bind.dlllibferrisscript_godot_bind.solibferrisscript_godot_bind.dylibGodot editor needs restart - Changes to GDExtensions require restart
cargo build --package ferrisscript_godot_bind succeededSee TROUBLESHOOTING.md - Godot Integration for detailed fixes.
Yes! They work side-by-side:
my_game/
├── scripts/
│ ├── player.ferris # Performance-critical player controller
│ ├── ui_manager.gd # UI logic in GDScript
│ └── enemy_ai.ferris # AI in FerrisScript
└── scenes/
└── main.tscn
Best practices:
Current status (v0.0.1):
Optimization plans (v0.1.0+):
See v0.1.0-ROADMAP.md - Performance Roadmap for details.
Yes, but limited in v0.0.1:
Vector2 support only (2D focus)Vector3 coming in v0.1.0Current 3D workaround:
See CONTRIBUTING.md for complete guide:
cargo test)First-time contributors: Look for issues labeled good first issue.
# Run all tests
cargo test --workspace
# Run tests for specific crate
cargo test --package rustyscript_compiler
# Run specific test
cargo test test_lexer_tokenizes_keywords
# Run with output
cargo test -- --nocapture
See CONTRIBUTING.md - Testing Guidelines for more.
Process:
crates/compiler/src/lexer.rscrates/compiler/src/parser.rscrates/compiler/src/type_checker.rscrates/runtime/src/lib.rsExample: See how let mut was implemented by reviewing git history.
See CONTRIBUTING.md - Pull Request Process.
Short answer: Yes, for computation-heavy tasks, but not optimized yet.
Benchmarks (v0.0.1, preliminary):
Optimization status:
v0.1.0 goals: 5-10x faster with optimizations.
Use FerrisScript for:
Use GDScript for:
Hybrid approach (recommended):
v0.0.1: No built-in profiler yet.
Workarounds:
println! in runtimecargo flamegraph) on runtimeComing in v0.2.0:
v0.0.1 Features:
What’s NOT ready:
See v0.1.0-ROADMAP.md for detailed roadmap.
Not recommended for v0.0.1:
Wait for v0.2.0 (March 2026) for stable production use.
However:
Not yet - Currently using GitHub Discussions for community interaction.
Community channels (planned for v0.1.0):
For now: Use GitHub Discussions for:
Made with 🦀 and ❤️ for the Godot community