Skip to content

Commit 8b53b61

Browse files
committed
Update README (#179)
1 parent 1bbf1ae commit 8b53b61

File tree

1 file changed

+24
-93
lines changed

1 file changed

+24
-93
lines changed

README.md

Lines changed: 24 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
> We want to live in the editor forever. — [Luyu Cheng](https://luyu.computer/)
66
7-
[**Recho Notebook**](https://recho.dev/notebook) is a free, [open-source](/LICENCE), reactive editor for algorithms and ASCII art. It introduces a _plain code format_ for notebooks — echoing output inline as comments for live, in-situ coding with instant feedback. Built on vanilla JavaScript and the reactive model of [Observable Notebook Kit](https://observablehq.com/notebook-kit/), Recho Notebook lets developers, artists, and learners explore and create directly in code.
7+
[**Recho Notebook**](https://recho.dev/notebook) is a free, [open-source](/LICENCE), reactive editor for algorithms and ASCII art. It introduces a _plain code format_ for notebooks — echoing output inline as comments for live, in-situ coding with instant feedback. Built on vanilla JavaScript and the reactive model of [Observable Notebook Kit](https://observablehq.com/notebook-kit/), Recho Notebook lets developers, artists, and learners explore algorithms and ASCII art interactively.
88

99
- [Editor](https://recho.dev/notebook) 📝 - The quickest way to get started with Recho Notebook.
1010
- [Announcement](https://medium.com/@subairui/a-lighter-way-to-code-with-creativity-8c0ac739aa6f) 📢 - Read our initial release story to discovery the vision behind Recho Notebook.
@@ -13,113 +13,44 @@
1313
- [Sharing](/CONTRIBUTING.md#sharing-examples) 🎨 - Follow the instructions to open a [pull request](https://github.com/recho-dev/notebook/new/main/app/examples) to share your sketches!
1414
- [Contributing](/CONTRIBUTING.md) 🙏 - We have [a bunch of things](https://github.com/recho-dev/notebook/issues) that we would like you to help us build together!
1515

16-
## Why Recho Notebook 💡
16+
## Core Idea 🧠
1717

18-
On the one hand, we’ve always loved [Observable Notebooks](https://observablehq.com/). To explore a more portable notebook format, we created [Markdown Genji](https://genji-md.dev/), which extends Markdown with notebook-like features. Later, similar ideas appeared in [Observable Framework](https://observablehq.com/framework), and recently, [Observable Notebook Kit](https://observablehq.com/notebook-kit/) introduced an HTML-based file format. That made us wonder — could notebooks be even more portable, perhaps as a plain code file?
18+
Unlike typical notebooks (like Jupyter or Observable), Recho Notebook treats **code and its output as a single, continuous document**. When you write code, **the output appears inline — as a comment right below or beside your code**.
1919

20-
On the other hand, we’ve always been interested in making code more accessible and playful. Inspired by the [p5.js web editor](https://editor.p5js.org/), we realized that a _well-designed language doesn’t necessarily make coding more accessible — the environment does_. The p5.js web editor achieves this, in part, through its focus on graphics. That made us wonder — could there be an environment that focuses more on computation rather than graphics, yet remains just as accessible and playful? One that uses ASCII art—like what we did in [gh2](https://github.com/charming-art/gh2)—when visual output is truly needed?
21-
22-
To explore these questions, introducing Recho Notebook: **[a lighter way to code with creativity](https://medium.com/@subairui/a-lighter-way-to-code-with-creativity-8c0ac739aa6f)**. By "lighter", we mean you can have a lighter start:
23-
24-
- **Lighter Output** - The first citizen of Recho Notebook is text—each piece of result can be inspected as strings. Text is a universal interface, which is concise, intuitive, and efficient. This keeps your attention on the essence of code rather than the overhead of visuals.
25-
- **Lighter Flow** - We stay in an online reactive editor—inputs and outputs both show up there. There is no need to switch context while coding. Instant feedback allows you to better understand your code and shape ideas.
26-
- **Lighter Input** - We use vanilla JavaScript with reactivity and minimal custom APIs. This means you don't need to learn any nonstandard JavaScript variant, and also eliminates the need to learn a bunch of third-party APIs. By doing this, we aim to minimize the gap between coding in Recho Notebook and in the real world, making it easier for the experienced to get in and for beginners to get out.
27-
- **Lighter Purpose** - We don't need to dream big in Recho Notebook. While AI makes coding less important for "world-changing" ideas, we want to secure a place where you can code just for fun. Life can be without work, right? You can experiment with math functions, play with string manipulation, or simply implement basic algorithms to experience the charm of computing.
28-
29-
By "creativity", we mean you can end up doing something fun, and find a new way to express yourself or understand the world. If computers are aliens, our best hope is that by learning their languages, which is code, through Recho Notebook, you'll develop a deeper understanding of computation while unleashing your creativity!
30-
31-
## What's Next 🔥
32-
33-
Recho Notebook is still in its early stage. While there's still much work to do, we're excited to release the beta version and make it open source right now. If you're interested in trying it out, please visit the [website](https://recho.dev/notebook). Since the source code is available at GitHub here, we welcome any thoughts, comments, or suggestions. If you're interested in contributing to Recho Notebook, we're especially interested in these areas:
34-
35-
- **More Examples** - Examples attract users and shape tools. We would love to showcase examples across diverse areas ([text analysis](https://recho.dev/notebook/examples/word-count), [data viz](https://recho.dev/notebook/examples/phases-of-the-moon), [graphics](https://recho.dev/notebook/examples/cg-text-based-shaders), [concrete poetry](https://recho.dev/notebook/examples/fire!), [algorithms](https://recho.dev/notebook/examples/maze), etc.) and demonstrations working with external libraries ([D3](https://d3js.org/), [Lodash](https://lodash.com/), [ml5](https://ml5js.org/), [Tone](https://tonejs.github.io/), etc.). They don't have to be complicated or perfect. One thing to share would be great. Follow the [instructions](/CONTRIBUTING.md#sharing-examples) to open a [pull request](https://github.com/recho-dev/notebook/new/main/app/examples) to share yours today!
36-
- **Polyglot Programming** - Recho Notebook begins with JavaScript, but isn't limited to it—coding has no boundaries. As long as a programming language can be transpiled to JavaScript, it can be incorporated with Recho Notebook. It can be mainstream ([Python](https://www.python.org/), [Rust](https://www.rust-lang.org/)), academic ([MLscript](https://github.com/hkust-taco/mlscript)), or creative ([wenyan‑lang](https://wy-lang.org/)). The best part is that it doesn't have to be production-ready or have real-life usage. Just providing a different way to code or think is cool. Want to add your favorite language to Recho Notebook or share your "toys"? [Talk to us](https://github.com/recho-dev/notebook/issues/109)!
37-
- **Text-Based Libraries** - Best practices deserve to be seen by more people. If you find some algorithms you are using helpful for others, don't hesitate to package them into libraries. Remember, they can be light!
38-
- **Explorations with LLMs** - Recho Notebook's text-first approach is ideal for LLMs. Rather than letting the LLM write code directly, you can use code as input: fusing files, turning text into pixel outputs, and more. We want to [explore the possibilities](https://github.com/recho-dev/notebook/issues/110).
39-
40-
In addition to these, there are a lot of editor related features on the way!
20+
```js
21+
//➜ "dog"
22+
const text = echo("dog");
4123

42-
- **Editing Optimization** - Improve editing experiences. ([rerunning blocks](https://github.com/recho-dev/notebook/issues/42), [formatting code](https://github.com/recho-dev/notebook/issues/108), etc.)
43-
- **Visual Enhancement** - More expressive and informative editor. ([dark theme](https://github.com/recho-dev/notebook/issues/104), [ANSI escape codes](https://github.com/recho-dev/notebook/issues/45), etc.)
44-
- **Interactivity** - Response to user inputs. ([mouse](https://github.com/recho-dev/notebook/issues/34), [keyboard](https://github.com/recho-dev/notebook/issues/105), etc.)
24+
//➜ [ "g", "o", "d" ]
25+
const words = echo(text.split(""));
4526

46-
Also, we have plans to provide [cloud storage services](https://github.com/recho-dev/notebook/issues/107). But we don't want to overcomplicate things at this point, so any thoughts, comments, and suggestions are welcome!
27+
//➜ "god"
28+
echo(words.reverse().join(""));
29+
```
4730

48-
## A Quick Example 🚀
31+
If you modify the code, the echoed output updates immediately. So instead of switching between “code cells” and “output cells,” your entire notebook feels like a living text file that responds to you.
4932

50-
Here is a [word counting](https://recho.dev/notebook/examples/word-count) example to showcase Recho Notebook. Bret Victor gives programming a concise [definition](https://www.youtube.com/watch?v=ef2jpjTEB5U&t=501s):
33+
## Design Philosophy 💡
5134

52-
> Programming is blindly manipulating symbols.
35+
The name **Recho** comes from “Reactive Echo” — every expression echoes its result, instantly. It’s meant to capture the feedback loop between code and creator — seeing how every small change ripples through your work.
5336

54-
By "blindly", he means we can't see the results of our manipulations. For example, given the piece of code counting word frequencies, we aren't able to see the results of each step. Implementing this transformation process largely relies on our imagination! If we accidentally imagine wrong, the code becomes buggy.
37+
Recho Notebook is both a tool and a statement — it imagines what happens if we strip away complex GUIs and treat code itself as the canvas.
5538

56-
```js
57-
const text = `The dog, cat, and mouse were playing in the yard. Dog barked loudly, while cat ran quickly.
58-
Mouse hid under the bench, but the dog kept looking. Cat jumped over a small fence; dog followed.
59-
Bird watched silently as dog, cat, and mouse moved around.`;
39+
It’s light, artistic, and reactive — blending ideas from creative coding, literate programming, and live performance.
6040

61-
const ignoredWords = ["the", "was", "not", "over", "and", "in", "were", "a", "while", "but", "as", "around"];
41+
## Example Use Cases 🖼️
6242

63-
const clean = text.toLowerCase().replace(/[.,!?;]/g, "");
43+
- Teaching/learning basic algorithms with immediate visual/text feedback.
44+
- Creating text-based animations to experience the simplicity and clarity in ASCII art.
45+
- Exploring code minimalism — finding beauty in code and its textual output.
6446

65-
const words = clean.split(/\s+/);
47+
## Why Recho Notebook 🪶
6648

67-
const filtered = words.filter((w) => !ignoredWords.includes(w));
49+
We’ve always loved [Observable Notebooks](https://observablehq.com/). To make notebooks more portable, we built [Markdown Genji](https://genji-md.dev/), extending Markdown with live code features. Later, [Observable Framework](https://observablehq.com/framework) and [Observable Notebook Kit](https://observablehq.com/notebook-kit/) explored similar ideas, which made us wonder — could a notebook exist as a plain code file?
6850

69-
const frequencies = filtered.reduce((acc, w) => ((acc[w] = (acc[w] || 0) + 1), acc), {});
70-
```
51+
At the same time, we wanted to make coding more accessible and playful. Inspired by the [p5.js web editor](https://editor.p5js.org/), we realized **well-designed language doesn’t necessarily make coding more accessible — the environment does**. So we asked — what if we focused on algorithms instead of graphics, using ASCII art when visuals are needed?
7152

72-
However, we can see the results of each transformation in Recho Notebook. By calling `echo(results)`, the results are displayed as comments above the statement! Now we can better understand this piece of code by better "seeing" every manipulation. Notice that there is no need to switch to console to see the results, which results in an in-situ experience. And of course, we can be a little creative at last: writing a few lines of code to create a simple visualization!
73-
74-
```js
75-
const text = `The dog, cat, and mouse were playing in the yard. Dog barked loudly, while cat ran quickly.
76-
Mouse hid under the bench, but the dog kept looking. Cat jumped over a small fence; dog followed.
77-
Bird watched silently as dog, cat, and mouse moved around.`;
78-
79-
const ignoredWords = ["the", "was", "not", "over", "and", "in", "were", "a", "while", "but", "as", "around"];
80-
81-
//➜ the dog cat and mouse were playing in the yard dog barked loudly while cat ran quickly
82-
//➜ mouse hid under the bench but the dog kept looking cat jumped over a small fence dog followed
83-
//➜ bird watched silently as dog cat and mouse moved around
84-
const clean = echo(text.toLowerCase().replace(/[.,!?;]/g, ""));
85-
86-
//➜ [ "the", "dog", "cat", "and", "mouse", "were", "playing", "in", "the", "yard", "dog", "barked", "loudly", "while", "cat", "ran", "quickly", "mouse", "hid", "under", "the", "bench", "but", "the", "dog"…
87-
const words = echo(clean.split(/\s+/));
88-
89-
//➜ [ "dog", "cat", "mouse", "playing", "yard", "dog", "barked", "loudly", "cat", "ran", "quickly", "mouse", "hid", "under", "bench", "dog", "kept", "looking", "cat", "jumped", "small", "fence", "dog", "f…
90-
const filtered = echo(words.filter((w) => !ignoredWords.includes(w)));
91-
92-
//➜ { dog: 5, cat: 4, mouse: 3, playing: 1, yard: 1, barked: 1, loudly: 1, ran: 1, quickly: 1, hid: 1, under: 1, bench: 1, kept: 1, looking: 1, jumped: 1, small: 1, fence: 1, followed: 1, bird: 1, watched…
93-
const frequencies = echo(filtered.reduce((acc, w) => ((acc[w] = (acc[w] || 0) + 1), acc), {}));
94-
95-
//➜ 🟩🟩🟩🟩🟩 dog
96-
//➜ 🟩🟩🟩🟩 cat
97-
//➜ 🟩🟩🟩 mouse
98-
//➜ 🟩 playing
99-
//➜ 🟩 yard
100-
//➜ 🟩 barked
101-
//➜ 🟩 loudly
102-
//➜ 🟩 ran
103-
//➜ 🟩 quickly
104-
//➜ 🟩 hid
105-
//➜ 🟩 under
106-
//➜ 🟩 bench
107-
//➜ 🟩 kept
108-
//➜ 🟩 looking
109-
//➜ 🟩 jumped
110-
//➜ 🟩 small
111-
//➜ 🟩 fence
112-
//➜ 🟩 followed
113-
//➜ 🟩 bird
114-
//➜ 🟩 watched
115-
//➜ 🟩 silently
116-
//➜ 🟩 moved
117-
echo(
118-
Object.entries(frequencies)
119-
.map(([word, count]) => "🟩".repeat(count) + " " + word)
120-
.join("\n"),
121-
);
122-
```
53+
That’s how Recho Notebook began — **[a lighter way to code with creativity](https://medium.com/@subairui/a-lighter-way-to-code-with-creativity-8c0ac739aa6f)**.
12354

12455
## License 📄
12556

0 commit comments

Comments
 (0)