A project exploring the fundamentals of React by building a simplified version from scratch using raw TypeScript. I wrote this to learn how React works under the hood.
Currently, we have the most popular hooks implemented: useState
, useEffect
along with the component logic.
All with less than 100 lines of code for most of the files.
Package size for the core template: 9.7 kB. Unpacked size: 30.4 kB. (49.8 kB with the favicon :)
Every file in src/
has a purpose, from rendering to the virtual DOM, to the hooks and the component logic.
The place to work on is src/app.ts
where you can start building your own components.
It is still raw, so you will need to get to a lower level to write the typescript code.
This is not meant to be production ready (of course), but it is a great way to learn.
- Use the CLI to create a new project:
npx unreacted project-name
or
bunx unreacted project-name
This project uses Bun's built-in bundler to compile the TypeScript source code (src/app.ts
) into a JavaScript file (dist/bundle.js
) that can be run in a browser.
You can also use npm
or any other package manager.
First install everything:
bun install
Run the build command:
bun run build
This will create the dist/bundle.js
file.
After building the project, open the index.html
file in your web browser:
bun run dev
This will load the HTML page, which in turn executes the bundled JavaScript (dist/bundle.js
), rendering the CounterComponent
into the page.
index.html
: The main HTML file that hosts the application.src/
: Contains the source code for the React-like library and components.app.ts
: The main application entry point, renders theCounterComponent
.vdom.ts
: Virtual DOM creation and diffing logic.hooks.ts
: Implementation ofuseState
anduseEffect
hooks.renderer.ts
: Component rendering logic.index.ts
: Exports library functions (not the application entry point).
dist/
: Contains the bundled JavaScript output.bundle.js
: The browser-compatible JavaScript file generated by the build process.
package.json
: Defines project metadata, dependencies, and scripts (including thebuild
script).tsconfig.json
: TypeScript configuration file.