Hologram v0.6.0 Released!
Hologram v0.6.0 focuses on production readiness through enhanced security, comprehensive form support, and improved reliability. As adoption has ramped up substantially and developers have begun signaling their intent to use Hologram in production environments, this release addresses the critical needs for forms, security, reliability, and developer convenience.
This release introduces a complete form handling system with synchronized and non-synchronized form elements, comprehensive CSRF protection and HTML escaping for XSS prevention, action scheduling with delay parameters for animations and real-time interactions, and extensive cross-platform improvements for Windows development. To showcase the new action delay capabilities, I've prepared an Interactive Bouncing Ball Demo that demonstrates smooth 60 FPS physics simulation with realistic gravity, collision effects, and friction.

With over 360 commits since version 0.5.0, this release significantly strengthens Hologram's foundation for production use while introducing powerful new features that enable more dynamic and interactive applications.
New Features
Complete Form Support
- Synchronized form elements - Input state is synchronized with component/page state through unidirectional data flow achieved with
$change
event handlers on the input element level, ensuring the UI consistently reflects your application's data, similar to "controlled inputs" from React or "form input bindings" from Vue/Svelte - Non-synchronized form elements - Traditional form elements that operate independently of component state for simpler use cases where you don't need state synchronization
- Comprehensive input types - Support for text-based inputs (text, email, password, etc.), textareas, checkboxes, radio buttons, and select elements
- Complete documentation - Comprehensive form handling guide available in the Forms documentation
Enhanced Security
- CSRF protection for commands - Comprehensive Cross-Site Request Forgery protection for all command execution with robust token generation and validation system integrated with session management
- XSS prevention through HTML escaping - All interpolated expressions are automatically escaped to prevent Cross-Site Scripting attacks
- Secure by default - Security measures are automatically applied without requiring additional configuration
Action Scheduling and Delays
- Delay parameter for actions - Actions can now be scheduled with custom delay parameters specified in milliseconds, enabling smooth animations and timed interactions
- Initialization scheduling - Actions can be scheduled during page and component initialization and will execute when the component is mounted
- Asynchronous execution - Actions chained from other actions now run asynchronously, preventing event loop blocking and enabling fluid animations
- Animation and polling support - The delay system provides a foundation for animations, games, and polling mechanisms until Elixir process and PubSub support is added
Enhancements
Windows Development Support
- Windows compatibility - Multiple compiler tweaks and enhanced system command execution to ensure Hologram works seamlessly across operating systems, with particular focus on Windows development environments
- CI improvements - Windows support in continuous integration with platform-specific test handling
- Path normalization - Cross-platform path handling and newline normalization for consistent behavior
Compiler Reliability Improvements
- Compiler locking system - Prevents concurrent compilation issues with intelligent lock file management
- Smart stale lock detection - Automatic detection and removal of stale compilation lock files to improve live reload reliability
- Enhanced incremental compilation - Better dependency tracking for templatable modules in edge cases
- Bundle size configuration - New
:max_bundle_size
config option as an early warning system for abnormally large bundles (the previous 1MB default limit has been disabled)
Template Engine Enhancements
- Improved attribute rendering - Element attributes that evaluate to
false
are now properly omitted from rendering (previously only applied tonil
values) - Better alias resolution - Fixed alias resolving in colocated
.holo
templates for more reliable template compilation - Enhanced expression handling - Improved parsing and evaluation of complex expressions in template contexts
Expanded Runtime Support
- New Erlang function ports - Added JavaScript implementations of
:erlang.abs/1
,:erlang.binary_to_integer/1
,:erlang.div/2
, and:rand.uniform/1
- Enhanced numeric operations - Better support for mathematical operations and random number generation in client-side code
- Server consistency - All ported functions maintain full compatibility with their Elixir/Erlang counterparts
Bug Fixes
State Management
- Fixed
put_state/3
for nested structs - Resolved issues with updating structs in nested state paths that weren't working correctly
Forms
- Checkbox value handling - Fixed checkbox values to always return boolean instead of the assigned value attribute
- Form attribute escaping - Ensured that form input controlled attributes are not escaped, maintaining proper form functionality
Template Engine and Rendering
- Nil interpolation correction - Fixed client-side renderer incorrectly evaluating
nil
interpolations to "nil" string instead of empty string - Default prop values - Fixed behavior of default prop values when the prop is instructed to take its value from context
Runtime and Connectivity
- WebSocket ping error - Resolved WebSocket ping error that was affecting connection stability (fixed in v0.5.1)
Development and Compilation
- Call graph dependency tracking - Fixed edge cases in incremental compilation where template dependencies weren't properly detected
- Live reload stability - Improved reliability of the live reload system through better compiler locking mechanisms
- Cross-platform test fixes - Resolved various test inconsistencies across different operating systems
Upgrade Instructions
Hologram v0.6.0 contains no backward incompatible changes. Simply update your mix.exs
dependency to the new version:
{:hologram, "~> 0.6.0"}
Then run:
$ mix deps.update hologram
Acknowledgments & Community
Special Thanks to My GitHub Sponsors
I'd like to thank my GitHub sponsors: absowoot, Lucassifoni (Lucas Sifoni), D4no0 (Calancea Daniel), totaltrash (Darren Black), sodapopcan (Andrew Haust) and zachdaniel (Zach Daniel). Your support is greatly appreciated and helps with Hologram's continued development.
If you'd like to support Hologram's development and help make releases like this possible, consider becoming a GitHub sponsor. Your sponsorship directly contributes to the framework's growth, allows me to dedicate more time to new features, performance improvements, and community support. Every contribution, no matter the size, makes a meaningful difference in Hologram's journey.
Stay Connected
Join the growing community following Hologram's journey by signing up for our monthly Newsletter.
Every month, you'll get updates on development milestones, ecosystem news, and insights from the Hologram world. Think of it as your monthly check-in with everything Hologram-related. Whether it's new features being worked on, interesting discussions in the community, or updates on the framework's direction, you'll get a nice overview of what's been happening. No need to piece together information from different places - it's all compiled into one convenient monthly update.
Challenge Time!
Now that you have action scheduling with delay parameters and initialization-time action queuing at your disposal, I challenge you to push the boundaries of what's possible!
Think animations, games, real-time simulations, polling mechanisms, or any interactive experience that requires precise timing. The new action delay system opens up possibilities for creating fluid 60 FPS animations, physics simulations, periodic data updates, and much more.
What creative applications will you build? Show me what you can create with these new timing capabilities - I'd love to see how you leverage action scheduling to build engaging, dynamic experiences!
- Bart