ttalvitie/browservice: Image-Based Browsing for Historical Browsers
[UNMAINTAINED] Browservice: Browse the modern web on historical browsers
At a glance
- What is it?
- Browservice is an MIT-licensed C++ browser proxy that lets historical browsers view modern web pages by transferring rendered images and forwarding input events. Its final release is explicitly unmaintained, making current CEF integration the central adoption constraint.
- Who is it for?
- Adopt Browservice only for archival, research, or compatibility work where rendering modern pages through an image proxy is acceptable, and verify first whether you can build it against a current CEF release. Do not adopt the bundled final binaries as a maintained internet-facing browser service, because the project states that no further releases or bug fixes will be provided and that its embedded Chromium will become increasingly outdated.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 42 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why Browservice Uses a Rendered Image Proxy
Browservice addresses a specific compatibility problem: many historical browsers cannot run the JavaScript, CSS, media formats, and network protocols expected by current websites. The project does not try to make an old browser understand a modern page directly. A server-side Chromium instance renders the page into a viewport image, and the old client receives an image that its display can present.
The intended users are people preserving older browsing environments, testing software against legacy clients, or operating museum, research, and demonstration systems where modern web content must remain visible through hardware or software that predates current browser engines. The README describes Browservice as a web proxy rather than a compatibility layer injected into the historical browser. That distinction matters. The historical browser does not receive a normal modern DOM or script execution environment. It acts as a viewer and input device for the remote rendering service.
This design can preserve the appearance of a site without requiring the old browser to support the site itself. It also explains why Browservice is not equivalent to a direct remote browser or a modern HTML proxy. The server still needs a functioning Chromium rendering environment, and the client still needs a JavaScript application capable of displaying returned images and sending navigation and input requests.
CEF Rendering, Compressed Images, and Input Event Flow
The server uses CEF, the Chromium Embedded Framework, to run Chromium in an off-screen browser view. According to the README, that view is combined with a control interface bar, compressed as PNG or JPEG, and served by an embedded HTTP server. The client-side JavaScript application requests the resulting images and displays them in the historical browser.
Input travels in the opposite direction through image requests. The client application listens for keyboard and mouse activity and includes those events in the URLs used to retrieve images. Browservice therefore treats a page update as a server-rendered visual state, while client interaction becomes control data sent back to the proxy. Soft navigation buttons, file uploads, bookmarks, zooming, and URL changes are listed as project capabilities in the release history. The `--vice-opt-navigation-forwarding` option can disable client back and forward forwarding when that behavior conflicts with a particular client.
The architecture has a clear performance boundary. Sending a new image whenever the rendered view changes consumes bandwidth and requires the server to perform rendering and compression. The README says the approach can be surprisingly usable over a fast connection such as a 100 Mbit/s Ethernet LAN, but it also describes the model as transferring the whole browser view. Network latency, image size, rendering frequency, and the capabilities of the historical client all affect the experience. This is a visual interaction model, not native browser execution on the client.
Building Browservice from the C++ Repository
The repository includes a Makefile, C++ source under `src/`, a `viceplugins/` directory, the `vice_plugin_api.h` interface, platform build material under `winbuild/`, and a `setup_cef.sh` script. The Makefile defines debug and release targets, compiles all C++ files found under `src/`, and links against CEF libraries under `cef/Release/` or `cef/debugbuild/`. Its common C++ settings require C++17 and include Pango, X11, and other native libraries.
The README refers readers to its installation section for running the proxy, but the excerpt does not include the complete command sequence. The repository's build file does establish the normal release entry point. The visible Makefile lists release as a build target, although its complete rule is not shown.
The Makefile names the resulting proxy binary at `release/bin/browservice` and also builds `release/bin/retrojsvice.so`. A successful build therefore depends on more than the compiler. The required CEF files, Pango development files, X11 libraries, and the repository's expected directory layout must be available. The README does not provide enough installation detail to claim a complete first-run command, so a binary download or launch syntax should not be invented.
The release history says that patched CEF binaries have been distributed with releases since v0.9.9.2, which can reduce the need to build CEF or Chromium from scratch. That statement does not remove the requirement to build Browservice itself and does not guarantee compatibility with an arbitrary current CEF release.
Maintenance Status and the Chromium Security Boundary
The README carries an explicit unmaintained notice dated 2026-09-11. The author states that no new releases, updated binaries, bug fixes, issue responses, or pull request reviews will be provided. The repository is not marked archived, and the last push was on 2026-09-11, but those repository facts do not override the maintainer's explicit end-of-maintenance statement.
The most important warning concerns security. The final release, v0.9.12.2, was published on 2026-02-09 and bundles a Chromium version from early 2026. The README says the security model depends on keeping embedded Chromium current, but that condition no longer holds for these binaries. It specifically recommends building the project against a current CEF release yourself. This is not a routine upgrade warning. Browservice performs server-side browsing, so an outdated rendering engine can affect every user of the proxy.
Forking is encouraged under the MIT license, which permits modification and redistribution subject to the license terms. That makes a maintained private fork possible in principle, but it also transfers responsibility for CEF integration, compatibility, security updates, packaging, and regressions. The project documentation does not promise that an unmodified fork can simply consume every newer CEF version. Upgrade cost is therefore tied to the size and compatibility of that integration, not to a small application patch.
Where the Image Proxy Is the Wrong Choice
Browservice is the wrong tool when the goal is native modern browsing on the historical machine. The historical client is not executing the current page. It is displaying compressed images produced elsewhere, so page source, scripts, accessibility semantics, form behavior, and browser extensions are not delivered as ordinary web content to that client. A site that depends heavily on local computation, plugins, downloads, or exact DOM behavior may not work as expected.
The approach is also a poor fit for a low-bandwidth or high-latency connection because each visual update can require a new image transfer. A modern remote browser with a normal streaming protocol may be a better architectural fit when the requirement is simply to view current sites from another device. The actual difference is execution location: Browservice sends rendered pixels and converts input into proxy requests, while a remote browser session sends a browser interface and may also use a streaming control protocol. The README does not document a specific alternative implementation, so this comparison is limited to the mechanism established by Browservice's documentation.
Google sign-in is another documented boundary. The README warns that logging into Gmail and other Google services can be difficult and points to a workaround section. The excerpt does not describe that workaround, so the exact failure cannot be characterized further.
Choosing Between Browservice and a Modern Compatibility Service
The alternative that best fits many deployments is a maintained browser-access service that exposes a current browser interface to the user, rather than reconstructing a historical client experience. Such a service can preserve the operating system or application being demonstrated while keeping the browser engine on current infrastructure. It avoids the requirement that the old client understand the modern web, but it also gives up the distinctive image-rendering relationship that makes Browservice useful.
A different alternative is to use a current browser directly. If the historical browser is not essential, this is simpler because there is no pixel stream, event encoding, CEF packaging, or server-side browser instance to operate. If the historical environment is essential, a remote modern browser may be the more practical compromise.
For a self-hosted Browservice deployment, the first checks should be the current CEF source and build compatibility, followed by verification of the required native libraries and the exact binary layout expected by the Makefile. The documentation's unmaintained notice makes those checks more important than minor feature differences. The project remains useful as a source for a maintained fork, but the final bundled binaries should be treated as a fixed historical artifact rather than a current browser service.
Editorial conclusion
Adopt Browservice only for archival, research, or compatibility work where rendering modern pages through an image proxy is acceptable, and verify first whether you can build it against a current CEF release. Do not adopt the bundled final binaries as a maintained internet-facing browser service, because the project states that no further releases or bug fixes will be provided and that its embedded Chromium will become increasingly outdated.
Frequently asked questions
What is Browservice used for?
Browservice lets historical browsers view modern websites through a server-side Chromium renderer. The client receives viewport images and forwards keyboard and mouse events.
How does Browservice transfer web pages to an old browser?
CEF renders the page off screen, the server compresses the viewport as PNG or JPEG, and an embedded HTTP server sends the image to a JavaScript client application. Input events are included in image request URLs.
Is Browservice still maintained?
No. The README explicitly says the project is unmaintained, with no new releases, updated binaries, bug fixes, issue responses, or pull request reviews planned by the maintainer.
Can Browservice be built with a current CEF release?
The README recommends building it against a current CEF release yourself, but the repository excerpt does not document compatibility with every newer CEF version. A prospective maintainer would need to verify that integration.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ttalvitie-browservice)Was this useful?