-
v.1.0.0-beta.4 Pre-release
released this
2026-07-23 10:26:29 +02:00 | 101 commits to main since this releaseRelease Notes - v1.0.0-beta.4
It's About Time !
Welcome to beta 4! For this release, I focused entirely on one of the trickiest parts of the Gram engine: time and retro-planning.
After testing the parser against a bunch of real-world recipes, I realized the timing logic was a bit opaque, and sometimes even completely wrong... So, I decided it was time (no pun intended) to rethink how it should work in a real kitchen environment. The calculations are now much more robust, and more importantly, they finally align with reality. The documentation has been updated to reflect all this!
Smarter Passive Timers
The way Passive Timers (
~_) interact has changed. You should really start naming them, because their names now dictate how they are scheduled:- Different Names (Parallel): Putting one prep in the fridge for 1h and another for 20min? No problem, they overlap.
- Same Name (Sequential): Baking something in the "Oven" at 180°C for 30min, THEN at 160°C for 1h? If they share the exact same name, Gram automatically sequences them. No more overlapping baking steps breaking the space-time continuum!
Visualizing Time: Gantt Chart & Tooltips
Previously, section retro-planning (like
## Section ~{-2h}) was mostly just there to look pretty in the code. It didn't really impact the engine's core scheduling. Well, now it does! The parser strictly uses these offsets to compute the timeline.To prove all this math works, I finally added a Gantt Chart view to the Playground. It's a feature I've talked about since the early stages of this project, and building it is exactly what helped me realize the old timing calculations were way off 😅. You can now visually check your recipe's timeline, see exactly how your retro-planning offsets shift the steps, and debug everything at a glance.
Bonus: In the HTML preview, hovering over any time badge will now reveal a detailed tooltip breaking down exactly how that specific time was calculated (Active, Prep, Total). It's incredibly useful for understanding the parser's underlying logic!
Just-In-Time Prep (ALAP)
Gram now uses ALAP (As Late As Possible) scheduling. Instead of prepping things early and leaving them sitting on the counter, the engine pushes passive timers backwards from the end of the recipe. It calculates the exact moment to start a prep so it's ready just-in-time.
(Side note:cookTimeis now calledidleTimeeverywhere. It just makes more sense).
What's changed
- Core API:
runPipelineis now exported from@gram-lang/clito make programmatic usage way easier. - Strict Timelines: Section retro-planning (e.g.
## Section ~{-2h}) now enforces a strict signed-duration syntax. Oh, and you can used(days) as a unit now! - Fractions: Fixed bugs where scaled fractions looked weird. Things like
0.5will now cleanly render as1/2. - Shopping Lists: The shopping list now correctly preserves your recipe's original ingredient alias instead of forcing the database's canonical name.
What's Next?
I have to admit, I've had a bad habit of constantly wanting to add "just one more feature" before the V1 launch, which keeps pushing the release back. It's time for some discipline: no new features for now.
If you're curious about what's coming later, I've added a list of ideas I want to implement to the repository's Projects tab (and more will be added soon).
Instead, my entire focus is shifting to a massive codebase review and optimization pass for
beta.5. The project has grown significantly, so this is going to be a huge undertaking, but it's now or never. I really hope (and strongly intend) for beta.5 to be the final beta before the stable V1 release!Until then, please drop by the playground, test the Gantt chart, and try to break the timeline! À plus 🖖
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads