# “Hello, World!”

So... uh... this is a bit embarrassing. But we don't have a plain "Hello, World!" challenge yet (despite having 35 variants tagged with , and counting). While this is not the most interesting code golf in the common languages, finding the shortest solution in certain esolangs can be a serious challenge. For instance, to my knowledge it is not known whether the shortest possible Brainfuck solution has been found yet.

Furthermore, while all of Wikipedia (the Wikipedia entry has been deleted but there is a copy at archive.org ), esolangs and Rosetta Code have lists of "Hello, World!" programs, none of these are interested in having the shortest for each language (there is also this GitHub repository). If we want to be a significant site in the code golf community, I think we should try and create the ultimate catalogue of shortest "Hello, World!" programs (similar to how our basic quine challenge contains some of the shortest known quines in various languages). So let's do this!

## The Rules

• Each submission must be a full program.
• The program must take no input, and print Hello, World! to STDOUT (this exact byte stream, including capitalization and punctuation) plus an optional trailing newline, and nothing else.
• The program must not write anything to STDERR.
• If anyone wants to abuse this by creating a language where the empty program prints Hello, World!, then congrats, they just paved the way for a very boring answer.

Note that there must be an interpreter so the submission can be tested. It is allowed (and even encouraged) to write this interpreter yourself for a previously unimplemented language.

• Submissions are scored in bytes, in an appropriate (pre-existing) encoding, usually (but not necessarily) UTF-8. Some languages, like Folders, are a bit tricky to score - if in doubt, please ask on Meta.
• This is not about finding the language with the shortest "Hello, World!" program. This is about finding the shortest "Hello, World!" program in every language. Therefore, I will not mark any answer as "accepted".
• If your language of choice is a trivial variant of another (potentially more popular) language which already has an answer (think BASIC or SQL dialects, Unix shells or trivial Brainfuck-derivatives like Alphuck), consider adding a note to the existing answer that the same or a very similar solution is also the shortest in the other language.

As a side note, please don't downvote boring (but valid) answers in languages where there is not much to golf - these are still useful to this question as it tries to compile a catalogue as complete as possible. However, do primarily upvote answers in languages where the authors actually had to put effort into golfing the code.

For inspiration, check the Hello World Collection.

## The Catalogue

The Stack Snippet at the bottom of this post generates the catalogue from the answers a) as a list of shortest solution per language and b) as an overall leaderboard.

## Language Name, N bytes


where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

## Ruby, <s>104</s> <s>101</s> 96 bytes


If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

## Perl, 43 + 2 (-p flag) = 45 bytes


You can also make the language name a link which will then show up in the snippet:

## [><>](https://esolangs.org/wiki/Fish), 121 bytes


/* Configuration */

var QUESTION_ID = 55422; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 8478; // This should be the user ID of the challenge author.

/* App */

return "https://api.stackexchange.com/2.2/questions/" +  QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}

}

jQuery.ajax({
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(a) {
});
comment_page = 1;
}
});
}

jQuery.ajax({
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
});
else process();
}
});
}

var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;

function getAuthorName(a) {
return a.owner.display_name;
}

function process() {
var valid = [];

var body = a.body;
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});

var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
});
else console.log(body);
});

valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});

var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;

.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)

var lang = a.language;
lang = jQuery('<a>'+lang+'</a>').text();

languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link};
});

var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);

langs.sort(function (a, b) {
if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1;
return 0;
});

for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
language = jQuery(language);
jQuery("#languages").append(language);
}

}
body {
text-align: left !important;
display: block !important;
}

width: 290px;
float: left;
}

#language-list {
width: 500px;
float: left;
}

font-weight: bold;
}

table td {
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="language-list">
<h2>Shortest Solution by Language</h2>
<table class="language-list">
<tr><td>Language</td><td>User</td><td>Score</td></tr>
<tbody id="languages">

</tbody>
</table>
</div>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>

</tbody>
</table>
</div>
<table style="display: none">
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
</tbody>
</table>

• @isaacg No it doesn't. I think there would be some interesting languages where it's not obvious whether primality testing is possible. – Martin Ender Aug 28 '15 at 13:56
• If the same program, such as "Hello, World!", is the shortest in many different and unrelated languages, should it be posted separately? – aditsu Aug 28 '15 at 15:33
• @mbomb007 Well it's hidden by default because the three code blocks take up a lot of space. I could minify them so that they are a single line each, but I'd rather keep the code maintainable in case bugs come up. – Martin Ender Aug 28 '15 at 19:34
• @ETHproductions "Unlike our usual rules, feel free to use a language (or language version) even if it's newer than this challenge." Publishing the language and an implementation before posting it would definitely be helpful though. – Martin Ender Aug 29 '15 at 23:01
• @MartinEnder ... Almost. If two BF solutions have the same size, the one with smaller lexicographical order will take smaller number of bytes in Unary. Of course the smallest Unary solution translated to BF is guaranteed to be smallest. – user202729 May 20 '18 at 10:20

# 17, 71

777{44 $5g$ 66 : :  69 : $1f$ 52  6c  5f $1g$ a \$ 0 @}


Explantation:

Pushes ascii values for Hello World!(in base 17). Then store 17 at 0, to make it exit by relying on the fact that if it tries to pop at number and the stack is empty it return 17 to save two characters.

# Unnamed, 14 Bytes

Unnamed is an unfinished language, only custom output is supported at the time of posting this. But it works.

!Hello, World!


## Explanation

! -> user specified output
Hello, World -> string

• I'm reviewing this as Looks OK because in this challenge, there's no such thing as notability. – Nissa May 6 '18 at 0:56

## TapeBagel, 511 bytes

%% %++ %++ %++ %++ %++ %++ %++ %++ @* ## %++ %++ %++ %++ %++ @* ## %++
%++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ @* @* ## %++ %++ %++ %++
%++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ @* ## @* %++ %++ %++ %++
%++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++
%++ %++ @* ## %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++
%++ %++ @* ## %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++ %++
%++ %++ %++ %++ %++ @* ##  %++ %++ %++ %++ %++ %++ %++ %++ %++ %++
%++ %++ @* ## %++ %++ %++ %++ @* ##


%# - adds one to the integer index.

%% - resets the integer index to zero.

%& - the integer that the integer index is pointing to is inputted into the program.

#% - sets all of the integers to one.

## - resets all of the integers to zero.

&& - pauses the program.

&@ - clears the screen.

%++ - adds one to the integer that the integer index is pointing to

@[ int ] - outputs the integer as a character (1 = A, 2 = B, ... 26 = Z)

* - integer 0

# Sisi, 21 bytes

0print"Hello, World!"


Try it online!

# +-=*/!&#, 64 Bytes

!!!!!!!++*!!!-*!---**+++*/!!!++*!!!!!+++++*!!++++*+++*&++++*&++*


This programming language was actually made by me on November 30th, and it's only useful for printing stuff. See here.

• If it's only useful for printing stuff, then it's not a programming language – ASCII-only Dec 25 '18 at 23:56

# C# (Visual C# Interactive Compiler), 22 bytes

Write("Hello, World!")


Try it online!

I realize this question has an existing C# answer which presumably uses the traditional csc.exe compiler. This answers uses the csi.exe command-line REPL.

# Scala, 63 bytes

object Main{def main(a:Array[String])=print("Hello, World!")}


Try it online!

• an existing answer is shorter – ASCII-only May 4 at 2:14
• That shorter answer doesn't work in tio. One of the requirements in this particular assignment was that each submission must be a full program. – Peter May 4 at 5:50
• Also, that answer has extra \n in the string. – Peter May 4 at 5:57
• The shorter one, sure. But not the longer one, which is still shorter than yours. Plus, yours is the one with extra newline, and incorrect capitalization for the W :| – ASCII-only May 4 at 10:08
• You are right, that answer is better and provides full version that works in tio. – Peter May 4 at 17:52

# 33, 16 bytes

"Hello, World!"p


But that's boring, isn't it? Let's try with functions, instead.

## 56 bytes

{"Hello"p}'Hello'{", "p}', '{"World"p}'World'{"!"pi}qqqq


Here's something to be explained.

The string registers are initialised to "" when the interpreter starts. When the interpreter encounters a {, it copies all the code until the matching } and stores it as a function, labelled as what the destination string register was at the time (The destination string is set by single quotes).

Changes to the registers persist when changing stack frames (is that the right term?), so the explanation looks like this:

{                                                         (Creates function "")
"Hello"                                                 (Stores "Hello" in the source string register)
p                                                (Prints what is in the source string register)
}'Hello'{                                       (Creates function "Hello")
", "p                                  (Prints ", " after storing it in the source string register)
}', '{                            (Creates function ", ")
"World"p                    (Prints "World" after storing it in the source string register)
}'World'{           (Creates function "World")
"!"p       (Prints "!")
i      (Prints a newline)
}q    (Calls function "")
q   (Calls function "Hello")
q  (Calls function ", ")
q (Calls function "World")


This is a language I created. The source is in the link. I haven't made a Windows release of the interpreter yet, because I cannot figure out how to cross-compile. If you're on Windows, you'll have to compile it yourself.

## anyfix, 14 bytes

“Hello, World!”


Simply the string, pushed onto the stack. Really boring.

(By the way, just use postfix for all operators in anyfix; this leads to the least confusion compared to infix modes and prefix modes, and anyfix is the easiest to understand in the postfix mode.)

TIO

### Java, 82 bytes:

class Main{public static void main(String[]a){System.out.print("Hello, World!");}}

• @JoKing I think it's intended to be some kind of proof of the length - "look, it really is 82 bytes!" - but of course you could trivially verify the byte count by copy-pasting it into a text editor, so I agree that it's unnecessary. – F1Krazy Dec 6 at 11:12

# Wren, 29 bytes

System.print("Hello, World!")


Try it online!

## Explanation

System.print(               ) // Output the following string:
"Hello, World!"  // "Hello, World!"


# brainfuck, 137 bytes

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++++++++++++++.------------.>+++++++++++++++.>.+++.------.--------.<<+.


Try it online!

# Explained :

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.                       H
>+.                                                                    e
+++++++..                                                             l l
+++.                                                                   o
<<++++++++++++++.                                                    comma
------------.                                                        space
>+++++++++++++++.                                                      W
>.                                                                     o
+++.                                                                   r
------.                                                                l
--------.                                                              d
<<+.                                                                   !


This can definitely be golfed. (World record is 72 bytes so I already know that)

This is basic hard coded answer, simply gets the Ascii value, resets and keeps going

# brainfuck, 210 bytes

-[>+<-------]>-.[-]<-[>++<-----]>-.+++++++..[-]>+[+>+[<]>->]<.[-]--[>+<++++++]>+.[-]>-[-[-<]>>+<]>-.[-]-[>+<---]>++.[-]>+[+>+[<]>->]<.[-]>+[-->++[<]>-]>.[-]>+[++[++>]<<+]>+.[-]-[>++<-----]>--.[-]>-[-[-<]>>+<]>.


Try it online!

# Explained :

-[>+<-------]>-.                                               H
[-]
<-[>++<-----]>-.                                               e
+++++++..                                                     l l
[-]
>+[+>+[<]>->]<.                                                o
[-]
--[>+<++++++]>+.                                               ,
[-]
>-[-[-<]>>+<]>-.                                             space
[-]
-[>+<---]>++.                                                  W
[-]
>+[+>+[<]>->]<.                                                o
[-]
>+[-->++[<]>-]>.                                               r
[-]
>+[++[++>]<<+]>+.                                              l
[-]
-[>++<-----]>--.                                               d
[-]
>-[-[-<]>>+<]>.                                                !


# Ruby, 19 bytes

puts"Hello, World!"


So I am still developing this and it is still a beta , but I though I would post this anyways (Note : The language was made after the challenge,)

# Simple, 1 byte

-


Other possible alternatives : +,*,/,%. No numbers just operators.

Try it

• You don't need to say it was made after the challenge – ASCII-only Apr 25 '18 at 0:52
• @ASCII-only : I see – Muhammad Salman Apr 25 '18 at 16:26
• You removed the Try It code – MilkyWay90 Feb 5 at 17:01
• This answer is invalid; the github interpreter link is dead. – MilkyWay90 Jul 5 at 1:41