{"id":13905754,"url":"https://github.com/oldweb-today/oldweb-today","last_synced_at":"2025-07-18T03:31:39.875Z","repository":{"id":50065789,"uuid":"317464010","full_name":"oldweb-today/oldweb-today","owner":"oldweb-today","description":"Browse emulated browsers connected to old web sites in your browser!","archived":false,"fork":false,"pushed_at":"2024-10-31T05:19:35.000Z","size":13011,"stargazers_count":264,"open_issues_count":12,"forks_count":26,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-31T06:18:21.617Z","etag":null,"topics":["emulation","emulator","oldweb-today","wayback-machine","web","web-archives","webrecorder"],"latest_commit_sha":null,"homepage":"https://oldweb.today","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oldweb-today.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-01T07:48:57.000Z","updated_at":"2024-10-31T05:19:39.000Z","dependencies_parsed_at":"2024-10-31T06:28:02.499Z","dependency_job_id":null,"html_url":"https://github.com/oldweb-today/oldweb-today","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldweb-today%2Foldweb-today","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldweb-today%2Foldweb-today/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldweb-today%2Foldweb-today/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldweb-today%2Foldweb-today/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oldweb-today","download_url":"https://codeload.github.com/oldweb-today/oldweb-today/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226336680,"owners_count":17608876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emulation","emulator","oldweb-today","wayback-machine","web","web-archives","webrecorder"],"created_at":"2024-08-06T23:01:22.950Z","updated_at":"2024-11-25T13:31:50.302Z","avatar_url":"https://github.com/oldweb-today.png","language":"JavaScript","readme":"# OldWeb.today (in JS)\n\n## Old Browser + Web Archive Emulation in Your Browser 💫\n[oldweb.today](https://oldweb.today) (OWT) is a system that connects emulated web browsers to web archives, allowing users to browse the old web, today, as it was!\n\n![Screenshot of Netscape 3](extra/screenshot.png)\n\n(Screenshot of: [https://oldweb.today/?browser=ns3-mac#19960101/http://geocities.com/](https://oldweb.today/?browser=ns3-mac#19960101/http://geocities.com/))\n\n\nOldWeb.today allows users to browse the web using one of several emulated browsers as well as a Flash emulator, all running fully in the browser!\n\nEnter a URL, choose a archival date, and select a browser to start!\n\nUsers can either browse the live web, current websites, or connect to web archives / wayback machines and load content directly from the archives.\n\n\n## Supported Browsers\n\nSee the [oldweb.today](https://oldweb.today) for the latest list of browsers. The goal is to support common (Netscape, IE, etc..) as well as other lesser known, but notable browsers in the history of the web.\n\nIf you would like to see a browser supported, or would like to contribute a browser, please open an issue!\n\n### Java\n\nMost versions of Netscape and IE available in OldWeb.today have early versions of Java installed.\n\nJava 1.0 should work in Netscape 3, and Java 1.1 should work in Netscape 4 (Windows) and IE 5 and IE 6.\n\n### Flash\n\nNetscape and IE also should have the latest supported version of Flash installed. For Mac browsers, this usually means Shockwave 4.\n\nThe IE 6 browser has Flash 9, the latest version of Flash that runs on Win98 installed.\n\n### Flash via Ruffle\n\nOldWeb.today also supports the [Ruffle](https://ruffle.rs/) Flash emulator directly, using your native browser.\n\nIn this mode, you can browse any live or archived website, with the Ruffle emulator enabled.\n\n\n## How it Works\n\nThis current version runs entirely in JavaScript, using emulators to run Windows, MacOS and a full network stack. *Everything* runs in your browser, and OldWeb.today can be hosted as a static site. A remote CORS proxy is used due to CORS restrictions for accessing external archives.\n\nThe version of OldWeb.today works by building on and combining a number of great tools created by others, including:\n\n- [V86 Emulator](https://github.com/copy/v86), a JavaScript x86 emulator by [Fabian](https://github.com/copy) is used to run Windows\n- [Basilisk II JS Port](https://github.com/jsdf/macemu), a JavaScript port of the Basilisk II emulator by [James Friend](https://jamesfriend.com.au/) is to run MacOS\n\nEach of these emulators were modified ([here](https://github.com/oldweb-today/macemu) and [here](https://github.com/oldweb-today/v86)) to support a custom JavaScript network stack using picotcp created by [Emulation as a Service](https://gitlab.com/emulation-as-a-service) developers Rafael Gieshke and Klaus Rechert:\n\n- [picotcp.js](https://gitlab.com/emulation-as-a-service/picotcp.js) - A WebAssembly build of [picotcp](https://github.com/tass-belgium/picotcp)\n- [webnetwork.js](https://gitlab.com/emulation-as-a-service/eaas-proxy/-/blob/master/webnetwork.js) - application of picotcp.js to run a web server in JavaScript.\n\nThis system was further modified and integrated into OldWeb.today to connect to terminate HTTP connections from emulated browsers and respond with HTTP data from a regular `fetch()` request, either to live web or an archive source. Currently, only GET requests are supported and only standard Content-Length and Content-Type headers are proxied back.\n\nEach browser is configured to connect via an HTTP proxy to the special IP `http://10.0.2.2/` which the JS http server redirects to the actual home page.\nIn this way, the emulator image has a fixed home page that resolves to the actual page.\nSimilarily, the timestamp set on the page is used by the JS proxy server to load the specified date from the archive.\n\nThis allows changing the datetime and the home page URL without restarting the emulator, simply by reloading the home page in the emulated browser.\n\nThe network stack (compiled to WASM) is running in a separate web worker. The Basilisk emulator is compiled with Emscripten and also runs in a separate worker.\nA SharedArrayBuffer is needed to communicate between them. The v86 emulator runs in the main thread and communicates via the network worker via BroadcastChannel messaging.\n\nFor native mode / Ruffle emulator, no emulated browser is used, but the Ruffle emulator is injected into loaded pages to take over rendering any Flash that may be present\non the page.\n\n\n## Deployment\n\nOldWeb.today requires Node and a package manager npm/yarn to build and modify.\n\nTo run locally, first install with `yarn install`\n\n\n### Local Deployment (Local Live Web Proxy)\n\nThe recommended deployment option for development is to run a dev server with a local CORS proxy.\nThis can be done simply by running the rollup dev server with:\n\n\n```shell\n\nyarn run start-dev\n```\n\nThis will start a local web server (via rollup) and you should be able to access OldWeb.today via\n`http://localhost:10001/`. The local proxy will be running at `http://localhost:10001/proxy/`\n\n### Production Deployment -- Cloudflare\n\nFor production, the recommended deployment is to run using [Cloudflare Workers](https://workers.cloudflare.com/), which handles\nthe live web proxy. The free service should be sufficient for most use cases.\n\nTo use this option:\n\n1. In `worker-site`, copy `wrangler.toml.sample` to `wrangler.toml`.\n2. Set your `account_id` and `name` as per [configuration instructions](https://developers.cloudflare.com/workers/learning/getting-started#6-preview-your-project).\n3. Run `yarn run publish` to publish to your Cloudflare Worker endpoint.\n4. Load OldWeb.Today from your Cloudflare URL!\n\n### Production Deployment -- Static Site with Local Archive\n\nAn even simpler deployment, OldWeb.today can be deployed fully as a static site, by serving the content in the `./site` directory\nover an HTTP server.\n\nHowever, this option will not include a CORS proxy, which is needed for loading from live web or a remote archive.\n\nOne option is to run with the publicly available [CORS Anywhere](https://cors-anywhere.herokuapp.com/) proxy for connecting to live web and remote archives.\n\nAs this proxy is rate limited, this option is not recommended for production deployment.\n\nThis deployment makes sense if also running a local web archive on the same host (and live web access is not needed), removing the need for a CORS proxy.\n\nTo use this method:\n\n1. In `rollup.config.js`, modify the `CORS_PREFIX` and/or the `ARCHIVE_PREFIX` to point to a local archive, for example (see below for more details):\n\n  ```js\n  const CORS_PREFIX = \"\";\n  \n  const ARCHIVE_PREFIX = \"/wayback/\";\n  ```\n\n2. Run `yarn run build`\n\n3. OldWeb.today can now be served from `./site/` from any static HTTP server.\n\n\n#### Customizing Assets Path\n\nNote that when running on Cloudflare, the static assets in `site/assets` and built scripts `site/dist` are served from a separate CDN (via DigitalOcean).\n\nThis path can be changed by rebuilding after changing `CDN_PREFIX` in `rollup.config.js`\n\nThe assets and scripts can be hosted on any static web storage.\n\n\n### Customizations\n\nThe loading paths below can be changed by changing the settings in `rollup.config.js` and rerunning `yarn run build`.\n\n#### Changing the Archive Source\n\nCurrently, OldWeb.today supports loading from [Internet Archive's Wayback Machine](https://web.archive.org/web/) and directly from the live web.\nSupport for additional / multiple archives is planned!\n\nThe archive source can be any web archive that supports Wayback Machine style unrewritten urls, eg: `\u003cprefix\u003e/\u003ctimestamp\u003eid_/\u003curl\u003e`.\nThe archive must support returning unmodified content for it to work.\n\nTo run with a different web archive, simply change the `ARCHIVE_PREFIX` path to point to the wayback machine instance you wish to use.\n\nIf loading from a wayback machine hosted on the same domain, the CORS proxy may not be necessary.\n\nFor example, if running OldWeb.today on host `mywebarchive.example.com` and there is a wayback machine running at `https://mywebarchive.example.com/wayback/`, then you can set\n\n```js\n\nCORS_PREFIX = \"\"\nARCHIVE_PREFIX = \"/wayback/\"\n```\n\nIf OldWeb.today is hotsed on a different site, then the config should be:\n\n```js\nCORS_PREFIX = \"/proxy/\"\nARCHIVE_PREFIX = \"https://mywebarchive.example.com/wayback/\"\n```\n\n### Changing Image and Asset Paths\n\nAll Emulator Images are hosted from a static block storage bucket (currently on DigitalOcean). If you wish to run with a local/different set of images, you can set:\n\n```js\nIMAGE_PREFIX = \"https://mybucket.example.com/images`\n```\n\nTo change the `assets` and `dist` paths (for cloudflare deployment), you can set:\n\n```js\nCDN_PREFIX = \"https://mybucket.example.com/site`\n```\n\n### Changing / Adding Emulated Browsers\n\nThe availble browsers are configured in `src/config.json`, which contains the browser name, emulator type, images, saved state (for v86) and other options\nor each browser. The `config.json` is interpolated with the `IMAGE_PREFIX` and served from `site/assets/config.json`.\n\nTo test a local emulator, create an entry w/o using the `IMAGE_PREFIX`. See `config.json` for more details. \n\n## Classic OldWeb.today\n\nThe \"classic\" version of oldweb.today, which uses Docker containers and emulators running on the server, can be found here: [classic.oldweb.today](http://classic.oldweb.today) Source: [https://github.com/oldweb-today/netcapsule](https://github.com/oldweb-today/netcapsule)\n\n\n## LICENSE\n\nOldWeb.today is available under the AGPL license. Other components (listed above) may be available under different licenses.\n\nSee [NOTICE.md](NOTICE.md) for more details.\n\n\n## Contributing\n\nContributions are definitely welcome, but please open an issue before contributing additional browsers or emulators.\n\n\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldweb-today%2Foldweb-today","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foldweb-today%2Foldweb-today","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldweb-today%2Foldweb-today/lists"}