FutureScope is a lightweight technology radar for teams that need to record, review and explain technology choices. It stores radar entries in CSV and keeps configuration, access rules, discussions and audit data in readable files.
- Shows radars in Zalando-style, ThoughtWorks-style and sortable table views.
- Supports one to eight sectors, configurable rings, captions, keys and sector filters.
- Provides pan, zoom, fullscreen and presentation controls for dense radars.
- Lets editors add, change and remove blips from a form or the table.
- Provides undo and redo in table view.
- Adds threaded discussions, resolution state and an audit trail without mixing comments with blip data.
- Gives each user read, comment or edit access to each radar.
- Exports radar data as CSV and diagrams as PNG or SVG.
The ThoughtWorks-style view makes each sector and adoption ring easy to scan during a planning discussion.
Captions mode explains the purpose of sectors and rings directly on the radar, so people do not need a separate guide to interpret it.
Table mode turns the same radar into a sortable, editable list for reviewing fields, filtering entries, and making precise updates.
Teams can manage several radars in one workspace and switch between them without losing each radar's independent settings and history.
The server is the current multi-user runtime. It supports local accounts, Google/OIDC sign-in, server-side sessions, user administration and file persistence. The standalone build stores its working state in IndexedDB; Git sync, invitations and review publication are not connected yet. It runs with the Go server or as an in-progress standalone browser build.
Each radar is a CSV file. Its required columns are:
id,name,sector,ring
1,PostgreSQL,Data,AdoptFutureScope preserves extra columns. Import
sample-fintech-ai-tech-radar.csv from the
dashboard to try it.
Server state has this layout:
data/
futurescope.json
radars/*.csv
audit/**
Run only one server process against a data directory.
FutureScope requires:
- Go 1.25 or later (the version declared in
go.mod) - Node.js 24 or later and its bundled npm
- Git, when you want to clone the repository or push changes to GitHub
On macOS, run the interactive setup script. It prints every detected tool and asks before installing or upgrading anything through Homebrew:
./setup.shThen install the locked JavaScript dependencies and build the server web bundle before building the Go executable:
npm ci
npm --prefix web ci
npm run build:shared
npm --prefix web run build
go build -o build/futurescope ./cmd/futurescopeThe standalone browser artifact is built separately with npm run build:standalone.
An optional container build requires Docker Desktop with its daemon running:
docker build -t futurescope .The repository tracks source code, tests, configuration, documentation, images used by
the documentation, and both package-lock.json files. It deliberately does not
track installed dependencies, generated binaries or web bundles, runtime data, secrets,
or test and visual-audit output. These paths are covered by .gitignore, so a clean
clone is prepared with the prerequisite and build commands above.
For local development, start with authentication disabled:
./build/futurescope serve --data-dir ./data --dev-openOpen http://127.0.0.1:8080. Development-open mode accepts only loopback
connections unless you also pass --allow-insecure-dev-network.
To use local accounts, initialise a fresh data directory and follow the password prompt:
./build/futurescope init --data-dir ./local-data --admin-user admin
./build/futurescope serve --data-dir ./local-dataUseful server options are:
| Option | Purpose |
|---|---|
--data-dir |
Select the configuration, radar and audit directory. |
--listen |
Set a port such as 8080, or an advanced host:port address. Omitting it listens locally on port 8080. |
--public-url |
Set the browser-visible base URL used by OIDC. |
--tls-cert, --tls-key |
Serve HTTPS; both must be set. |
Create a Google OAuth web client. For the default local address, register this redirect URI:
http://127.0.0.1:8080/api/v1/auth/oidc/google/callback
Then start the server with its client credentials:
export FUTURESCOPE_GOOGLE_CLIENT_ID='your-client-id.apps.googleusercontent.com'
export FUTURESCOPE_GOOGLE_CLIENT_SECRET='your-client-secret'
./build/futurescope serve \
--data-dir ./local-data \
--public-url http://127.0.0.1:8080Do not commit the client secret. Outside loopback, authenticated installations need
an HTTPS public URL. Configure other OIDC providers in futurescope.json while
the server is stopped. Load their secrets from an environment variable or file.
Build the plain-file version:
npm run build:standaloneOpen web/dist-standalone/index.html directly. The built folder does not require
Node.js or a FutureScope server on the user's computer. For local UI work without
authentication, add ?dev-open=1 to its file URL.
Google sign-in from file:// still needs live provider verification. The standalone
completion plan does not assume a hosted service or deployment.
npm run test:shared
npm --prefix web test
npm run build:standalone
go test ./...



