Est. 2004 Beginner

Coffee

A hobbyist C-style language by an author known only as 'dingo', at version 0.98a by early 2004. It is known today from a single 99 Bottles of Beer program. It is not CoffeeScript.

Created by dingo (pseudonymous; real name not recorded)

Paradigm Imperative, in a C/Java-like curly-brace style (the only evidence is one surviving program; nothing in it is object-oriented)
Typing Apparently explicit: the one surviving declaration names a type (var i new int = 99). Whether types were checked, and when, is not documented anywhere
First Appeared 2004
Latest Version 0.98a, the only version ever mentioned, named in the 99 Bottles of Beer program that was on the site by 15 February 2004

Coffee is a small hobbyist programming language by an author who signed their work only as “dingo”. It had reached a version called 0.98a by early 2004. Almost everything known about it comes from one artefact: a 99 Bottles of Beer program submitted to 99-bottles-of-beer.net. There it was listed as entry 136 and filed as a “real language” rather than an esoteric one. The program’s header points to the author’s website. That site was a Flash cartoon page, and no copy of a Coffee compiler, interpreter or manual has been found in any archive.

Coffee is not CoffeeScript, the JavaScript-targeting language Jeremy Ashkenas began in December 2009. It is also not COFFEE, the scripting language of Maxon’s Cinema 4D. Both names come up whenever “Coffee” is searched, and both have been confused with this one (see A crowded name below).

History & Origins

The author and the site

The program’s header reads:

1
2
// Coffee programming language version 0.98a
// by dingo www.TheBrownStuff.co.nr

TheBrownStuff.co.nr was a free domain from the .co.nr redirection service. Its earliest Wayback Machine capture, from 24 August 2003, shows a one-frame page titled “TheBrownStuff Internet Cartoons”, which advertised “Flash Cartoons, free to view and download” and edited joke images. The frame loaded dingo.windodesign.com/thebrownstuff/, a subdomain named after the same handle. The pages behind it were Flash movies (snakemenu.swf, later interface.swf), which the archive saved without any readable text. No page in the captures mentions Coffee.

In late September 2004 the redirect was pointed at caffeinecoder.com. The name suggests a coffee-themed identity, but nothing on the site says so. The CaffeineCoder portal announced itself as online on 9 November 2004. Its project page, captured in December 2004 and May 2005, lists only PHP web software: web file managers (DingoFTP2, dFtp3), forums, a photo gallery entered in the Zend PHP5 contest, a blog engine and a shopping cart. Coffee is not among them, and it is not mentioned in any archived news post or forum topic on the site. By March 2008 the domain had been re-registered by an unrelated developer, whose first post said they had found it available the previous December.

Dating the language

Two different dates attach to Coffee in the 99 Bottles archive, and the later one is misleading.

  • 15 February 2004. The old, pre-database 99 Bottles site kept a hand-written changelog. On 15 February 2004 it records “Added Coffee — Anonymous”, in a batch of 25 changes logged that day. The same batch added CDC CPU COMPASS, Assembler (EDSAC) and EUPHORIA, and noted “600 examples are online”. Comparing the site’s C page before and after confirms this. A mirror capture from December 2003 has 42 entries without Coffee, and the March 2004 page has 44, the two new ones being Coffee and CDC CPU COMPASS.
  • 20 April 2005. When 99 Bottles of Beer relaunched as a database-driven site in spring 2005, older programs were imported with a common stamp. Coffee’s entry reads “Date: 04/20/05”, but so do its alphabetical neighbours, COCOA (#135) and Cold Fusion (#139). That date records the migration, not the submission.

So Coffee existed, at version 0.98a, no later than February 2004. Its author’s domain dates from at least August 2003, so work on the language may well be older, but there is no evidence either way. This page uses 2004, the year of the earliest dated record.

The encyclopedia’s source catalogue lists Coffee as a 2009 object-oriented web language, with 2017 as its last commercial year. None of that is supported by the surviving record. The year, the “web” category and the object orientation all fit CoffeeScript, which suggests the two names were conflated at some point.

Design Philosophy

No specification, manual or statement of intent survives, so Coffee’s goals can’t be stated with confidence. The version number 0.98a suggests an author working towards a 1.0 release, but no later version is known. The one program is written in the familiar curly-brace style of C, Java and JavaScript. However, it names no language as an inspiration, so no influences are listed on this page. One of the entry’s reader comments made the same observation in 2008: “Looks to me like an excerpt from a java programm, except the var-word”.

Key Features

Without an implementation or documentation, the only honest way to describe Coffee is to report what is visible in the surviving code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Coffee programming language version 0.98a
// by dingo www.TheBrownStuff.co.nr

var i new int = 99;
while (i > 0) {
  if (i > 1) {
    println(i+" bottles of beer on the wall,");
    println(i+" bottles of beer,");
    println("Take one down, pass it around,");
    println((i--)+" bottles of beer on the wall.");
  } else {
    println("One more bottle of beer on the wall,");
    println("One more bottle of beer,");
    println("Take it down, pass it around,");
    println("No more bottles of beer on the wall.");
    i--;
  }
}

Several things stand out:

  • An unusual declaration form. var i new int = 99; puts a declaration keyword (var), then the name, then new with a type, then an initialiser. No mainstream language spells a declaration this way. It seems to combine JavaScript’s var with Java’s new, but whether new int created an object, reserved storage or simply named a type is not recorded.
  • C-family control flow. while, if/else, braces, semicolons and // line comments are used just as they are in C, Java or JavaScript.
  • Post-decrement inside an expression. (i--) is used as a value inside a function argument, which implies C-style expression semantics.
  • A built-in println. Output is a bare println(...) call, with no object or package prefix like Java’s System.out.
  • String concatenation with +. i+" bottles of beer on the wall," joins an integer and a string without an explicit conversion. That implies automatic number-to-string coercion, as in Java or JavaScript.

The program also has a probable bug. If i-- behaves as it does in C, Java and JavaScript, it yields the value before decrementing. The fourth line of every verse would then repeat the starting count (“99 bottles of beer on the wall” right after taking one down), not print 98. If Coffee’s -- instead decremented first, the counts would come out right but the verse for two bottles would end “1 bottles of beer on the wall.” Either way the output is slightly off. Whether Coffee’s -- really worked this way can’t be checked, because nothing survives that could run the program.

Nothing in the program is object-oriented: there are no classes, methods or objects. The “OOP” label in the source catalogue cannot be confirmed.

Evolution

There is no evidence of Coffee changing after its one appearance. The only version ever mentioned is 0.98a. No later program, update to the 99 Bottles entry, announcement or discussion of the language has been found. From late 2004 onward, the author’s archived output is all PHP web applications and Flash cartoons.

Current Relevance

Coffee is effectively extinct:

  • No implementation survives. No download of a Coffee compiler or interpreter appears in any archived capture of TheBrownStuff.co.nr, dingo.windodesign.com or caffeinecoder.com. Readers asked about this too. In 2008 one commenter wrote, “Where can you get a compiler for this? The link in the source redirects to some other website that apparently has nothing to do with Coffee.” In 2009 another said, “they need to get a real link to this so people can use it!”
  • No documentation survives. No manual or specification exists, and Coffee has no Esolang wiki or Wikipedia article.
  • Its one public record is gone from the live web. The 99-bottles-of-beer.net domain no longer resolves. The Coffee entry and its five reader comments survive only in Wayback Machine captures. The last full capture, from November 2024, shows an average score of 2.93 from 14 votes.

A crowded name

“Coffee” and its variants have been used for several unrelated languages, and they are easy to mix up:

LanguageWhenWhat it is
Coffee (this page)by February 2004dingo’s hobbyist C-style language, version 0.98a, known from one 99 Bottles program
COFFEE (also written C.O.F.F.E.E.)Cinema 4D eraThe built-in scripting language of Maxon’s Cinema 4D 3D software, suggested by a 2009 reader comment on the 99 Bottles entry
CoffeeScript13 December 2009 (first commit); 1.0.0 on 24 December 2010Jeremy Ashkenas’s language that compiles to JavaScript, whose year and web focus match the catalogue data wrongly attached to this entry

Why It Matters

Coffee is a good example of how a language can be known by name and by a single program yet impossible to run. The 99 Bottles of Beer archive kept one program for more than twenty years. The author’s own sites, a free redirect domain, a hosted subdomain and a personal portal, lasted about four years between them. The Coffee entry also shows how catalogue metadata drifts. Two different dates recorded on one site, a name that collides with a much better-known language, and an eventual reclassification as a 2009 object-oriented web language all compounded one another until the listing described something else. The surviving record supports only this: a small C-like language by a pseudonymous author, at version 0.98a by February 2004, never documented and never seen again.

Timeline

2003
Earliest Wayback Machine capture (24 August) of www.TheBrownStuff.co.nr, the free .co.nr redirect later named in the Coffee program. At this point it frames a Flash cartoon site hosted at dingo.windodesign.com
2004
On 15 February, the 99 Bottles of Beer changelog records 'Added Coffee', credited to 'Anonymous'. It is one of 25 changes logged that day, in the batch that took the site to 600 examples
2004
Earliest capture (9 March) of the site's 'C' page with the Coffee program, headed 'Coffee programming language version 0.98a / by dingo www.TheBrownStuff.co.nr'
2004
By late September, TheBrownStuff.co.nr redirects to caffeinecoder.com. The CaffeineCoder portal goes online on 9 November, and its project list names only PHP web applications, never Coffee
2005
99 Bottles of Beer relaunches with a database. Coffee becomes entry 136, credited to 'dingo' and stamped 04/20/05, which is the bulk-import date shared by its neighbouring entries, not a submission date
2008
By March, caffeinecoder.com has been re-registered by an unrelated developer, and the last known home of Coffee's author is gone
2009
On 7 November, a reader comment on the entry suggests that 'Coffee or C.O.F.F.E.E.' is Cinema 4D's scripting language, a different language with a similar name
2026
The 99-bottles-of-beer.net domain no longer resolves. The Coffee entry, the only known Coffee source code, survives only in web archives

Notable Uses & Legacy

99 Bottles of Beer project

Entry 136 on 99-bottles-of-beer.net, an 18-line song program by the language's author, is the only known surviving Coffee source code. It collected five reader comments and an average score of 2.93 from 14 votes

Running Today

Run examples using the official Docker image:

docker pull
Last updated: