Est. 2012 Beginner

pine

pine (パイン, short for 'programming in the net') was a small, PHP-flavoured, browser-based scripting language written by a Japanese hobbyist known only as 'uechi' for their own make-a-program website, mkprog.jp. Its entire surviving public record is one 99 Bottles of Beer program submitted on 12 July 2012 and a single one-paragraph help page captured by the Wayback Machine; the site, the domain and the language itself have since vanished

Created by A Japanese hobbyist who signed the 99 Bottles of Beer submission as 'uechi' and gave http://mkprog.jp/ as their site. No real name, affiliation or location beyond the .jp domain and the Japanese-language documentation is recorded anywhere

Paradigm Imperative, procedural scripting. The only surviving program uses assignment, integer arithmetic, arrays, string concatenation, if/elseif/else and a C-style for loop; no functions, objects or higher-order constructs appear. Language catalogues that call pine 'functional' have no support in the surviving material
Typing Dynamic and implicit as far as the one program shows: variables are created by assignment without declaration, array slots are created on first write, and integers are silently converted to text when concatenated. No type documentation survives
First Appeared By 12 July 2012 at the latest, the date of the 99 Bottles of Beer submission; the Internet Archive first captured the help page on 1 September 2012. Some language catalogues give 2004, a date for which no evidence of any kind has been found
Latest Version None documented. pine was never distributed as a downloadable implementation; it existed only as the scripting language of the mkprog.jp website, whose domain is no longer registered

pine - the author always wrote it in lower case, and glossed it in Japanese as パイン, “pine” - was a small scripting language created by a Japanese hobbyist for a website called mkprog.jp, where visitors could write and run programs in their browser. Its help page explained the name as an abbreviation of “programming in the net” and described it as “a programming language for making programs on the Internet. It is used to make programs on this site.” That sentence, one 19-line program and a handful of Wayback Machine timestamps are the whole of what survives. The site is gone, the domain is unregistered, the author is known only by the handle “uechi”, and the catalogue that preserved the single program has itself gone offline. This page is therefore less a biography of a language than a forensic report on how a language leaves traces, and on how those traces get garbled once it is gone.

pine should not be confused with the University of Washington’s Pine mail client, with TradingView’s Pine Script, with the PINE64 single-board computers, or with any of the several later hobby languages on GitHub that share the name (see “Not to be confused with” below).

History and Origins

What the record shows

Everything datable about pine comes from 2012. On 12 July 2012 (the catalogue’s “07/12/12”, in the month-first format it used throughout) a user signing as “uechi” submitted a program to 99-bottles-of-beer.net, the long-running German-maintained collection of the song “99 Bottles of Beer” in as many programming languages as its readers could supply. The submission form asked for a language name, an author, a website and an “Info” link; uechi gave “pine”, “uechi”, http://mkprog.jp/ and http://mkprog.jp/pine/help/pine.txt. The site’s volunteer editors - Oliver Schade, with Gregor Scheithauer and Stefan Scheler, according to its team page - reportedly reviewed submissions before publishing them; pine was filed under the category “real language” (the catalogue’s other categories included “esoteric language”) and assigned entry number 2913. By the time the Internet Archive first captured the page, on 27 November 2012, two visitors had rated it, for an average of 2.50 out of 5. Nobody ever left a comment.

The Internet Archive’s crawlers also followed the “Info” link, twice: on 1 September 2012 and again on 28 October 2012. Both times they retrieved the same file, about 1.2 kilobytes long (the Archive’s index lists it as 743 bytes, the size of the compressed record). It is not really a text file, despite its name, but a short Shift_JIS-encoded HTML page with a stylesheet for “MS Pゴシック” fonts, a link labelled ヘルプトップ (“help top”) pointing at ../pinehelp.exe, and one paragraph:

pine(パイン)は “programming in the net” の略で、インターネットでプログラムを作るためのプログラミング言語です。このサイトでプログラムを作るのに使います。

pine is short for “programming in the net”, and is a programming language for making programs on the Internet. It is used to make programs on this site.

That is the only page of mkprog.jp the Archive ever saved. Its home page, the help index behind pinehelp.exe, the program editor and whatever else the site contained were never captured, and no other web archive, search engine or blog is known to hold a copy. A WHOIS query to the Japanese registry on 30 August 2026 returned “No match”: the domain has not merely gone dark but has been released.

What can be inferred

A few things follow from the fragments with reasonable confidence. The domain name mkprog.jp reads naturally as “make program”, and the help text says pine “is used to make programs on this site”, so mkprog.jp was evidently an in-browser programming service: a form into which a visitor typed pine source, and a server that executed it and returned the output - the same idea as the online code-runners that were multiplying at the time, but with a home-made language rather than an existing one. The help system was served by a CGI executable with a .exe extension, which says something about the hosting but nothing that can be stated as a platform claim. The documentation was in Japanese only, the character encoding was Shift_JIS, and the only known user is the author.

Nothing can be said about when pine was written. The 12 July 2012 submission is a latest bound on its creation, not a date of birth, and it is entirely possible that the site had existed for some time before uechi decided to advertise it on 99 Bottles. But nothing supports the year 2004 that appears against pine in derived language lists; the earliest evidence of any kind is from 2012, and 2004 is most plausibly a re-cataloguing artifact of the sort documented on this site’s hackMongo page, where a mid-1990s language acquired a spurious “2010” in the same way.

Design Philosophy

The one sentence of stated intent - a language “for making programs on the Internet” - places pine in the tradition of languages designed to be typed into a web page rather than installed. That tradition imposes its own design pressure: the syntax must be learnable from a short help page, must tolerate being typed into a <textarea>, and must be executable safely by a server on behalf of strangers. The surviving program is consistent with all three. It uses no declarations, no types, no imports and no I/O beyond print; its syntax is the lowest common denominator of C, PHP and JavaScript that anyone who had seen any of those languages could write from memory.

Whether uechi had further ambitions - functions, a standard library, persistence, a community of mkprog.jp programmers - is unknown, and it would be dishonest to invent a philosophy from a single program.

Key Features

The complete surviving corpus

Here is every line of pine known to exist, exactly as published on 99-bottles-of-beer.net in July 2012:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
i=99;
ary[0]=" bottle of beer on the wall, ";
ary[1]=" bottle of beer.\n";
ary[2]="Take one down and pass it around, ";
ary[3]=" bottles of beer on the wall.\n\n";

swary[0]="Take one down and pass it around, ";
swary[1]="Go to the store and buy some more, ";
str="no more";
for(i=i;0<=i;i--){
	if(i==1){
		print(i.ary[0].i.ary[1].swary[0].str.ary[3]);
	}elseif(i==0){
		print(str.ary[0].str.ary[1].swary[1]."99".ary[3]);
	}else{
		print(i.ary[0].i.ary[1].ary[2].(i-1).ary[3]);
	};
};

(The program, incidentally, has the plural slightly wrong: it prints “1 bottle of beer” correctly but also “99 bottle of beer”, because ary[0] and ary[1] are singular for every verse. That is a property of the sample, not necessarily of the language.)

What the program reveals

Reading the program as a linguist would read an inscription, the following features of pine can be stated with confidence:

FeatureEvidence in the program
Statements end with ;, including after a } that closes a block}; closes both the if chain and the for loop
Variables are created by plain assignment, without declaration or sigili=99;, str="no more";
Arrays are indexed with [ ] from zero and grow on first assignmentary[0]ary[3], swary[0], swary[1] with no prior declaration
String literals use double quotes and C-style escapes" bottle of beer.\n"
Strings are concatenated with ., as in PHP and Perli.ary[0].i.ary[1]…
Numbers convert to text implicitly in concatenationi.ary[0] and (i-1).ary[3]
Parenthesised arithmetic can appear inside a concatenation.(i-1).
C-style for(init; condition; step) with -- decrementfor(i=i;0<=i;i--)
Comparison with == and <=, the latter written Yoda-stylei==1, 0<=i
if / elseif / else with braces; elseif is one word, as in PHP}elseif(i==0){
Output through a print(...) callprint(...)
Tab indentation is accepted (so whitespace is insignificant)the body lines

The for(i=i; …) idiom - initialising the loop variable to itself because it was already set - hints that the for header may have required an initialiser expression, but a single instance is thin evidence and it may simply be a stylistic quirk.

Equally telling is what is absent. There are no function definitions, no var/let/$ markers, no semicolon-free lines, no comments (so the comment syntax is unknown), no string-formatting function, and no sign of anything functional: no first-class functions, no recursion, no immutability, no expression-oriented constructs. The “Functional” paradigm attached to pine in some catalogues is not supported by the only pine program in existence; the program is straightforwardly imperative.

Family resemblance

The dot concatenation operator, the elseif keyword and print are the fingerprints of PHP; the brace-and-semicolon skeleton, == and i-- are shared by C, JavaScript and PHP alike; the bare, undeclared, dynamically created variables and arrays are what a designer arrives at when the goal is a language that can be typed into a web form without ceremony. It is reasonable to describe pine as PHP-flavoured. It is not reasonable to say more, and this page records PHP as an influence only in that limited sense.

Evolution

There is no evolution to record. No version number, changelog, release or second program has been found. The help page captured in September 2012 was byte-for-byte identical when captured again in October 2012, and the language’s only external footprint, the 99 Bottles entry, was never updated, commented on or given an alternative version in the twelve years of snapshots (2012 to 2024) that exist for it.

Current Relevance

pine is extinct in the strict sense: there is no implementation anywhere. It was never distributed as a download or as source code, so when mkprog.jp went offline the interpreter went with it, and the lapse of the domain registration means there is no longer even a server to come back. The Internet Archive holds the two captures of the help page and roughly two dozen captures of the 99 Bottles entry, the last from November 2024; those files are the entire archaeological site.

As of 30 August 2026 - the date the research for this page was done - the situation has become slightly worse, because 99-bottles-of-beer.net itself no longer resolves. The Wayback Machine captured the live front page as recently as 8 May 2026, and by 30 May 2026 the domain was showing only a hosting provider’s placeholder page, so the outage dates from mid-2026 and may be temporary, but for the moment the only copies of the only pine program are in the Archive. Anyone wishing to cite it should use the archived URL given under Further Reading.

The name, meanwhile, has been thoroughly overwritten. “Pine” now means TradingView’s Pine Script to almost everyone who searches for a “Pine programming language”, and several unrelated hobby compilers named Pine have appeared on GitHub since 2015. None of them has any connection to uechi’s language, and none of their authors is likely to have known it existed.

Why It Matters

pine matters as a specimen. It is a near-perfect example of a class of language that programming-language history mostly ignores: the private scripting language written by one person for one website, documented in one paragraph, and used - as far as anyone can tell - by its author alone. Thousands of such languages must have existed in the 2000s and 2010s; this one happens to have left a trace because its author took ten minutes to submit a 99 Bottles of Beer program.

It also matters as a cautionary tale about provenance. Between 2012 and 2026 the record of pine passed through at least three hands: the author’s own help page (Japanese, accurate, minimal), the 99 Bottles catalogue (accurate but sparse: a name, a handle, a date, a link), and the derived language lists scraped from that catalogue, which somehow acquired a first-appearance year of 2004, a paradigm of “functional” and a category of “academic”. Each of those three attributes is confidently wrong or unsupported, and each is exactly the kind of plausible-looking metadata that a later compiler of a language list would copy without checking. The two surviving artifacts, one of a single paragraph and one of nineteen lines, are enough to show this - but only just. Had the Internet Archive’s crawler not followed one “Info” link in September 2012, there would be no way to know what pine was at all.

Not to be confused with

  • Pine (mail client) - the University of Washington’s text-mode e-mail program, first written in 1989, announced in March 1992, and frozen at version 4.64 when the university announced in 2006 that development had moved to Alpine. Its editor, Pico, gave its name to the unrelated Pico teaching language covered on this site.
  • Pine Script - TradingView’s language for charting indicators and trading strategies, introduced in the 2010s (secondary sources say 2013) and now at version 6. Essentially all current search results for “Pine programming language” refer to it.
  • PINE64 - a maker of ARM single-board computers and devices, not a language.
  • Later GitHub projects named Pine - among them a natively compiled ML-like language (repository created May 2015), a C++ implementation of a “pine programming language” (February 2018), a Rust-inspired type-checked language (December 2018) and an x86-64 compiler-construction exercise (July 2018), plus “pine”, a runtime environment for Elm, and a Haskell game framework of the same name on Hackage. All post-date uechi’s language and none refers to it.
  • Pico - the VUB teaching language whose page on this site sits alphabetically beside this one; no relation.

Further Reading

  • The archived 99 Bottles of Beer entry: http://www.99-bottles-of-beer.net/language-pine-2913.html, as captured by the Wayback Machine on 27 November 2012 (web.archive.org/web/20121127202214/…) and on roughly two dozen later dates up to 9 November 2024 - the only public pine program
  • The archived help page: http://mkprog.jp/pine/help/pine.txt, captured 1 September 2012 (web.archive.org/web/20120901203233/…) and 28 October 2012 - Shift_JIS HTML, the only surviving documentation
  • The archived 99 Bottles letter-P index (2013), which lists “pine | uechi | 07/12/12” between Pilot and PiXCEL, a few rows after Pike
  • This site’s pages on hackMongo and GWScript, two other languages whose public record consists almost entirely of a 99 Bottles of Beer submission, for the pattern of catalogue-induced date errors discussed above

Timeline

1989-1992
Name context, not this language: the University of Washington's Pine mail client is first written in 1989 and announced to the public in March 1992. For the next two decades 'pine' on a Unix system means this program, and its editor Pico lends its name to an unrelated teaching language covered elsewhere on this site
2012
12 July: a user signing as 'uechi' submits a 99 Bottles of Beer program in a language called 'pine' to 99-bottles-of-beer.net, giving http://mkprog.jp/ as their website and http://mkprog.jp/pine/help/pine.txt as the language's documentation. The site's editors accept it as entry number 2913 in the category 'real language'. This is the earliest datable evidence that pine existed
2012
1 September: the Internet Archive captures the help page pine.txt - a Shift_JIS HTML page of roughly 1.2 kilobytes (the Archive's index lists the compressed record as 743 bytes) stating that pine is short for 'programming in the net', is 'a programming language for making programs on the Internet' and 'is used to make programs on this site', with a link to a CGI program named pinehelp.exe as the help index. An identical capture follows on 28 October. These are the only two captures of anything on mkprog.jp that the Archive holds
2012
27 November: the Wayback Machine takes its first snapshot of the 99 Bottles page for pine, showing a score of 2.50 from two votes and no comments. The Archive goes on to capture the page roughly two dozen more times, the last on 9 November 2024; none of the later snapshots records any comment, change of score or alternative version
2013
Name context, not this language: TradingView's Pine Script, the charting language that dominates every web search for 'Pine programming language' today, is introduced (the year is given by secondary sources; TradingView's own documentation does not date version 1). From this point uechi's pine becomes effectively unsearchable
2012-2026
mkprog.jp goes dark at an unrecorded date. No search engine indexes any page from the domain, no other web archive is known to hold a copy, and a JPRS WHOIS query on 30 August 2026 returns 'No match', meaning the domain registration itself has lapsed. With it went the only implementation of pine
2026
The catalogue that preserved pine becomes unreachable too: the Internet Archive's last capture of the live 99-bottles-of-beer.net is dated 8 May 2026, a capture of 30 May 2026 shows only a placeholder page from the German hosting provider Selfhost, and by 30 August 2026 the domain no longer resolves to an address. Meanwhile derived language lists, apparently scraped from the catalogue, continue to describe pine as a 'functional' 'academic' language of 2004 - three claims for which the surviving evidence offers no support

Notable Uses & Legacy

mkprog.jp

The only place pine ever ran. The help page describes pine as 'a programming language for making programs on the Internet' that 'is used to make programs on this site', which, together with the domain name (evidently 'make program'), indicates an in-browser service where visitors typed pine source into a form and the server executed it - the same model as the online code-runners of the same period. The server-side components were CGI executables such as pinehelp.exe. Nothing is known about how many people used it

99 Bottles of Beer, entry 2913

The complete surviving corpus of pine: a 19-line program that prints the song, submitted by uechi on 12 July 2012 and rated 2.50 from two votes. It is the only pine program anyone outside mkprog.jp is known to have seen, and it is reproduced in full on this page

Programming-language catalogues

pine's afterlife is as a row in language lists compiled from the 99 Bottles of Beer catalogue. Those rows typically carry a first-appearance year of 2004, a 'functional' paradigm and an 'academic' category, none of which can be traced to any source; the record of a hobby web-scripting language of 2012 has been rewritten by re-cataloguing

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: