Open-source project
TodePond/GulfOfMexico avatar
TodePond/GulfOfMexico

Gulf of Mexico is a joke language where every line ends in an exclamation mark and arrays start at -1

perfect programming language

13,632 stars470 forksUnknownNOASSERTION

At a glance

What is it?
TodePond/GulfOfMexico, formerly DreamBerd, is a satirical language specified entirely through its README. It has declarations that can be constant twice, lifetimes in seconds, and no loops.
Who is it for?
Read Gulf of Mexico as satire and as a catalogue of language-design jokes, not as a tool. Nothing in the repository text offers an interpreter you can install, so do not plan a project on it.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 10 days ago.
What is it written in?
GitHub does not report a main language for this repository.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • TodePond/GulfOfMexico13,632 ★ · +20
Star history
Repository2026-10-162026-11-07
TodePond/GulfOfMexico13.6k13.6k

20 Stars in the last 22 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Every statement ends in an exclamation mark, and a question mark prints debug info

The first rule of the language is punctuation. Be bold: end every statement with an exclamation mark.

java
print("Hello world")!

More exclamation marks are allowed for the extra-bold.

java
print("Hello world")!!!

Ending a line with a question mark instead prints debug info about that line to the console.

java
print("Hello world")?

That takes the exclamation mark away from its usual job, so the not operator has to move. In Gulf of Mexico it is a semicolon.

java
if (;false) {
   print("Hello world")!
}

The code samples are tagged java in the Readme, but the syntax is its own: the arrow functions, the semicolon negation and the trailing punctuation do not parse as Java. The project describes itself in one line as a perfect programming language.

Four declaration kinds make const and var combine into constant constants and variable variables

Declarations take two keywords, and the pair decides what can happen to the value. A const const can't be changed in any way. A const var can be edited but not re-assigned, so calls like name.pop() work. A var const can be re-assigned but not edited. A var var allows both.

java
const const name = "Luke"!
var var name = "Luke"!
name = "Lu"!
name.push("k")!

A third keyword was added for 2023 under the heading Immutable Data. const const const makes a constant constant constant, whose value will become immutable and will never change. The Readme warns that the keyword will affect all users globally forever.

java
const const const pi = 3.14!

The joke has a consistent shape: the language takes a real distinction from JavaScript, between reassigning a binding and mutating its contents, and gives each half its own keyword. The cost is that every declaration needs two keywords before the name, so a one-line variable becomes a decision about two separate permissions. Reading someone else's code means decoding the pair each time: const var means the contents can change but the binding cannot, and var const means the opposite. The constant constant constant keyword goes one step further and reaches outside the program, since its stated effect is on all users globally forever, which no ordinary declaration claims.

Arrays start at -1 and accept float indexes

Some languages start arrays at 0, which the Readme says is unintuitive for beginners. Some start at 1, which isn't representative of how the code actually works. Gulf of Mexico starts at -1.

java
const const scores = [3, 2, 5]!
print(scores[-1])! //3
print(scores[0])!  //2
print(scores[1])!  //5

Float indexes arrived in a section labelled new for 2022. Assigning to index 0.5 inserts a value between existing entries, and the printed result is [3, 2, 4, 5].

java
const var scores = [3, 2, 5]!
scores[0.5] = 4!
print(scores)! //[3, 2, 4, 5]

Naming is just as loose. Variables and constants can be named with any Unicode character or string, including emoji and numbers. The example const const 5 = 4 makes print(2 + 2 === 5) output true. A reader can follow the semantics from the comments alone, which is how the Readme works as a specification.

Lifetimes in lines and seconds replace scope, and a negative lifetime hoists

The language has a built-in garbage collector that cleans up unused variables. For anyone who wants to be extra careful, a variable can carry a lifetime in angle brackets.

java
const const name<2> = "Luke"! //lasts for two lines
const const name<20s> = "Luke"! //lasts for 20 seconds

By default a variable lasts until the end of the program. A longer lifetime makes it last between program runs, and Infinity lasts forever. That is persistence expressed as a variable annotation.

java
const const name<Infinity> = "Luke"! //lasts forever

Hoisting uses a negative lifetime. The variable exists before its creation and disappears after it.

java
print(name)! //Luke
const const name<-1> = "Luke"!

The when keyword is the nearest thing to reactive state. For a variable that has to vary, when (health = 0) checks the variable each time it mutates. Loops are dismissed in one sentence: they are a complicated relic of archaic programming languages, and GulfOfMexico has none.

Booleans have a third value, maybe, stored in one and a half bits

Booleans can be true, false or maybe. The Readme example is a key tracker. Event listeners write true on keydown and false on keyup into an object, and isKeyDown returns maybe when a key has never been seen.

java
function isKeyDown(key) => {
   if (keys[key] = undefined) {
      return maybe!
   }
   return keys[key]!
}

A technical note follows: booleans are stored as one-and-a-half bits.

Equality has four levels. == is a loose check, so 3.14 == "3.14" is true. === is more precise and makes the same comparison false. ==== is even more precise: with const const pi = 3.14, pi ==== pi is true, 3.14 ==== 3.14 is true, and 3.14 ==== pi is false. A single = is the least precise, and 3 = 3.14 is true.

Dividing by zero returns undefined, and print(3 / 0) shows it. The tri-state boolean and the tiered equality are both a joke on JavaScript's own coercion rules. The practical effect for a reader is that a comparison result depends on how many equals signs were typed, so the same two values can be equal on one line and different on the next.

Whitespace sets precedence, indents are three spaces, and function can be spelled f

Arithmetic uses significant whitespace to specify the order of operations.

java
print(1 + 2*3)! //7
print(1+2 * 3)! //9

Fractions are supported, as are number names, so one + two prints 3. For indentation, all indents must be 3 spaces long, and negative 3 spaces is also allowed, which the Readme demonstrates with a function whose body is dedented below its opening line.

The function keyword accepts any letters from the word function, as long as they stay in order.

java
function add(a, b) => a + b!
func multiply(a, b) => a * b!
fun subtract(a, b) => a - b!
fn divide(a, b) => a / b!
functi power(a, b) => a ^ b!
f inverse(a) => 1/a!

The Readme's own sample for this reads functi, which is the form that matches the rule. Strings can use single quotes, double quotes, triple quotes, any number of quotes, or even zero, as in const const name = Luke. A note on interpolation asks users to remember their regional currency.

Installation is a loop of installers, and the repository holds no visible interpreter

The installation section is the longest joke in the Readme. To install Gulf of Mexico on the command line, first install the Gulf of Mexico installer. To install the installer, install the Gulf of Mexico installer installer. Under a heading new for 2022, the Create Gulf of Mexico App app installs everything for you.

There is no real command to copy. The top-level files are CODE_OF_CONDUCT.md, Examples.md, LICENSE.md, SECURITY.md, shapes.png, a twotwotwotwo.db file and a wallpaper_dont_upload.png, beside folders such as docs/, examples/, res/, suite/ and test/. The primary language is not detected by GitHub, and none of the listed files is an obvious interpreter.

The recent release titles carry the project's one rename and other jokes. vU.S.A, dated 2024-11-07, is titled DreamBerd congratulates President Trump. v, dated 2025-02-11, is titled DreamBerd has been renamed to Gulf of Mexico. vSuper, dated 2026-10-10, is titled AI has been renamed to SI. The last push was on 2026-10-28, and the repository is not archived. Homepage: dreamberd.computer.

Editorial conclusion

Read Gulf of Mexico as satire and as a catalogue of language-design jokes, not as a tool. Nothing in the repository text offers an interpreter you can install, so do not plan a project on it. Check the examples page and the repository tree for a runnable implementation before assuming one exists, and treat the license as unresolved until you read LICENSE.md.

Frequently asked questions

What is Gulf of Mexico, the programming language?

It is a joke programming language by TodePond that calls itself a perfect programming language. Its features include statements ending in an exclamation mark, arrays that start at -1 and no loops.

What are the alternative names of the Gulf of Mexico programming language?

It was called DreamBerd until a release dated 2025-02-11 renamed it to Gulf of Mexico. The homepage is still dreamberd.computer.

How do you install the Gulf of Mexico language?

The Readme gives no real command. It says to install the Gulf of Mexico installer, which needs the installer installer, or to use the Create Gulf of Mexico App app.

Where do arrays start in Gulf of Mexico?

At index -1, so scores[-1] is the first element. Float indexes are also allowed, and assigning to scores[0.5] inserts a value between entries.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. TodePond/GulfOfMexico on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/todepond-gulfofmexico.svg)](https://hysenlabs.com/projects/todepond-gulfofmexico)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/todepond-gulfofmexico.svg)](https://hysenlabs.com/projects/todepond-gulfofmexico)

Was this useful?