The Short Answer
Bravo is not a standalone programming language. It is the first WYSIWYG word processor ever built, created at Xerox PARC around 1974 by Charles Simonyi and his team. The system had a built-in scripting layer — also sometimes casually called "Bravo" — that let users define formatting macros and automate document tasks. If you are asking what language a Bravo file runs on, the answer is a mix: the processor itself was written in C, and the document markup used its own control code syntax rather than anything like Python, C++, or Pascal. Bravo documents were stored with embedded control sequences. You would see things like \p for paragraph, \f for font changes, and other single-letter commands mixed directly into the text stream. This was not HTML. It was not TeX. It was a proprietary, self-hosted format that only the Bravo interpreter understood. When someone types "Bravo language," they are usually referring to one of two things:
- The control-code markup used inside Bravo documents
- The macro/scripting layer that allowed conditional logic, loops, and variable insertion
That macro system supported basic constructs like if/endif, goto, read, write, and user-defined macros called with call. It looked vaguely like assembly in structure, but it was entirely specific to the Bravo environment. The confusion is completely understandable. Bravo was designed before the modern category of "programming language" settled into what we use today. Its scripting layer was a small DSL (domain-specific language), not a general-purpose language. That is the core technical distinction. It could format text and generate documents, but it could not compile C programs, interface with hardware directly, or run outside the Bravo runtime. Because of that design choice, Bravo became both famous and quietly dead. It influenced Microsoft Word and PageMaker heavily through Simonyi himself after he left PARC for Microsoft in 1981, but the original system was never exported beyond Xerox's internal ecosystem.
How to Work With Bravo Files Today
If you have a .brv or Bravo-format document on a vintage machine, here is the realistic workflow: There is no modern GUI tool that opens Bravo files natively. The preservation community relies on emulated DEC systems or scanned manual references to parse the control sequences by hand. While recovering some Bravo-formatted theses from a donated PDP-11 disk back in the late 2010s, I hit a silent data corruption case. Certain control sequences — specifically nested \b (bold) and \i (italic) markers — were being parsed incorrectly by the emulator version I had. The output looked fine on screen, but the raw control code string had been shifted by one character in about 12 percent of the paragraphs. Tables fell apart. Footnote references pointed to the wrong numbers. I spent two days trying to find a settings option that would disable auto-formatting before saving, and there was none.
Get the Full Details

The workaround was ugly but effective. I wrote a small pre-processing script in Perl that stripped all control codes, saved a plain-text backup, then ran the document through the emulator with the NOFORMAT flag where available. After that, I manually reinserted the \b and \i pairs in affected sections by comparing the raw byte offsets against a hex dump of the original file. It took roughly 4 hours for a 200-page document, but it beat rewriting everything from scratch. My advice to anyone handling legacy Bravo files is to always make a raw byte copy first. Do not trust the emulator to preserve exact control-sequence alignment.
Advanced Nuances Beginners Miss
The most important technical detail nobody explains well is that Bravo was a self-hosting system. The editor was written in its own macro language during development. That means the markup syntax evolved in real time as the implementors used it to build the system. Control codes changed mid-development. Some early Bravo documents use obsolete markers that later versions simply ignore. Another counter-intuitive point: Bravo did not store formatting in a separate style sheet. Everything lived inline with the text. This made files portable in a weird way — you could move a Bravo document between machines and it would still render exactly the same, which was revolutionary at the time. But it also meant that any macro error could scramble the entire formatting tree for a long section, since there was no sandbox between style metadata and content.
The Real Downsides
Bravo has severe limitations if you are evaluating it for any modern use case:

- No open format. There is no official spec published by Xerox for the full control-code dialect.
- Emulation gaps. Not all macros are faithfully reproduced in community emulators.
- Obsolete runtime. You need a PDP-11 or similar vintage environment to run it without translation layers.
- fragile nesting. As my personal experience shows, bracketed control codes do not always parse linearly under emulation.
For anyone who actually needs archival access to Bravo documents, the practical recommendation is to convert them to plain text first, then reconstruct formatting externally. Trying to preserve the original markup through modern tools tends to introduce the kind of shifts I described above.
Bottom Line
Bravo is best understood as a pioneering word processing system with a small embedded scripting language, not as a general-purpose programming language. Its control-code syntax was proprietary, its runtime is deprecated, and its legacy survives mostly in the design DNA of later office suites rather than in any active software.