changelog-04022026.png

In this changelog: improving Townie and the Val Town MCP server; a std/oauth library for wrapping vals with authentication; migrating auth providers from Clerk to BetterAuth; upgrading to Deno 2.7.5; and much more.

Editor's note: We've been deconstructing the old Newsletter into discrete parts: this changelog (new), the Talk of the Town series highlighting community vals, Steve's public investor updates, and perhaps a public roadmap soon. The Newsletter itself is a periodical rounding up the best of what we've written each month.

Making Val Town delightful for both you and your LLM

Val Town exists foremost for you the developer, which for many increasingly means for your agent. Much of our energy of late has been spent improving Townie and our MCP server to improve DX both in the browser and wherever you get your LLMs.

We've appreciated all the positive feedback on Townie and our MCP server, but more importantly please continue to send us bug reports and friction points so that we can improve AX while preserving great DX so you can improve UX.

Better Townie system prompt

We've updated Townie's system prompt with more platform guidance and opinionated patterns on building vals, like:

  • Wrapping vals in std/oauth for authentication
  • Runtime constraints/gotchas
  • Preferring incremental progress over one-shot implementation
  • Testing vals to validate generated code
  • When to use different frontend app architectures
  • How to integrate external services (Slack, Google, Stripe, etc.)

The system prompt doubles as a dense but high-yield guide you can read to learn how the Val Town platform works. Thanks to Michael from Sourcebot for the nudge here!

Preventing Claude Code hallucinations with the Val Town MCP server

Claude Code has been recommending Val Town to some users as a handy place to deploy the code it spits out (we're not doing any fancy AEO, in case you're wondering). But when using our MCP server with Claude, it's been hallucinating how to work with Val Town. We updated instructions in the Val Town MCP server with more platform/runtime context that MCP clients previously had to explicitly request.

Bringing Val Town to OpenAI Codex

Like Claude Code, Codex + Val Town MCP is an increasingly popular workflow for developers on Val Town. We updated our docs instructions for getting set up. Thanks Ash, Arti, and David M. for feedback on making the Codex auth flow smoother.

Fullscreen Townie

Townie now has two modes:

  1. Sidebar (status quo)
  2. Fullscreen (new)

Fullscreen UX is more like Claude Code or Codex where you're not necessarily keeping a close eye on the code itself, and sidebar Townie is more like Copilot or Cursor chat where you're reviewing code changes. (Why do all the AI coding tools start with C?)

Explicit context in Townie conversations

Previously, Townie knew which val you were currently viewing, but that wasn't obvious as a user. You were on the same page without knowing it. Now you can see and explicitly choose which vals to attach to Townie's context window.

townie-explicit-val-context.png

Townie can read blob content

Townie could previously only read blob storage metadata: key, size in bytes, and last modified timestamp. Now Townie (and any MCP client) can also read blob content via an updated MCP tool.

Townie onboarding for new users

Onboarding for new users now routes to a Townie prompt box, which can be skipped to instead create a val manually (like the legacy onboarding flow).

Improving Townie reliability

We fixed a few corner cases in Townie where (1) responses manually stopped in progress by the user would disappear from the chat, (2) duplicate messages would appear, and (3) you could still approve tool calls after stopping a response in progress.

CLI improvements

The vt CLI is a third way to use LLMs with Val Town (we recommend Townie, then MCP, then CLI—in that order). Thanks to JP from Datasketch and Halah from Swayable for bringing a couple vt login frictions to our attention.

Add a secure authentication layer to your vals

Wrap any val with the std/oauth middleware from the Val Town standard library. This will authorize users based on their membership in your Val Town org (i.e. your teammates) or by their username or user ID. Or just add a gate that someone must have a Val Town account to access your val, to keep out spammers. It's sort of like Google OAuth meets Cloudflare Zero Trust, but for Val Town.

val-town-oauth.png

This is a major unlock for internal tools that need to be secured behind an authentication wall. Thanks to Cole Lawrence who pushed for this feature!

Migrating auth providers: from Clerk to BetterAuth

After experiencing a few too many stability issues with Clerk, we're migrating to BetterAuth. We are optimistic about the greater control and stability we'll have with BetterAuth.

If the transition goes smoothly, you should hardly notice (if at all). You may have to mark login email links as not spam or re-approve GitHub OAuth. Please email support@val.town if you run into bugs. Thanks in advance for your help with the transition.

Opt in to receive Error notification email

The default notification setting for val errors is now website-only, instead of website + email. You can opt back into error email in val.town/settings/notifications. Notifications can trigger on the first occurrence of an error or every error, depending on your preference.

We had trouble with other email (e.g. login links) going to spam, possibly caused by sender reputation harm inflicted by error notifications. Error emails are often low-information and come from abandoned vals, anyway. Email sender reputation is a Hard Problem that Tom is working hard to improve.

Dashboard redesign

The logged-in val.town dashboard now includes a switcher to toggle between orgs, namely your personal account and Teams org. This is table stakes for more and more and more of you who are using Val Town both personally and at work.

Access email headers in email trigger vals

Email-triggered vals can now access headers (like Message-ID) in the email object passed to the val as input. With Message-ID from an inbound email, you can set In-Reply-To on your reply so that strict-threading clients like Outlook will properly group the messages. Thanks to dt for requesting this!

DB Pro Now Supports Val Town

DB Pro, a database desktop client, now supports Val Town SQLite as a database provider. This is a powerful query UI for SQLite power users in Val Town, if you graduate out of the built-in SQLite admin panel in a val's sidebar.

Upgraded to Deno 2.7.5

Val Town code runs on Deno. Before upgrading to 2.7.5, we were on version 2.5.5.

Alternatives page

We wrote an Alternatives page to help prospective customers evaluate Val Town against similar services. As Steve wrote about in his February investor update, Val Town is still finding true product-market fit, which can be tricky for such a broad tool. The alternatives page is part of the effort to publicly reason about where Val Town fits in the devtools ecosystem. Thanks to Justin Duke at Buttondown for modeling what a thoughtful alternatives page looks like.

We’re hiring!

Join our team and help build the future of programming.

View open roles →