diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index cef9b50..8e3ab5e 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -1,19 +1,21 @@
-on:
-  push:
-    branches:
-    - master
-name: Push Event
+on: [push, pull_request]
+
+name: CI
 jobs:
   test:
-    runs-on: ubuntu-latest
     strategy:
       matrix:
-        go: [ '1.15' ]
-    name: Go ${{ matrix.go }} test
+        go: [ '1.21' ]
+        os: [ ubuntu-latest, macos-latest, windows-latest ]
+      fail-fast: false
+
+    runs-on: ${{ matrix.os }}
+    name: Test suite
+
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Setup go
-        uses: actions/setup-go@v1
+        uses: actions/setup-go@v4
         with:
           go-version: ${{ matrix.go }}
       - run: go test -v ./...
diff --git a/README.md b/README.md
index 72b1976..8a46315 100644
--- a/README.md
+++ b/README.md
@@ -1,55 +1,20 @@
 
 # browser
-    import "github.com/pkg/browser"
 
-Package browser provides helpers to open files, readers, and urls in a browser window.
+Helpers to open URLs, readers, or files in the system default web browser.
 
-The choice of which browser is started is entirely client dependant.
+This fork adds:
 
+- `OpenReader` error wrapping;
+- `ErrNotFound` error wrapping on BSD;
+- Go 1.21 support.
 
+## Usage
 
-
-
-## Variables
 ``` go
-var Stderr io.Writer = os.Stderr
-```
-Stderr is the io.Writer to which executed commands write standard error.
+import "github.com/cli/browser"
 
-``` go
-var Stdout io.Writer = os.Stdout
+err = browser.OpenURL(url)
+err = browser.OpenFile(path)
+err = browser.OpenReader(reader)
 ```
-Stdout is the io.Writer to which executed commands write standard output.
-
-
-## func OpenFile
-``` go
-func OpenFile(path string) error
-```
-OpenFile opens new browser window for the file path.
-
-
-## func OpenReader
-``` go
-func OpenReader(r io.Reader) error
-```
-OpenReader consumes the contents of r and presents the
-results in a new browser window.
-
-
-## func OpenURL
-``` go
-func OpenURL(url string) error
-```
-OpenURL opens a new browser window pointing to url.
-
-
-
-
-
-
-
-
-
-- - -
-Generated by [godoc2md](http://godoc.org/github.com/davecheney/godoc2md)
diff --git a/browser.go b/browser.go
index d7969d7..63156ec 100644
--- a/browser.go
+++ b/browser.go
@@ -1,12 +1,11 @@
 // Package browser provides helpers to open files, readers, and urls in a browser window.
 //
-// The choice of which browser is started is entirely client dependant.
+// The choice of which browser is started is entirely client dependent.
 package browser
 
 import (
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -30,16 +29,16 @@ func OpenFile(path string) error {
 // OpenReader consumes the contents of r and presents the
 // results in a new browser window.
 func OpenReader(r io.Reader) error {
-	f, err := ioutil.TempFile("", "browser.*.html")
+	f, err := os.CreateTemp("", "browser.*.html")
 	if err != nil {
-		return fmt.Errorf("browser: could not create temporary file: %v", err)
+		return fmt.Errorf("browser: could not create temporary file: %w", err)
 	}
 	if _, err := io.Copy(f, r); err != nil {
 		f.Close()
-		return fmt.Errorf("browser: caching temporary file failed: %v", err)
+		return fmt.Errorf("browser: caching temporary file failed: %w", err)
 	}
 	if err := f.Close(); err != nil {
-		return fmt.Errorf("browser: caching temporary file failed: %v", err)
+		return fmt.Errorf("browser: caching temporary file failed: %w", err)
 	}
 	return OpenFile(f.Name())
 }
diff --git a/browser_freebsd.go b/browser_freebsd.go
index 4fc7ff0..2a3c9a2 100644
--- a/browser_freebsd.go
+++ b/browser_freebsd.go
@@ -2,13 +2,14 @@ package browser
 
 import (
 	"errors"
+	"fmt"
 	"os/exec"
 )
 
 func openBrowser(url string) error {
 	err := runCmd("xdg-open", url)
-	if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound {
-		return errors.New("xdg-open: command not found - install xdg-utils from ports(8)")
+	if errors.Is(err, exec.ErrNotFound) {
+		return fmt.Errorf("%w - install xdg-utils from ports(8)", err)
 	}
 	return err
 }
diff --git a/browser_linux.go b/browser_linux.go
index d26cddd..b303250 100644
--- a/browser_linux.go
+++ b/browser_linux.go
@@ -6,7 +6,7 @@ import (
 )
 
 func openBrowser(url string) error {
-	providers := []string{"xdg-open", "x-www-browser", "www-browser"}
+	providers := []string{"xdg-open", "x-www-browser", "www-browser", "wslview"}
 
 	// There are multiple possible providers to open a browser on linux
 	// One of them is xdg-open, another is x-www-browser, then there's www-browser, etc.
diff --git a/browser_openbsd.go b/browser_openbsd.go
index 4fc7ff0..2a3c9a2 100644
--- a/browser_openbsd.go
+++ b/browser_openbsd.go
@@ -2,13 +2,14 @@ package browser
 
 import (
 	"errors"
+	"fmt"
 	"os/exec"
 )
 
 func openBrowser(url string) error {
 	err := runCmd("xdg-open", url)
-	if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound {
-		return errors.New("xdg-open: command not found - install xdg-utils from ports(8)")
+	if errors.Is(err, exec.ErrNotFound) {
+		return fmt.Errorf("%w - install xdg-utils from ports(8)", err)
 	}
 	return err
 }
diff --git a/example_test.go b/example_test.go
index a6fbe16..c766ce7 100644
--- a/example_test.go
+++ b/example_test.go
@@ -3,7 +3,7 @@ package browser
 import "strings"
 
 func ExampleOpenFile() {
-	OpenFile("index.html")
+	_ = OpenFile("index.html")
 }
 
 func ExampleOpenReader() {
@@ -14,10 +14,10 @@ Perceptions of the most maddeningly untransmissible sort thronged upon us;
 perceptions of infinity which at the time convulsed us with joy, yet which
 are now partly lost to my memory and partly incapable of presentation to others.`
 	r := strings.NewReader(quote)
-	OpenReader(r)
+	_ = OpenReader(r)
 }
 
 func ExampleOpenURL() {
 	const url = "http://golang.org/"
-	OpenURL(url)
+	_ = OpenURL(url)
 }
diff --git a/examples/Open/main.go b/examples/Open/main.go
index fe73fe0..40cb0f6 100644
--- a/examples/Open/main.go
+++ b/examples/Open/main.go
@@ -17,12 +17,14 @@ import (
 	"fmt"
 	"log"
 	"os"
+	"path/filepath"
+	"strings"
 
-	"github.com/pkg/browser"
+	"github.com/cli/browser"
 )
 
 func usage() {
-	fmt.Fprintf(os.Stderr, "Usage:\n  %s [file]\n", os.Args[0])
+	fmt.Fprintf(os.Stderr, "Usage:\n  %s {<url> | <file> | -}\n", filepath.Base(os.Args[0]))
 	flag.PrintDefaults()
 }
 
@@ -39,12 +41,21 @@ func check(err error) {
 
 func main() {
 	args := flag.Args()
-	switch len(args) {
-	case 0:
-		check(browser.OpenReader(os.Stdin))
-	case 1:
-		check(browser.OpenFile(args[0]))
-	default:
+
+	if len(args) != 1 {
 		usage()
+		os.Exit(1)
+	}
+
+	if args[0] == "-" {
+		check(browser.OpenReader(os.Stdin))
+		return
+	}
+
+	if strings.HasPrefix(args[0], "http:") || strings.HasPrefix(args[0], "https:") {
+		check(browser.OpenURL(args[0]))
+		return
 	}
+
+	check(browser.OpenFile(args[0]))
 }
diff --git a/go.mod b/go.mod
index f769897..7e06cbb 100644
--- a/go.mod
+++ b/go.mod
@@ -1,5 +1,5 @@
-module github.com/pkg/browser
+module github.com/cli/browser
 
-go 1.14
+go 1.21
 
-require golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71
+require golang.org/x/sys v0.13.0
diff --git a/go.sum b/go.sum
index b459315..d4673ec 100644
--- a/go.sum
+++ b/go.sum
@@ -1,2 +1,2 @@
-golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71 h1:X/2sJAybVknnUnV7AD2HdT6rm2p5BP6eH2j+igduWgk=
-golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
