-
v.1.0.0-beta.5 Pre-release
released this
2026-07-26 10:26:43 +02:00 | 0 commits to main since this releaseRelease Notes - v1.0.0-beta.5
Cleaning up the codebase
Hi! Let's cut right to the chase: this beta 5 is about making sure the whole engine actually holds together reliably.
As a solo developer working on Gram and learning as I go, the project has quietly turned into a pretty sizable monorepo (
parser,kitchen,analyzer,renderer,cli,lsp,format). Recently, I ran into a — reportedly — classic problem: tweaking a line in one package would randomly break something else three packages away.Before adding any more features or syntax additions, I thought it would be preferable to stop and build a proper safety net. So for this release, I spent some time digging through the codebase, fixing edge cases, and locking down test suites and golden files across every package.
Along with all that internal cleanup, this release packs many changes covering a brand-new code formatter, interactive Gantt charts right in VS Code, SSRF security guards, full rendering parity between Markdown, HTML, and printable HTML (
gram print), and some long-overdue unit fixes for French recipes.
Formatting & VS Code Tools
- Standalone Formatter (
@gram-lang/format): Extracted the formatting logic into its own package with 13 canonical rules.gram formatin the CLI and Format on Save in VS Code now use the exact same engine. - Frontmatter Safety:
gram formatwon't mess with casing inside frontmatter metadata blocks anymore (so emails likeJean@Example.comstay as-is). - Spacing Cleanup: Fixed
#cookwareat line starts being misread as section headers, and enforced exactly one blank line before## Sectiontitles. - VS Code Gantt View: You can now open a real-time Gantt chart panel right inside VS Code to inspect your recipe timelines while typing.
Parser & Syntax Fixes
- Sigil Swallow Bug: Fixed a nasty bug where bare mentions like
@ingredientor#cookwarewithout{}swallowed subsequent items or timers further down the line. - TextMate Highlighting: Aligned the VS Code syntax highlighter so it stops matching names at
@,#,~,^, and&, fixing color bleed across lines. - Fraction Edge Cases: Fixed decimal numerators (
1.5/2no longer gets truncated to0.5) and properly rejected zero denominators (1/0no longer turns intonull/Infinity). - Headerless Recipes: Fixed LSP crashes and missing symbols on recipes that don't start with a
## Sectionheader.
Engine & Calculation Fixes
- ALAP Scheduling across Empty Sections: Empty or comment-only sections no longer mess up ALAP timing for following steps.
- Named Track Chaining: Chaining steps on the same passive track (
~_oven{...}) no longer triggers false conflict warnings. - Indirect Cycles: The compiler now catches indirect circular dependencies between sections and warns you about them.
- Scaling Fixes:
gram scalenow scales cookware properly, eliminates float rounding noise like110.00000000000001, and rejects extreme multipliers cleanly instead of crashing. - Timer Warnings: Unrecognized time units now produce proper warnings instead of fake durations.
CLI & Security Hardening
- SSRF Protection in
gram import:gram importnow refuses to fetch local or private addresses (localhost, internal IPs, cloud metadata), even across HTTP redirects. - API Key Isolation: Fixed a bug where an API key could leak to the wrong provider if multiple keys were set in your environment.
- Safer DB Enrichment:
gram db enrichrejects physically impossible AI suggestions (like absurd densities) and won’t claim success if nothing was written to disk. - Clean Terminal Output: Invalid DB entries now print warnings to
stderrinstead ofstdout, so pipinggram build | jqworks reliably again.
French Unit Fixes
livre: Now uses the French metric pound (500g) instead of the imperial pound (453.59g).tasse: Now uses the French cup (250mL) instead of the US liquid cup (236.58mL).quart: "Un quart d'heure" is no longer misidentified as a liquid quart volume in French recipes.pinte: Emits an explicit unknown-unit warning instead of guessing a wrong number.- Language Awareness:
language:in.gram/config.yamlnow actually drives unit resolution and supermarket category sorting.
Rendering & Parity
- Full Format Parity: Markdown (
toMarkdown), HTML, and printable HTML (toPrintHTML/gram print) now show the exact same information:- Markdown recipes now include full nutrition tables.
- Recipe comments render as numbered footnotes in both Markdown and print output.
- Gross vs. net weight notes (e.g. "1 avocado" vs usable flesh) show up everywhere.
- Mixed unit warnings ("100g" + "1 cup") are grouped consistently across all exports.
- XSS Neutralization: Raw HTML tags (
<and&) are now escaped intoMarkdownand timing tooltips. - Print View Fixes: Fixed sodium showing up in grams instead of milligrams in print view (
toPrintHTML), and fixed blank nutrition warnings.
Language Server Resilience
- No More Editor Crashes: A malformed
ingredients.yaml, a remote workspace, or a failed background reload will no longer crash the entire VS Code extension session. - Fresh Buffer Operations: Formatting, renames, and code actions now operate directly on live editor state rather than stale disk files.
What's Next?
I feel like taking the time to do this cleanup was absolutely necessary at this stage. It actually gives me much more confidence for everything I want to implement after the V1 launch.
On a more personal note, I have to say that I'm having an absolute blast building Gram. Watching this project come to life, mature, and become more robust and genuinely useful makes me happier than ever ☺️
I feel like the feature set for the official V1 launch is now complete. Obviously, there are a million more features I want to add in the future, but I'm forcing myself to stay disciplined and stick to this first major milestone. It's certainly not 100% perfect, but when I look back at where this project started compared to where it is today... it feels pretty great!
My main goal now is to prepare for the official V1 release: revamp the documentation homepage to introduce Gram better, and iron out the last few bugs that I may find.
The next steps will arrive very quickly. I've already populated the backlog (over on Projects) with plenty of issues and big features planned to make Gram even more powerful down the road.
Until then, please give
beta.5a spin, don't hesitate to share the project with people around you and let me know if you run into anything! À bientôt !Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Standalone Formatter (