<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg" -->

---
title: Bruno v4.0.0: Native AI, Typed Variables, and Apps
description: Bruno v4.0.0 introduces a native AI assistant inside the request tab (bring-your-own-key), a new Apps feature for embedding custom HTML/JS UIs alongside...
canonical: https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Bruno v4.0.0: Native AI, Typed Variables, and Apps | daily.dev
og:description: Bruno v4.0.0 introduces a native AI assistant inside the request tab (bring-your-own-key), a new Apps feature for embedding custom HTML/JS UIs alongside...
og:url: https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg
og:image: https://api.daily.dev/og/posts/ONS1GiNYG.png
og:image:alt: Bruno v4.0.0: Native AI, Typed Variables, and Apps
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Bruno v4.0.0: Native AI, Typed Variables, and Apps

**[Bruno Blog](https://daily.dev/sources/usebruno)** · 12 min read · 0 upvotes · 0 comments

## Summary

Bruno v4.0.0 introduces a native AI assistant inside the request tab (bring-your-own-key), a new Apps feature for embedding custom HTML/JS UIs alongside requests or collections, and a rebuilt secret management system that unifies secrets with environments and adds native AWS Secrets Manager, Azure Key Vault, and HashiCorp Vault support. Variables are now typed (numbers, booleans, objects) instead of always strings, Collection Docs got a full redesign with shareable pages and an interactive Playground, and large collections get a beta caching option for faster startup. The release includes breaking changes: secrets.json is deprecated in favor of environment-based secrets, script methods like bru.setEnvVar() now persist to disk by default, and CLI JUnit output changed its classname format. The legacy .bru format is now deprecated in favor of OpenCollection YAML, with at least 12 months of continued support.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.usebruno.com/bruno-v4-0-0-native-ai-typed-variables-and-apps>

## Questions this post answers

### What breaking changes do I need to review before upgrading Bruno to v4?

Bruno v4 moves secret configuration out of secrets.json and into environments, deprecating the old {{$secrets.name.key}} syntax in favor of {{name.keyname}} (old syntax removed after three months). Scripts like bru.setEnvVar(), bru.deleteEnvVar(), and bru.setGlobalEnvVar() now persist changes to disk by default, so secrets should use { persist: false } or switch to bru.setVar(). CLI JUnit output also changed its classname format from request URL to collection path.

_Track breaking changes like this Bruno v4 upgrade on daily.dev before they hit your CI pipeline._

### How do typed variables work in Bruno v4 compared to v3?

Bruno v4 gives variables native JavaScript data types (strings, numbers, booleans, objects) across collections, environments, folders, and requests, eliminating the need for manual JSON.stringify/JSON.parse or parseInt calls that were required in v3, where every variable was stored as a string. Variable mutations also persist by default, and a full set of APIs for managing collection variables was added.

_Developers weighing API client upgrades follow scripting changes like this on daily.dev._

### Is the .bru file format being removed from Bruno?

No, the .bru format is deprecated but not removed as of Bruno v4, and it will continue to work for at least the next twelve months while feature parity is maintained between .bru and the new OpenCollection YAML format. A guided in-app migration tool is available to help move collections to YAML at your own pace.

_Keep tabs on format deprecation timelines like Bruno's .bru sunset on daily.dev._

## Similar posts on daily.dev

- [Bruno AI: Bring Your Own Key, Keep Secrets Local](https://daily.dev/posts/bruno-ai-bring-your-own-key-keep-secrets-local-2wyeze0b0) · Bruno Blog · 1 upvotes · 0 comments
- [How to Use Variable Types in Bruno v4: A Complete Guide](https://daily.dev/posts/how-to-use-variable-types-in-bruno-v4-a-complete-guide-eonuss4pw) · Bruno Blog · 0 upvotes · 0 comments
- [How to Use Google Cloud Secret Manager in Bruno](https://daily.dev/posts/how-to-use-google-cloud-secret-manager-in-bruno-aixjoqkpx) · Bruno Blog · 0 upvotes · 0 comments
- [How to Share Bruno Collections: Git, Export, and Import](https://daily.dev/posts/how-to-share-bruno-collections-git-export-and-import-qz4ne3qtg) · Bruno Blog · 0 upvotes · 0 comments

---

Tags: [#testing](https://daily.dev/tags/testing), [#secrets-management](https://daily.dev/tags/secrets-management), [#websocket](https://daily.dev/tags/websocket)

[View this post on daily.dev](https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Bruno v4.0.0: Native AI, Typed Variables, and Apps","url":"https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg"},"datePublished":"2026-08-23T07:21:18.759Z","dateModified":"2026-08-23T07:24:54.872Z","description":"Bruno v4.0.0 introduces a native AI assistant inside the request tab (bring-your-own-key), a new Apps feature for embedding custom HTML/JS UIs alongside...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3e2669be94f7c2c6ec73ae1adf77a94f?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3e2669be94f7c2c6ec73ae1adf77a94f?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Bruno Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Bruno Blog","logo":"https://media.daily.dev/image/upload/s--n6YntNuw--/f_auto,q_auto/v1787469611/logos/usebruno?_a=BAMAMicg0","url":"https://daily.dev/sources/usebruno"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"testing,secrets-management,websocket","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Bruno Blog","item":"https://daily.dev/sources/usebruno"},{"@type":"ListItem","position":3,"name":"Bruno v4.0.0: Native AI, Typed Variables, and Apps"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/bruno-v4-0-0-native-ai-typed-variables-and-apps-ons1ginyg#faq","mainEntity":[{"@type":"Question","name":"What breaking changes do I need to review before upgrading Bruno to v4?","acceptedAnswer":{"@type":"Answer","text":"Bruno v4 moves secret configuration out of secrets.json and into environments, deprecating the old {{$secrets.name.key}} syntax in favor of {{name.keyname}} (old syntax removed after three months). Scripts like bru.setEnvVar(), bru.deleteEnvVar(), and bru.setGlobalEnvVar() now persist changes to disk by default, so secrets should use { persist: false } or switch to bru.setVar(). CLI JUnit output also changed its classname format from request URL to collection path. Track breaking changes like this Bruno v4 upgrade on daily.dev before they hit your CI pipeline."}},{"@type":"Question","name":"How do typed variables work in Bruno v4 compared to v3?","acceptedAnswer":{"@type":"Answer","text":"Bruno v4 gives variables native JavaScript data types (strings, numbers, booleans, objects) across collections, environments, folders, and requests, eliminating the need for manual JSON.stringify/JSON.parse or parseInt calls that were required in v3, where every variable was stored as a string. Variable mutations also persist by default, and a full set of APIs for managing collection variables was added. Developers weighing API client upgrades follow scripting changes like this on daily.dev."}},{"@type":"Question","name":"Is the .bru file format being removed from Bruno?","acceptedAnswer":{"@type":"Answer","text":"No, the .bru format is deprecated but not removed as of Bruno v4, and it will continue to work for at least the next twelve months while feature parity is maintained between .bru and the new OpenCollection YAML format. A guided in-app migration tool is available to help move collections to YAML at your own pace. Keep tabs on format deprecation timelines like Bruno's .bru sunset on daily.dev."}}]}
```

