Extracted from the officer-suite monorepo into its own public repo. The app is
open source and free; the rest of the suite is not, so it could not stay in a
tree that ships an account layer.
What moved:
- apps/offscale/* -> repo root (App shell, app.json, assets)
- packages/officer-net/ -> modules/officer-net/, a `file:` dependency
- packages/core VPN closure -> src/vpn/ (screen, hook, native bridge, invite)
- packages/core shared primitives -> src/ui/ (theme, cards, tabs, backdrop, splash)
- scripts/build-{ios,android}.sh -> scripts/, cut down to this one app
What deliberately did NOT move: the platform account layer. VpnScreen used to
render core's AppSettingsScreen, which drags in ServersSection -> servers.ts,
useAuth, api.ts, shared-session, install-guard, api-keys. None of that exists
here. src/settings/SettingsScreen.tsx is a fresh replacement rendering exactly
what VpnScreen passed it — the app's own sections plus About — with no Servers
tab, no Appearance control (the app is pinned to dark) and no sign-out.
The one platform reference left in the closure was a dead `import { request }
from './api'` in officer-net.ts, unused since enrollVpn() was removed. Gone. The
app now contacts nothing but the control server you point it at, its peers, and
the enrolment sidecar named inside an invite link you tapped.
Dependencies are pinned to the exact versions the monorepo has installed, not to
ranges: this repo starts from versions already proven to build, and an unpinned
install is a supply-chain decision nobody made. react-query, react-dom,
react-native-screens, expo-secure-store, track-player, expo-audio and
expo-file-system were all declared by the old app and imported by none of this
code, so they are not here.
NOTICE carries Tailscale's BSD-3 text, names the built artifacts that contain
their compiled code, and treats the trademark question separately — including
that src/ui/TailscaleMark.tsx reproduces their logo in the attribution strip.
148 lines
7.3 KiB
Plaintext
148 lines
7.3 KiB
Plaintext
OffScale
|
|
Copyright (c) 2026 André Alçada Padez Monteiro da Conceição
|
|
|
|
This product is licensed under the MIT License (see LICENSE). It bundles and
|
|
links third-party software under its own terms, reproduced below.
|
|
|
|
|
|
================================================================================
|
|
1. Tailscale — BSD 3-Clause License
|
|
================================================================================
|
|
|
|
WHAT IS EMBEDDED, AND WHERE
|
|
|
|
OffScale is a Tailscale client. It does not reimplement the protocol; it embeds
|
|
Tailscale's own Go client library and runs it inside the app.
|
|
|
|
modules/officer-net/gocore/
|
|
A small Go shim (`tailcore.go` and siblings) that imports `tailscale.com`
|
|
and exposes a narrow API to Swift and Kotlin through gomobile. Its
|
|
`go.mod` requires:
|
|
|
|
tailscale.com v1.102.0
|
|
|
|
Everything under `gocore/` that is not Tailscale's own source is part of
|
|
this project and MIT-licensed; what it *imports* is Tailscale's, under the
|
|
BSD 3-Clause licence below.
|
|
|
|
modules/officer-net/ios/libs/TailCore.xcframework (built, not committed)
|
|
modules/officer-net/android/libs/tailcore.aar (built, not committed)
|
|
The compiled output of `gomobile bind` over that shim. These artifacts
|
|
CONTAIN compiled Tailscale code, so any binary distribution of OffScale —
|
|
an .ipa, an .apk, a TestFlight or store build — is a binary distribution of
|
|
Tailscale's software and must carry this notice with it. They are produced
|
|
by `modules/officer-net/scripts/build-libtailscale-{ios,android}.sh` and
|
|
are gitignored because of their size, not because they are unimportant.
|
|
|
|
modules/officer-net/gocore/go.sum
|
|
Records the exact module versions, including transitive dependencies of
|
|
`tailscale.com`, several of which carry their own permissive licences
|
|
(BSD, MIT, Apache-2.0). Their full texts ship inside the Go module cache
|
|
that `go build` resolves; run `go mod download` in `gocore/` and read
|
|
`$(go env GOMODCACHE)` for the authoritative set.
|
|
|
|
The rest of this repository — the React Native app, the Swift Network Extension
|
|
bridge, the Kotlin VpnService bridge, the Expo config plugin and the build
|
|
scripts — is original work under the MIT licence.
|
|
|
|
LICENCE TEXT
|
|
|
|
Copyright (c) 2020 Tailscale Inc & AUTHORS. All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
* Redistributions in binary form must reproduce the above
|
|
copyright notice, this list of conditions and the following disclaimer
|
|
in the documentation and/or other materials provided with the
|
|
distribution.
|
|
* Neither the name of Tailscale Inc nor the names of its
|
|
contributors may be used to endorse or promote products derived from
|
|
this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
TRADEMARKS — READ THIS SEPARATELY FROM THE LICENCE ABOVE
|
|
|
|
The BSD 3-Clause licence covers Tailscale's SOURCE CODE. It does not grant any
|
|
right to the Tailscale name or logo — in fact its third clause explicitly
|
|
withholds the use of the name to endorse or promote derived products.
|
|
|
|
OffScale is an independent, unofficial client. It is **not affiliated with,
|
|
sponsored by, endorsed by or supported by Tailscale Inc.** Do not read the
|
|
presence of the name in this repository as any kind of approval. Please do not
|
|
ask Tailscale's support for help with this app.
|
|
|
|
Two places in this repository use Tailscale's marks, both deliberately and both
|
|
worth reviewing before any public release or store submission:
|
|
|
|
1. The word "Tailscale" appears throughout the UI and the source. It is used
|
|
nominatively — to say truthfully which network protocol and which hosted
|
|
service this client speaks to. That is the ordinary permitted use of
|
|
another party's trademark, and it is why the app is called OffScale rather
|
|
than anything Tailscale-shaped.
|
|
|
|
2. `src/ui/TailscaleMark.tsx` REPRODUCES THE TAILSCALE LOGO. It draws
|
|
Tailscale's 3x3 dot mark as nine circles rather than as their supplied
|
|
bezier paths, but the rendered result is their logo, and it is displayed in
|
|
the attribution strip at the bottom of every screen. It is drawn in a
|
|
single flat colour (white by default) and is deliberately never tinted to
|
|
this app's accent colour.
|
|
|
|
This is a TRADEMARK question, not a licensing one, and the licence above
|
|
does not answer it. It is included here as an attribution — crediting the
|
|
project this client is built on — which is the use most trademark policies
|
|
permit. If Tailscale Inc. would prefer it removed, remove it: nothing else
|
|
in the app depends on that component.
|
|
|
|
"Tailscale" is a trademark of Tailscale Inc.
|
|
|
|
|
|
================================================================================
|
|
2. Headscale
|
|
================================================================================
|
|
|
|
OffScale can be pointed at Headscale (https://headscale.net), an open-source,
|
|
self-hosted implementation of the Tailscale control server, licensed BSD
|
|
3-Clause. No Headscale code is included in this repository or in any build of
|
|
this app — Headscale is a server you run, and this app is a client that speaks
|
|
to it over the network. It is credited in the app's attribution strip for the
|
|
same reason Tailscale is: it is what makes self-hosting possible.
|
|
|
|
Headscale is likewise not affiliated with this project.
|
|
|
|
|
|
================================================================================
|
|
3. JavaScript and native dependencies
|
|
================================================================================
|
|
|
|
The app depends on React Native, Expo, NativeWind, react-native-svg and others,
|
|
each under its own permissive licence (MIT, Apache-2.0, BSD). `package.json`
|
|
lists them with exact pinned versions, and the full licence text of each ships
|
|
inside its package in `node_modules`.
|
|
|
|
|
|
================================================================================
|
|
4. Artwork
|
|
================================================================================
|
|
|
|
The app icon, the adaptive icon, the wordmark and the two wallpaper photographs
|
|
in `assets/` and `src/assets/` are original work, Copyright (c) 2026 André
|
|
Alçada Padez Monteiro da Conceição. The MIT licence above covers the SOFTWARE.
|
|
Redistributing the artwork under the OffScale name, or shipping a fork that
|
|
presents itself as OffScale, is not something this licence is meant to permit —
|
|
fork the code freely, and please use your own name and icon.
|