Interactive Playground
Try Feather directly in your browser - powered by WebAssembly
What Feather is a good fit for
Feather is built for short, interactive programs:
- Give agents access to your program - like Chrome DevTools, but for your application
- Configure servers at runtime - hot-reload configuration without restarts
- Quake-style consoles - add developer consoles to games and applications
- Configuration file format - use a real programming language for config
- User customization - let users script and extend your software
Just like Bash and zsh let you drive a Unix system, Feather lets you drive your application in the same spirit.
When to use something else
Feather is not suited for programming in the large.
Features that support this are omitted intentionally:
No I/O by default: Feather cannot communicate with the outside world, until you explicitly provide facilities for doing so.
No packaging/import system: if your Feather program grows large, you need to decide whether you move this logic to the host, or provide the means of structuring code, like sourcing scripts from somewhere yourself.
Performance will never be the top priority: Feather is there to let you elegantly call code in your probably already optimized host application. A Feather script becoming slow is a sign that you need to move logic to the host application.
If you need large scale, performant programming in an embeddable programming language, you are looking for Lua.
Feather is lightweight glue
Feather is designed to be embedded into a host language.
The core implementation provides the language semantics, but all memory allocations, I/O, Unicode and floating point operations are provided by the host.
Chances are that if you are embedding a scripting language in 2025, your host language already has an implementation of everything and duplicating Unicode tables or getting two event loops to play nice with each other is more trouble than it's worth.
Feather provides libraries for using Feather directly in your programming language.
Supported Platforms
Intentionally not supported Platforms
Ruby
Ruby can already be programmed at runtime in Ruby.
The introduction of Boxes in Ruby 4, and mruby cover all possible use cases.
Python
Python is already dynamic and untrusted user code can be executed in WASM-based Python interpreters.