HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
nineties
planckforth
Forth2021–2026
nineties / planckforth

planckforth

Bootstrapping a Forth interpreter from hand-written tiny ELF binary. Just for fun.

7Distinct people
10Mentions
0Explicit recommenders
378GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Bootstrapping a Forth interpreter from hand-written tiny ELF binary. Just for fun.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year10 dated mentions

Observed mentions: 2021-01-13 11:31:59 UTC to 2026-02-16 11:44:07 UTC.

024682021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 8 mentions; 4 submissions, 4 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC844
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC000
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC110

What Hacker News says

10 sources
If you're looking at really from first principles, it's hard to beat forth systems. You can type in Plankforth (https://github.com/nineties/planckforth) in a hex editor ie. this can be built from zero software, by effectively morse-coding it into bare memory. In terms of accessibility though, I'd recommend Forthkit (https://github.com/tehologist/forthkit), Miniforth (https://compilercrim.es/bootstrap/), Sectorforth (https://github.com/cesarblum/sectorforth), Sectorlisp (https://justine.lol/sectorlisp2/) Freeforth (https://github.com/dan4thewin/FreeForth2 contains an inlining cross-compiler for MSP430) The problem with forths is that they don't seem as scalable as say lisp, from a social perspective. At a larger level, Project Oberon (https://projectoberon.net/) builds from the base CPU on FPGA, and A2 (https://en.wikipedia.org/wiki/A2
Read the rest
_(operating_system)) show what can be done to scale up. Steps (https://github.com/robertpfeiffer/cola/tree/master/function/...) also was supposed to do this, but the available code is rather disjointed and not really easy to follow.
In The curse of knowing how, or; fixing everything
This project is to bootstrap a language processor from a hand-written ELF binary. This is a hobby project and is not intended for any practical use, but constructing a language processor completely from scratch is a lot of fun. Please try running, reading and playing with the code! Bootstrapping proceeds as follows: 1. Implement a simple Forth interpreter (really) by handwriting ELF. 2. Grow it into a relatively expressive language through self-extension. Since writing a program in machine language by hand is a tough work, the first interpreter is designed to be very simple. Every built-in word is single-letter and the interpreter just repeats that reads a character, looks it up from the dictionary and executes it. Also there is no error checking. This is the actual code for the first interpreter, which is a 136-byte implementation of the
Read the rest
interpreter followed by a built-in dictionary of 888 bytes. https://github.com/nineties/planckforth/blob/main/planck.xxd The first interpreter and language is so esoteric that, for example, the Hello World looks like this. $ ./planck kHtketkltkltkotk tkWtkotkrtkltkdtk!tk:k0-tQ bootstrap.fs self-extends this. After running bootstrap.fs, the Hello World program can be written like this: $ ./planck < bootstrap.fs ." Hello World!" cr At the beginning of bootstrap.fs, you can only use one-letter words, so the code is difficult to read as shown below. $ head bootstrap.fs h@l@h@!h@C+h!k1k0-h@$k:k0-h@k1k0-+$h@C+h!ih@!h@C+h!kefh@!h@C+h!l! h@l@h@!h@C+h!k1k0-h@$k h@k1k0-+$h@C+h!ih@!h@C+h!kefh@!h@C+h!l! h@l@ h@!h@C+h! k1k0-h@$ k\h@k1k0-+$ h@C+h! i h@!h@C+h! kkf h@!h@C+h! kLf h@!h@C+h! k:k0- h@!h@C+h! k=f h@!h@C+h! kJf h@!h@C+h! However, at the end, you can write a normal Forth program as follows. In this way, the interpreter and the language are self-extended during the execution of the script. $ tail bootstrap.fs next-arg dup argv @ ! included else ." Welcome to PlanckForth " version type ." [" runtime type ." ]" cr copyright ." Type 'bye' to exit." cr s" /dev/tty" included then ; execute Various functionalities like compile mode, immediate mode, control-flow structures, literals, variables, constants, file I/O, heap memory, etc. will be available after running bootstrap.fs. Also, the language and bootstrap.fs are designed to be as environment-independent as possible, so you can implement the runtime in other languages as well. As an example, I added an implementation of the runtime in C and Python 3. There is no space for detailed explanation here. So please read the following source code and comments. https://github.com/nineties/planckforth/blob/main/bootstrap.... Also, there is a commentary article in Japanese here. I hope you can read it with google translate. (I will write it in English if I have time. someday.) https://qiita.com/9_ties/items/349b2ed65b7cd8a7d580 Feedbacks and pull requests such as runtime implementations in other languages are very welcome. Thank you for reading.
In Show HN: PlanckForth – Bootstrapping an interpreter from handwritten 1kb binary
This project is to bootstrap a language processor from a hand-written ELF binary. This is a hobby project and is not intended for any practical use, but constructing a language processor completely from scratch is a lot of fun. Please try running, reading and playing with the code! Bootstrapping proceeds as follows: 1. Implement a simple Forth interpreter (really) by handwriting ELF. 2. Grow it into a relatively expressive language through self-extension. Since writing a program in machine language by hand is a tough work, the first interpreter is designed to be very simple. Every built-in word is single-letter and the interpreter just repeats that reads a character, looks it up from the dictionary and executes it. Also there is no error checking. This is the actual code for the first interpreter, which is a 136-byte implementation of the
Read the rest
interpreter followed by a built-in dictionary of 888 bytes. https://github.com/nineties/planckforth/blob/main/planck.xxd The first interpreter and language is so esoteric that, for example, the Hello World looks like this. $ ./planck kHtketkltkltkotk tkWtkotkrtkltkdtk!tk:k0-tQ bootstrap.fs self-extends this. After running bootstrap.fs, the Hello World program can be written like this $ ./planck < bootstrap.fs ." Hello World!" cr At the beginning of bootstrap.fs, you can only use one-letter words, so the code is difficult to read as shown below. $ head bootstrap.fs h@l@h@!h@C+h!k1k0-h@$k:k0-h@k1k0-+$h@C+h!ih@!h@C+h!kefh@!h@C+h!l! h@l@h@!h@C+h!k1k0-h@$k h@k1k0-+$h@C+h!ih@!h@C+h!kefh@!h@C+h!l! h@l@ h@!h@C+h! k1k0-h@$ k\h@k1k0-+$ h@C+h! i h@!h@C+h! kkf h@!h@C+h! kLf h@!h@C+h! k:k0- h@!h@C+h! k=f h@!h@C+h! kJf h@!h@C+h! However, at the end, you can write a normal Forth program as follows. In this way, the interpreter and the language are extended during the execution of the single script. $ tail bootstrap.fs next-arg dup argv @ ! included else ." Welcome to PlanckForth " version type ." [" runtime type ." ]" cr copyright ." Type 'bye' to exit." cr s" /dev/tty" included then ; execute Various functionalities like compile mode, immediate mode, control-flow structures, literals, variables, constants, file I/O, heap memory, etc. will be available after running bootstrap.fs. Also, the language and bootstrap.fs are designed to be as environment-independent as possible, so you can implement the runtime in other languages as well. As an example, I added an implementation of the runtime in C and Python 3. There is no space for detailed explanation here. So please read the following source code and comments. https://github.com/nineties/planckforth/blob/main/bootstrap.... Also, there is a commentary article in Japanese here. I hope you can read it with google translate. (I will write it in English if I have time. someday.) https://qiita.com/9_ties/items/349b2ed65b7cd8a7d580 Feedbacks and pull requests such as runtime implementations in other languages are very welcome. Thank you for reading.
In Bootstrapping a Forth Interpreter from Handwritten 1KB Binary
Seems painful. I liked this approach better: https://github.com/nineties/planckforth You start with a very tiny address or bytecode interpreter, much smaller than 512 bytes. Then you load several levels of bootstrap interpreters into it until you have a fairly featureful Forth. So that occupies ram but not program space on the target computer. You would load the non-initial stuff from a remote computer that didn't have tiny memory constraints.
In Fitting a FORTH in 512 bytes

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.