# Hammer for Mac - the 2025 rebirth

**URL:** <https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46>\
**Category:** Hammer\
**Tags:** hammer, swift, swiftui, product\
**Created:** [January 6, 2025, 12:17pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46 "2025-01-06T12:17:49Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![elliotjaystocks](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/elliotjaystocks/32/107_2.png) [@elliotjaystocks](https://community.beach.io/u/elliotjaystocks)\
**Post date:** [November 18, 2025, 9:59am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/41 "2025-11-18T09:59:04Z")

</div>

Thanks so much for sending the build, @steve! Firing it up now! 🙂

---

<div class="post-metadata">

**Author:** ![manicminer](https://avatars.discourse-cdn.com/v4/letter/m/dfb087/32.png) [@manicminer](https://community.beach.io/u/manicminer)\
**Post date:** [November 18, 2025, 1:16pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/42 "2025-11-18T13:16:40Z")

</div>

Thanks for this, @steve 👍

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [November 20, 2025, 2:26pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/43 "2025-11-20T14:26:30Z")

</div>

How did you get on? 👀 👂

---

<div class="post-metadata">

**Author:** ![elliotjaystocks](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/elliotjaystocks/32/107_2.png) [@elliotjaystocks](https://community.beach.io/u/elliotjaystocks)\
**Post date:** [November 20, 2025, 9:08pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/44 "2025-11-20T21:08:31Z")

</div>

Great, thanks, @steve! Not got too far yet beyond installation, setting up the starter template, and messing with some variables, but it’s all working perfectly so far.

Here’s a question: this is going to be a personal website for my wife and I want to give her light content editing capabilities by putting all of the “dynamic” content in snippets, and then have her edit only the snippets using the browser-based GitHub.dev code editor. Is there a way I could neatly separate those out from the “regular” snippets by putting them in another directory, and give her access to just that directory? Could be a nice way of keeping content semi-separate from the actual site files, if possible.

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [November 20, 2025, 9:47pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/45 "2025-11-20T21:47:11Z")

</div>

Great to hear.

I think I understand the question and use-case but am probably making some assumptions about how your wife would work with the content.

As a starting point, have you seen my draft concept for content management and generation in Hammer?

> [@Concept: Hammer CMS](https://community.beach.io/t/concept-hammer-cms/86):
>
> I’ve been exploring a concept to bring content generation directly into Hammer for Mac. I’d love to open this up for discussion and collective shaping with the community. Some background: It was a long time ago that we started to explore what has become common place - the combination of headless CMS with build time compilation and static site generation and deployment to the edge via a global CDN. Our version of this many moons ago combined third party headless CMS services of the time - [C…](https://contentful.com)

I think it would answer the separation of content from templating and markup, what do you think?

I’m not clear how you would want the content \> compilation \> deployment workflow to be. I would imagine when the site is designed and built you wouldn’t want to be responsible yourself for the hammer build and export? But it also sounds like your wife wouldn’t be running Hammer to trigger compilation after making content updates in GitHub editor?

for this, it seems like having GitHub sync with Hammer cloud compilation triggered before deployment would work. That way your wife could simply edit the content and commit the change or make a PR and post on merge, GitHub will fire webhook and trigger deploy.

Will you host on Forge? If so, we can do this.

---

<div class="post-metadata">

**Author:** ![philc](https://avatars.discourse-cdn.com/v4/letter/p/b5e925/32.png) [@philc](https://community.beach.io/u/philc)\
**Post date:** [November 23, 2025, 8:24pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/46 "2025-11-23T20:24:35Z")

</div>

Hello, I’m Phil, I used Hammer in the past to make a portfolio site for my creative work. I like to hand code HTML and CSS, and hate server maintenance, so it suited me perfectly. I have an idea for a new site and would love to try building it with the new Hammer. 🙂

---

<div class="post-metadata">

**Author:** ![elliotjaystocks](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/elliotjaystocks/32/107_2.png) [@elliotjaystocks](https://community.beach.io/u/elliotjaystocks)\
**Post date:** [November 26, 2025, 11:53am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/47 "2025-11-26T11:53:25Z")

</div>

Hi @steve! Given the infrequency of the updates to this site, I think me just doing a pull-then-local-rebuild-then-push whenever my wife tells me she’s made an update in the browser-based editor should be fine. 🙂

---

<div class="post-metadata">

**Author:** ![ndrfn](https://avatars.discourse-cdn.com/v4/letter/n/cab0a1/32.png) [@ndrfn](https://community.beach.io/u/ndrfn)\
**Post date:** [November 26, 2025, 7:22pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/48 "2025-11-26T19:22:09Z")

</div>

Hi! Hammer Class of 2014 - glad to see Hammer back in dev - looking forward to giving it a spin! Cheers!

---

<div class="post-metadata">

**Author:** ![elliotjaystocks](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/elliotjaystocks/32/107_2.png) [@elliotjaystocks](https://community.beach.io/u/elliotjaystocks)\
**Post date:** [December 1, 2025, 2:22pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/49 "2025-12-01T14:22:51Z")

</div>

@steve Out of interest, is there anything ‘wrong’ with doing this? i.e. having index.html consist purely of includes? It seems to compile fine, but I thought I’d check!

 ![Screenshot 2025-12-01 at 14.22.37](https://canada1.discourse-cdn.com/flex004/uploads/guild1/original/1X/e48f044052fc348183d48e8ed4a74d4f61eb23ed.png)

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [December 1, 2025, 2:38pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/50 "2025-12-01T14:38:05Z")

</div>

It will mostly depend on the contents of your your includes being structurally sound (proper doctype, html boilerplate, all tags closed etc.), there’s no problem in principle as it’s valid Hammer tag usage. How does the compiled output look?

You also don’t need to have the includes/ part of the path in the @include tag, Hammer will automatically look there. But I would recommend using \_prefix to avoid the partials also being compiled to your build folder.

e.g. `<!-- @include _header.html -->`

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [December 4, 2025, 7:57am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/51 "2025-12-04T07:57:04Z")

</div>

How’s everyone getting on with the Hammer testing?

I’ve had surprisingly few issues or blockers reported (which is a pleasant surprise, but makes me nervous).

Keen to hear how you’ve found it so far?  
What are you building with Hammer?  
Any observations, gripes, issues?  
Anything you really love about it?

---

<div class="post-metadata">

**Author:** ![mj2029](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mj2029](https://community.beach.io/u/mj2029)\
**Post date:** [December 4, 2025, 2:44pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/52 "2025-12-04T14:44:04Z")

</div>

Just had time to make a real site, quite simple one. Took the example, and moved the to an include, and also the values so that they could be used across all pages easily.

I’m not sure if there is an option to auto-detect the changed source files and do an build, and I can’t seem to turn off the cache (not sure if I’d want to).

Also, the includes are output in the build directory, but they aren’t referenced. Not sure that should be the case as they sort of “leak” information?

Apart from that, this has been great as a template driven content system.

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [December 4, 2025, 3:01pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/53 "2025-12-04T15:01:10Z")

</div>

Amazing, great to hear.

> Just had time to make a real site, quite simple one. Took the example, and moved the to an include, and also the values so that they could be used across all pages easily.

Yes, includes with variables are great for this.

> I’m not sure if there is an option to auto-detect the changed source files and do an build,

This should be the default behaviour - Hammer watches the filesystem for changes and when you save a change, the build will be triggered. Check that the 👁 icon (which is a toggle for the file system watcher) is enable (solid filled icon, not outline). Otherwise, I’d need more info to see what’s up in your case.

> and I can’t seem to turn off the cache (not sure if I’d want to).

Ability to turn off the cache is mostly when you find some issue that is due to cache and you want to do a completely fresh build, but mostly shouldn’t be needed. The UX of the Cache button isn’t very clear, you click it, then trigger build and you’ll see the “cache disabled” state for the build. I willimprove this along with some other UX gripes I have with those buttons / actions.

> Also, the includes are output in the build directory, but they aren’t referenced. Not sure that should be the case as they sort of “leak” information?

Make sure you prefix your include filenames with \_ e.g. \_head.html - this needed to tell Hammer you don’t want the file in the Build output.

> Apart from that, this has been great as a template driven content system.

❤

---

<div class="post-metadata">

**Author:** ![mj2029](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mj2029](https://community.beach.io/u/mj2029)\
**Post date:** [December 5, 2025, 4:04pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/54 "2025-12-05T16:04:25Z")

</div>

Is it possible to use the loop function on a directory of files?

I’m thinking blog posts, but could be product list or whatever. So I’d create a number of files which would probably have html content, but also a few variables or something (perhaps a date or sequential number). The loop would work on each of these, in order of date or sequence, and be able to read the variables in the file (titles etc). I could then use conditionals to only take the first 5 in the sequence.

From what I’ve read on the documentation (I hope the right site) I can define variables, but not operate on them (so can’t count to 5 and then stop outputting). And I can’t get the file list either.

This strikes me as a key feature if blogs are to be automatically updated with the latest posts…

Hope this helps, thanks! Matthew

---

<div class="post-metadata">

**Author:** ![mj2029](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mj2029](https://community.beach.io/u/mj2029)\
**Post date:** [December 5, 2025, 4:51pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/55 "2025-12-05T16:51:12Z")

</div>

I note the auto-reload doesn’t work in Safari on the Mac.  
SyntaxError: Invalid regular expression: nothing to repeat  
var href = link.href.replace(/((&|?)hammer=)[^&]+/, ‘’);

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [December 5, 2025, 6:03pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/56 "2025-12-05T18:03:22Z")

</div>

Sounds like a perfect use-case for content mode in Hammer.

I’ve recorded a video that gives a practical walkthrough of how it works…

> **[Hammer CMS Demo](https://supercut.ai/share/beach/N2aQNneLWMQ1tdDfbv-bL5)**
>
> Demo of the content mode in Hammer: Activate content mode, set up content models, create templates, generate content, build a simple blog.

Let me know if you think this is aligned with what you had in mind.

---

<div class="post-metadata">

**Author:** ![mj2029](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mj2029](https://community.beach.io/u/mj2029)\
**Post date:** [December 8, 2025, 9:26am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/57 "2025-12-08T09:26:09Z")

</div>

That looks perfect. I shall work out how to apply that for my needs. One thing that I can do on WordPress is add a line which indicates a “break” which on summaries (like an index page) would show “more…” so that the full blog isn’t displayed, but just the first paragraph or two. No idea if Markdown has such but a simple [summary-break] text would work, and could be removed easily for the full version.

I’d also like to be able to pick just the three latest blogs, or perhaps the summary paragraphs of three, and then the titles of further blogs. I can’t see any variable operators but I did work out I could use simple conditions if a variable can be set to true and then set to false later and it work in a loop.

But I’m perhaps getting ahead of myself and Hammer. More when I have time to implement the blog…

Hmm, just realised that content mode isn’t available in the version we have for test. I shall await it!

---

<div class="post-metadata">

**Author:** ![derek](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/derek/32/125_2.png) [@derek](https://community.beach.io/u/derek)\
**Post date:** [December 15, 2025, 2:49pm UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/58 "2025-12-15T14:49:19Z")

</div>

Just wanted to say I used hammer back in the day and following along now. This demo was great to see!

---

<div class="post-metadata">

**Author:** ![mj2029](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mj2029](https://community.beach.io/u/mj2029)\
**Post date:** [December 17, 2025, 10:43am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/59 "2025-12-17T10:43:31Z")

</div>

One further thought - in converting an existing blog using Hammer, the content mode is great. Apart from the fact that my content is currently HTML, so I have to convert that to markdown. Most of my content is just text, so that’s fine, but it does strike me that it would be good for the content mode to just use the extension of the file to determine how to treat it. .md=\> markdown. .yaml=\>whatever that is. .html=\> just take as is into the template.

---

<div class="post-metadata">

**Author:** ![steve](https://yyz2.discourse-cdn.com/flex004/user_avatar/community.beach.io/steve/32/43_2.png) [@steve](https://community.beach.io/u/steve)\
**Post date:** [December 17, 2025, 10:51am UTC](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46/60 "2025-12-17T10:51:43Z")

</div>

You can actually use raw HTML in the body Markdown section if you like - I do that for pages where I’m more opinionated about the layout.

[Previous page](https://community.beach.io/t/hammer-for-mac-the-2025-rebirth/46.md?page=2)
