Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

vfreg

i5ik77Polyform Noncommercial 1.03.1.0TypeScript support: included

Remote isolated browser platform by Dosyago

remote-browser, remote-isolated-browser, rbi, cbii, secure-document-viewer, browser, headless, automation, chrome, viewfinder, browsergap, remoteview, chrome controller, secure, web-proxy

readme

Viewfinder · Source Lines of Code PRs welcome npm visits npm Docker Pulls

What is Viewfinder?

Viewfinder is a HTML user-interface for a browser that runs on a remote server. This means you can embed a browser UI on your website and provide unrestricted access to web resources in a way that's both more sandboxed than, and less restricted than, traditional web <iframe> elements. In also enables the building of a number of interesting applications.

Getting it

Clone the repo:

$ git clone https://github.com/i5ik/Viewfinder.git
$ cd Viewfinder

or, install it from NPM:

$ npm i --save vfreg

or, pull it off DockerHub:

$ docker pull dosyago:viewfinder

Applications

Some possible applications to build with Viewfinder:

Product space

  • Remote browser isolation for security, risk mitigation and privacy
  • Zero download co-browsing for collaboration and social interaction
  • Delivery layer for a zero download web scraping app that works on any device format
  • Alternate browser extension platform with associated app store
  • An online "internet cafe" with advanced security and privacy features
  • An alternative to VPNs, DNS blocklists
  • Email attachment threat mitigation via CDR and automatic opening of links and attachments in the remote browser
  • An intuitive UI affordance to enable clients to stay in-app while performing 3rd-party processes that normally require them to leave your web site.
  • A fully skinable and themeable client-customizable online hosted web browser alternative to downloadable browsers
  • Replay web app interactions to record bugs by recording the even stream and the viewport
  • Record visual How To guides illustrating key user stories

Internal tooling space

  • Human-in-the-loop intervention tool to unblock stuck browser automation jobs, and diagnose "selector drift" and script-page mismatch issues
  • An effective web proxy to easily integrate 3rd-party processes without APIs
  • An effective, interactive console to inspect, observe and interact with browser automation tasks
  • An automatable browser that more effectively evades bot detection mechanisms that pure headless Chrome
  • A scriptable console, and interactive simulator for automation tasks and automation script creation with a great, familiar and intuitive feedback loop

Tech and framework space

  • A <WebView> tag for the open web
  • An <iframe> without cross-origin restrictions
  • A 'head' for headless browsers

Progress & Roadmap

It's kind of a long road but--hey--we've come so far already, we're gonna keep going 😉 (⭐ features are only in Viewfinder Pro)

Browser Features

  • [:heavy_check_mark:] Back and forward history buttons
  • [:heavy_check_mark:] Multiple tabs
  • [:heavy_check_mark:] Favicons
  • [:heavy_check_mark:] Addressbar search
  • [:heavy_check_mark:] Incognito tabs
  • [:heavy_check_mark:] Persistent sessions
  • [:heavy_check_mark:] <select> inputs
  • [:heavy_check_mark:] Modal dialogs
  • [:heavy_check_mark:] Copy and paste
  • [:heavy_check_mark:] Native paste
  • [:heavy_check_mark:] Touch scroll and touch drag
  • [:heavy_check_mark:] File upload (including multiple files)
  • [:heavy_check_mark:] Basic & Digest Auth support
  • [:heavy_check_mark:] Clear all cookies and cached data during sessions
  • [:heavy_check_mark:] Sound
  • [:heavy_check_mark:] Interact with CAPTCHAs
  • [:heavy_check_mark:] Context-menu (for opening in new tab, copying link address, etc)
  • [:heavy_check_mark:] Responsive design for any device viewport
  • [:heavy_check_mark:] Desktop scroll-zoom
  • [:heavy_check_mark:] Mobile pinch-zoom
  • [:heavy_check_mark:] mailto:, tel:, sktype: and other app and protocol links
  • [:heavy_check_mark:] Multiple select
  • [:hourglass_flowing_sand:] Multi-touch on mobile
  • [:hourglass_flowing_sand:] Bookmarks
  • [:hourglass_flowing_sand:] Displayable history
  • [:hourglass_flowing_sand:] Webcam and microphone support

Security Features

  • [:heavy_check_mark:] RBI browser isolation security model
  • [:heavy_check_mark:] Fully clientless, embeds straight into a web page, zero download required for front-end
  • [:heavy_check_mark:] Evades headless detection
  • [:heavy_check_mark:] Customizable browser-fingerprinting cross-section
  • [:heavy_check_mark:] Works with proxies and Tor
  • [:heavy_check_mark:] DevTools (currently only works on Chrome clients) ⭐
  • [:heavy_check_mark:] Integrates with PDF/DOCX/XLSX secure document viewer (CDR) (built-in only in Pro ⭐)
  • [:heavy_check_mark:] cgroups resource control sandboxing ⭐
  • [:heavy_check_mark:] 1 temporary user account per browser session ⭐
  • [:heavy_check_mark:] Clean-slate profile directory per browser session ⭐

Application Features

  • [:heavy_check_mark:] Built-in AdBlocker
  • [:heavy_check_mark:] Fully remote real-time co-browsing + built-in chat ⭐
  • [:heavy_check_mark:] Advanced adaptive streaming (WebRTC + WebSockets) and Shortest path lag reduction ⭐
  • [:heavy_check_mark:] Run sandboxed puppeteer scripts ⭐
  • [:heavy_check_mark:] Skinnable browser UI ⭐
  • [:heavy_check_mark:] Kiosk mode (no UI controls) ⭐
  • [:hourglass_flowing_sand:] Sync browser cookies & settings from other browser (or, for example, Google account)
  • [:hourglass_flowing_sand:] Chrome extensions API (or cloned functionality)

Development and Deployment Features

  • [:heavy_check_mark:] Fully Dockerized / Dockerizable + reproducible startup and install scripts
  • [:heavy_check_mark:] Cloud-agnostic, runs on any cloud platform
  • [:heavy_check_mark:] Platform agnostic, and runs on Windows, Linux and Mac
  • [:heavy_check_mark:] Dependency control and minimal dependencies (only 14 external 1st level deps on back-end--mostly express related--and 0 on front-end)
  • [:heavy_check_mark:] Many customizable settings (including site blocklist)
  • [:heavy_check_mark:] Embeddable in an <iframe>
  • [:heavy_check_mark:] Vertically scalable (multiple browsers per server) ⭐
  • [:heavy_check_mark:] Small resource footprint ⭐
  • [:heavy_check_mark:] Bandwidth, CPU and memory limiting for resource abuse detection and prevention ⭐
  • [:heavy_check_mark:] Simple API ⭐
  • [:heavy_check_mark:] Fully white-labelable
  • [:hourglass_flowing_sand:] White-labeling API
  • [:hourglass_flowing_sand:] Fully scriptable with comprehensive API

Pro or Regular?

What's the difference between VF Pro and regular VF?

The main differences are that VF Pro has more advanced features and more frequent updates than VF regular. Many Pro features eventually are sent down to regular, but some will likely remain exclusive to Pro. Pro is updated weekly, with major updates shipped every quarter, whereas regular VF follows a much slower and more haphazard release cycle.

The final main differenece you might want to be aware of is that while VF regular is source-available (and is the sourcecode in this repository), VF Pro is currently closed-source proprietary software only available commercially, for either use in an Individual server, or for deployment in a Self-hosted package.

More information on these commercial options is below, and take a look at the table of feature comparison between Regular and Pro.

VF Pro vs Regular — Comparison Table

Feature Regular Pro
Browser features :heavy_check_mark: :heavy_check_mark:
Security features :heavy_check_mark: :heavy_check_mark:
Privacy features :heavy_check_mark: :heavy_check_mark:
Themeable browser UI :heavy_check_mark: :heavy_check_mark:
Docker image :heavy_check_mark: :heavy_check_mark:
Cloud and platform agnostic :heavy_check_mark: :heavy_check_mark:
Multi-user security features | :heavy_check_mark:
Auto scaling and resource control | :heavy_check_mark:
Advanced viewport streaming and lag reduction | :heavy_check_mark:
Built-in cobrowsing and instant messaging | :heavy_check_mark:
Run sandboxed puppeteer scripts | :heavy_check_mark:
<iframe> embeddable | :heavy_check_mark:
Kiosk mode | :heavy_check_mark:
Simple API | :heavy_check_mark:

Commercial Options

If you want to use VF commercially your main option is to purchase an S license, which permits non-competing uses. If you'd like to license VF for purposes that competete with us, we'll have to negotiate agreements. Reach out to me if that's the case.

Viewfinder Pro is provided by the Dosyago Corporation as a commercial offering in two flavors: individual, and self-hosted.

Self-hosted

Includes the provision of the VF Pro software, an S license and various tiers of service. The basic cost principle is established on time (not scale): time you want the license for, time of the latest update you want, and time it takes us to service your deployment. Targeted at SMBs up to Enterprise.

  • Various configurable packages available with either perpetual or yearly licensing, and included service and consulting.
  • Starts at USD6,700 a year for non-perpetual single year license plus minimal service.
  • Mid-tier options cost 10K - 16K yearly with a variety of options including perpetual or annual licenses.
  • Invoiceable service and consulting also available.
  • BYO cloud or data-center, or on-prem are all available.

Prices and buy links for Self-hosted tiers are coming soon! In the meantime, email me to ask a question.

Individual

Includes provision of a geographically located server wherever you want (or as close to it as possible for us), installed software, credentials to access, and various tiers of service. The basic cost principle is founded on performance (CPU cores, memory, network speed and bandwidth amount).

See the current prices and tiers for the Individual track.

Motivation

I originally created this in 2018 as a layer for a collaborative zero-download clientless web-scraping app I'm working on, but fell in love with this browser layer, and decided it was useful enough and a product category in its own right.

FAQ

Can you rush legacy Flash applications?

There's a customized version of Viewfind Pro with Flash support via two separate paths: Legacy Chrome (pre Chrome 88+ - Jan 2021) with [xvfb], and using latest Chrome with ruffle. However, there's no guaruntee that your particular application will work, because ruffle still has many missing features and bugs, and because streaming your app over the network in a virtual browser may introduce other issues for your application, or simply be not suitable in your case.

But in the ideal case, yes, it can be done, and you can embed your legacy Flash player app in a VF Pro iframe and put it on your site.

Can I download files form the web using VF?

By default VF does not permit downloading of files to the local device, and instead downloads them to the remote server. In VF Pro, the built-in secure document viewer then processes and displays them if they are of a supported format. However, both Pro and Regular lines can be configured to provide a download link to get the file to the local device, although that is not recommended in security applications, at least not without proper scanning or CDR.

Can VF integrate with our existing secure document viewer or download scanning?

Not out of the box but VF Pro can be configured to pass requests for document viewing to a 3rd-party application and to serve downloaded files. In short, VF can be configured to send downloads to your secure document viewer or download scanner. In the case where VF is configured to allow downloads to the local device, it should not effect your normal download scanners and endpoint protection software.

What sort of multi-profile or "fake profile" privacy options are available to defeat fingerprinting and tracking?

By default VF Pro runs with a clean slate every session, so there are no tracking cookies or data retained from any other session of VF. Even if persistent sessions are enabled, VF can still be configured to transmit various phoney profile information (such as installed plugins, geolocation, platform, device, browser version and so on) in order to attempt to defeat fingerprinting and tracking. However, even with the added layer of protection of an additional remote browser, a separate IP address, and forged browser identification, there's no guaruntee of 100% effectiveness. If someone logs in to an account linked to their other profiles or identities, it may still be possible to track them, even if they are using VF. Technology can only go so far, people must also take sensible precautions in their choices.

Can you white-label VF as the tech for our internal RBI product?

Not us, but you can do it and we can help you. VF can most definitely be fully whitelabelled and customized with a variety of themes, splash pages, styles, design systems, brand look and assets.

Can I use VF tech to make my own commercial RBI product and sell that?

Yes of course. With the proper license this is most definitely a possible use case for VF, and we encourage you to do so.

Where can I get more information on your services, available licenses or pricing?

Eventually I intend to most of that information here, but for now you may email me. The reason is I'm currently revising a lot of positioning, licensing and prices. If you let me know you prefer a voice call that's also available.

Other sections - coming soon

  • Click to deploy on GCP, AWS, Heroku
  • Planned: StackScript for Linode, Vultr Marketplace entry
  • Some sort of community page: Matrix? Reddit? Usenet? Kidding ... probably ?

Contributing

Contributions welcome! But please sign the CLA first. Don't worry, if you open a pull request a bot will automatically let you know what you need to do!

:balance_scale: Licensing

VF Regular

VF Regular (this repository) is licensed under the Polyform Noncommercial License 1.0 (NC license). Any previous licensed versions are also relicensed under this license. Read the license.

In essence this license permits any use case besides those which are for a commercial purpose or anticipated commercial application. Explicitly, "use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding."

VF Pro

VF Pro (closed-source) is available under the Polyform Shield License 1.0.0 (S license), via a licensing agreement with The Dosyago Corporation. Read the license.

In essence this license permits any use case besides those which compete with Dosyago Corporation (or the rightsholders of VF).

If you'd like to purchase a Pro S license, see the price list here

This project copyright The Rightsholders (currently Cris Stringfellow & The Dosyago Corporation) 2022

changelog

v0.12.0 (Wed, Oct 30 2019)

  • 66a5e226 flags: add new --disable flags to reduce noise and disable backgrounding (#170)
    • --disable-component-extensions-with-background-pages
    • --disable-backgrounding-occluded-windows
    • --disable-renderer-backgrounding
    • --disable-background-timer-throttling
  • c4890ee3 feat: expose public interface for locating Chrome installations (#177)
    • Launcher.getInstallations() returns an array of paths to available Chrome binaries
  • a5ccaa4e deps: update assorted dependencies (#175)
  • e67a10df --disable-translation is now --disable-features=TranslateUI (#167)

v0.11.2 (Mon, Jul 29 2019)

  • 1928187 fix: prevent mutation of default flags (#162)
  • 02a23c2 docs: fix launcher example in README (#160)
  • 90dc0e4 update manual-chrome-launcher with fixes from LH

v0.11.1 (Tue, Jul 09 2019)

  • ec80f0ca tests: drop support for node 9. continue supporting node 8 LTS (#159)
  • 4865f3af deps(security): bump mocha to latest (#158)
  • e0d2b09b deps(security): bump handlebars from 4.0.11 to 4.1.2 (#157)
  • 982be53f update changelog for v0.10.7 and v0.11.0

v0.11.0 (Tue, Jul 09 2019)

  • a860504f [Breaking change] remove enableExtensions. add ignoreDefaultFlags & defaultFlags() (#124)
  • 448a1d48 chrome-finder: Add support for MacOS Catalina (#149)
  • 55b891bb deps(is-wsl): add support for WSL 2; drop Node 6 (#152)
  • 57e18181 deps: upgrade typescript and ts-node (#155)
  • a8848116 deps(security): bump lodash from 4.17.4 to 4.17.11 (#147)
  • 0a775dab Document that --enable-automation disables automatic page reloads (#140)
  • c9f653e2 Removing dead --safebrowsing-disable-auto-update flag. (#139)
  • be12d564 yarn.lock add integrity
  • e361aa43 Update changelog.md (#137)

v0.10.7 (Wed, May 01 2019)

  • 55397e0c deps: update yarn.lock from #142
  • 179a3f33 silence grep (#138)
  • d2f6037a fix: move unneeded ts types to devDeps (#142)
  • 984d61ce docs(flags): remove a few flags that are gone.
  • 6316362c docs: fix link to chrome-launcher's flags (#128)
  • f1f6d162 Update chrome-flags-for-tools.md

v0.10.5 (Tue, Sep 25 2018)

  • 1328319b fix: set the which command's stdio to pipe (#125)

v0.10.4 (Mon, Sep 17 2018)

  • 35842ba4 fix: ignore stdio on which call (#121)
  • f126c3a0 fix: reject promise on failed kill() (#112)
  • 5ee0fde2 Set custom error codes for all errors.
  • 841bdf3f Fix picking CHROME_PATH priority over other matches.
  • 6b10d748 Fix Travis CI build: GCE for chrome bug (#87)
  • d4aa8295 Fix readme's default logLevel (#85)
  • 5be71243 Type improvements (#102)
  • dd5fdd49 Stricter typing for logLevel (#105)
  • c9394cf7 Fix README typo: booelan ==> boolean (#104)
  • Update chrome-flags-for-tools.md

v0.10.3 (Mon, Sep 17 2018)

Bad release. Had a breaking change (#70). Unpublished.

v0.10.2 (Mon, Jan 8 2018)

  • ef91605f Fix TS typing (#82)
  • baf2205f tests(travis): test on Node 9, drop testing on Node 7 (#80)

v0.10.1 (Fri, Jan 5 2018)

  • a5bc8180 Fix getLocalAppDataPath for wsl (#75)
  • 70a91885 readme: recommend use of cri with chrome-launcher (#78)
  • d3ee63bd folder refactor: ts in /src, js in /dist (#69)

0.10.0 (Fri, Dec 8 2017)

  • 449c5238 Expose launched chrome child process object. (#67)
  • 0978891c Enable users to pass env vars into spawned chrome. (#66)
  • 0261f43b Add document covering the various chrome flags
  • 5617473c Make launcher the default export. (#63)
  • 483acff5 fix: support alpine linux by retrying grep with -r (#61)
  • eaa0bb87 docs: update maxConnectionRetries default to 50 (#58)

0.9.0 (Mon, 27 Nov 2017)

  • 4cc9c075 New: Add userDataDir flag to use default user profile instead (#48)
  • 94137051 Avoid selecting google-emacs (#35)

0.8.0 (Wed, 20 Sept 2017)

  • 256399c Add support for Windows Subsystem for Linux / BashOnWindows (#27)

0.7.0 (Thu, 14 Sept 2017)

0.6.0 (Thu, 17 Aug 2017)

  • 43baee69 mute any audio (#3028)
  • ae6e9551 Better SIGINT handling (#2959)
  • 3ab3a117 docs: add changelog to launcher (#2987)

0.5.0 (Mon, 14 Aug 2017)

  • 494f9911 clarify priority of chromePath options
  • 1c11021a add support for finding Chromium on Linux (#2950)
  • 391e2043 Publish type definitions instead of source TypeScript files (#2898)
  • de408ad3 readme: update example using deprecated LIGHTHOUSE_CHROMIUM_PATH (#2929)
  • 8bc6d18e add license file to launcher package. (#2849)

0.4.0 (Tue, 1 Aug 2017)

  • 37fd38ce pass --enable-extensions on from manual-chrome-launcher (#2735)
  • c942d17e support enabling extension loading (#2650)

0.3.2 (Wed, 19 Jul 2017)

  • 112c2c7f Fix chrome finder on linux/osx when process.env isn't populated (#2687)
  • 5728695f Added CHROME_PATH to readme (#2694)
  • fedc76a3 test: fix clang-format error (#2691)
  • a6bbcaba nuke 'as string'
  • 41df647f cli: remove --select-chrome,--skip-autolaunch. Support CHROME_PATH env (#2659)
  • 8c9724e2 fix launcher w/ arbitrary flags (#2670)
  • 9c0c0788 Expose LHR to modules consuming cli/run.ts (#2654)
  • 6df6b0e2 support custom port via chrome-debug binary (#2644)
  • 3f143b19 log the specific chrome spawn command.

0.3.1 (Wed, 5 Jul 2017)

  • ef081063 upgrade rimraf to latest (#2641)

0.3.0 (Fri, 30 Jun 2017)

  • edbb40d9 fix(driver): move performance observer registration to setupDriver (#2611)