# yelm

> Experimental programming environment for micro:bit

Latest version **0.0.20** (published 2016-03-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install yelm
pnpm add yelm
yarn add yelm
bun add yelm
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: no vulnerabilities; high maintenance score.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.0.20 |
| Published | 2016-03-08 |
| First published | 2016-01-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2313 |
| Maintainers | mmoskal |
| Keywords | TypeScript, microbit |

## Links

- npm: https://www.npmjs.com/package/yelm
- Repository: https://github.com/Microsoft/yelm
- Homepage: https://github.com/Microsoft/yelm#readme
- Issues: https://github.com/Microsoft/yelm/issues
- npm.io page: https://npm.io/package/yelm

## Dependencies (3)

- [bluebird](https://npm.io/package/bluebird.md) ^3.1.4
- [typescript](https://npm.io/package/typescript.md) 1.8.7
- [faye-websocket](https://npm.io/package/faye-websocket.md) ^0.11.0

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.0.20 (latest) — 2016-03-08
- 0.0.19 — 2016-02-27
- 0.0.18 — 2016-02-24
- 0.0.17 — 2016-02-24
- 0.0.16 — 2016-01-27
- 0.0.15 — 2016-01-27
- 0.0.14 — 2016-01-27
- 0.0.13 — 2016-01-27
- 0.0.12 — 2016-01-27
- 0.0.11 — 2016-01-27
- 0.0.0 — 2016-01-27

## README

# yelm - Experimental Programming Environment for micro:bit

[![Build Status](https://travis-ci.org/Microsoft/yelm.svg?branch=master)](https://travis-ci.org/Microsoft/yelm)

Yelm is a platform for creating special-purpose programming experiences for
beginners, especially focused on computer science education. Yelm underlaying
programming language is a subset of TypeScript (leaving out JavaScript dynamic
features).

The main features of Yelm are:
* a Blockly-based code editor along with converter to the text format
* an ACE-based text editor with enhanced, robust auto-completion and auto-correction
* a TypeScript library defining APIs available on microbit devices
* an ARM Thumb machine code emitter
* a command-line package manager

## Name

Yelm is a city near Mt Rainier in Washington State with a name short enough for
command line tool. It also stands for Your Experimental programming Language
environment for microbit-compatible devices.


## Build

Building yelm command line tools:

```
tsd reinstall
npm install
jake
```

Then install the `yelm` command line tool (only need to do it once):

```
npm install -g yelm-cli
```

After this you can run `yelm` from anywhere within the build tree.

To start the local web app server do `yelm serve` within the root directory
of build tree (where this file sits) and then browse to http://localhost:3232 

## TODOs

### package mgr + compiler

* [x] image literals
* [x] code in top-level scope
* [x] only compile what's needed
* [x] don't emit unused global vars
* [x] testFiles: [ ... ] in yelm.json
* [x] class methods
* [ ] class field initializers (?)
* [x] constructors
* [ ] disallow direct references to class members (cannot copy JS semantics)
* [x] optional arguments
* [x] default arguments
* [ ] +=, -= etc
* [ ] proper caching for x.f++, x.f += ... etc
* [ ] lambdas returning values (maybe just works?)
* [ ] clear variables when they get out of scope to limit memory usage
* [x] function f() {...}; control.inBackground(f) in local scope
* [x] function f() {...}; control.inBackground(f) in global scope
* [x] //% shim=... weight=... help=... etc insteaf of {shim:...}
* [ ] bit operators (&, |, etc)
* [ ] inline assembly
* [ ] use "(x + y) | 0" etc instead of "x + y" in simulator
* [x] do not generate empty action bodies for shim
* [x] check on compiler performance (1000ms on lang-test0)
* [x] forever() seems to have issues
* [x] skip unreferenced globals when initilized with literal
* [ ] do not DECR no-closure functions
* [ ] after uninstall pouch db throws 404 after reload
* [ ] `ptr-<username>-*` as the main way publishing packages
* [ ] in simulator currResume start loop() in nextTick
* [ ] `foo${bar}baz`
* [ ] x ? a : b

### web app

* [x] make blocks output file read only
* [x] do not type-check while auto-completing
* [x] scroll completion window with keyboard
* [x] indent when entering first character on a line
* [ ] save source in hex
* [ ] Save json
* [ ] Drag and drop load
* [x] Link up simulator
* [ ] Flag to hide from TS auto completion (eg: set sprite property with enum)
* [ ] add markdown processor for docs
* [ ] help for specific arguments
* [ ] stepping debugger
* [ ] attaching runtime warning to specific lines of code or block

### converter from TD to TS (different repo)

* [x] multi-line strings into backtick literals
* [ ] use bit operators for bits.XYZ
* [x] fish out {shim:...} and friends
* [x] {hints:...} -> @param x Blah, eg: 100, 200 (?)
* [ ] async is flipped
* [ ] use `expr as Type` not `<Type> expr`

## Docs

We use mkdocs to generate the docs under the ``/docs`` folder. To setup mkdocs, 
````
pip install mkdocs
mkdocs serve
open http://127.0.0.1:8000
````

## License

MIT

---
_Source: https://npm.io/package/yelm · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
