Skip to main content

Overview

The Formal Endpoint simplifies connecting to protected resources by automating authentication and connection management. It also includes a powerful CLI.

Access

Contact Formal support or your workspace administrator for approved Formal Endpoint distribution and deployment guidance.

Setup

1

Launch the App

Start Formal - you’ll see the logo in your system tray
2

Install CLI (macOS)

Click the tray icon → PreferencesInstall in PATH.Or manually:
3

Log In

4

Verify

You should see all available resources.

Log In with AWS SigV4

Use AWS SigV4 when the Formal Endpoint should authenticate as a Formal machine identity.
AWS SigV4 desktop login requires a Formal machine identity. Its name must match your AWS principal name.
1

Set up AWS SigV4 auth

Complete the AWS SigV4 authentication prerequisites. You can skip the API usage examples.This includes creating an active AWS cloud integration in Formal.
2

Verify your local AWS identity

Confirm the Formal Endpoint host can call AWS STS:
The returned AWS principal must match the Formal machine identity.
3

Configure the Formal Endpoint

Add this setting to ~/.formal/config.toml:
If auth_mode already exists, replace its value instead of adding another line.
4

Restart and log in

Restart the Formal Endpoint so it reloads ~/.formal/config.toml.
formal auth whoami should show the matching machine identity.

Log In with an API Key

Use an API key when the Formal Endpoint should skip the browser login flow. This works for human users and machine users.
1

Create an API key

Go to API Keys and click Create API Key.To authenticate as a machine user, assign the key to that machine user.
2

Start the Formal Endpoint

For a server without a GUI or keyring, add --headless:
3

Verify

The output should show the human or machine user that owns the key.

Connecting to Resources

Avoiding Credentials

After you log in, confirm your session with:
When you run formal connect for a , the Formal Endpoint injects Formal credentials for you. You do not pass Formal usernames or passwords to the client.
  • SSH and Kubernetes: Your ~/.ssh/config and ~/.kube/config are updated so tools use the right paths and identity.
  • Other technologies: A localhost listener is started. Point your client at that address and port without supplying Formal credentials.

Transparent Proxy

Transparent proxy is supported on macOS only.
The Formal Endpoint can route traffic for a resource hostname through the Formal . You use the resource’s real hostname. You do not apply Formal credentials on the client. One-time setup
  1. Run:
  1. Approve any system prompts so the Formal Endpoint network extension can run.
  2. Start the transparent proxy:
  1. Verify that the transparent proxy is running:
Connect
Replace <resource-name> with the name from formal ls. Traffic to that resource’s hostname then goes through the Connector transparently.

CLI Reference

Optional Update Checks

Formal Endpoint update checks are disabled by default. To enable update polling and the tray update icon, add this to ~/.formal/config.toml:

Hide the Tray Icon

To run the Formal Endpoint without a system tray icon, add this to ~/.formal/config.toml:
The agent keeps running in the background, but the tray icon is hidden so users cannot interact with it.

Managed Preferences (MDM overrides)

On macOS, MDM administrators can override any ~/.formal/config.toml setting through the com.formal.desktop managed-preferences domain. Deploy the values as Forced (locked) keys in a com.apple.ManagedClient.preferences payload. Forced managed preferences take precedence over config.toml and apply even when the file is absent. Available keys: See the profile templates in fixtures/mdm_setup/ for a full example payload.

Authentication

List Resources

Interactive TUI with:
  • ↑/k - Move up
  • ↓/j - Move down
  • enter - Connect to resource
  • / - Filter resources
  • q - Quit
  • ? - Show help

Connect to Resources

Databases (PostgreSQL, MySQL, MongoDB)

Then connect with your database client:
Formal automatically injects your credentials - no username/password needed! Note that the database name is required for the connection to be successful. You can also use the --launch argument to launch the appropriate CLI program after connecting (for example psql or ssh), e.g.

Specify Native User

If you need to specify a different native user than the default one assigned to your user, you can specify it using the convention: formal@[the_name_of_the_native_user].

Specify Resource Hostname

If a resource has multiple Resource Hostnames (for example, separate reader and writer endpoints), target one by appending @<hostname-name> to the resource name:
Resource hostname targeting is currently supported for PostgreSQL and MySQL resources.
Connect with your database client as usual, using the port from the formal connect output:
Use the same RESOURCE_NAME@HOSTNAME_NAME target to disconnect:

SSH

This updates your ~/.ssh/config automatically.

Kubernetes

This updates your ~/.kube/config to route through the Connector.

Disconnect

Decrypt Data

Decrypt Formal-encrypted data:

S3 Operations

The Formal s3 command automatically routes traffic to the right Connector so your users don’t have to worry about formatting the right parameters for S3. Interact with S3 through Formal:
See AWS CLI S3 commands for more operations.

Device Trust

The Formal Endpoint reports device information for policy enforcement:
  • Hardware model and serial number
  • OS version and security settings
  • System Integrity Protection status
  • Secure boot status
See MDM Integration for device-based policies.

Headless Mode

The Formal Endpoint supports being launched in headless mode. This can be useful in server environments without a GUI or keyring support. To start the agent in headless mode, you can use the following command:
Now in a separate terminal, you can run the Formal CLI as normal to connect to resources and get credentials:
In headless mode, Formal credentials are only stored in the agent’s memory. This means that you’ll need to reauthenticate when restarting the agent (e.g., when the machine itself reboots). To skip formal auth login in headless mode, start the agent with an API key.

MDM Deployment

Deploy the Formal Endpoint organization-wide via your MDM with an approved package from Formal support:
  1. Request the approved deployment package from Formal support.
  2. Add it as a custom app in your MDM (Jamf, Intune, etc.).
  3. Push it to all user devices.
Need help deploying via MDM? Contact Formal support for assistance.

Troubleshooting

Error: WARNING: CLI cannot connect to the Formal app. Please make sure the Formal app is running.Solution:
  1. Check that Formal is visible in system tray
  2. Restart the Formal app
  3. On Linux: systemctl start --user formal
Error: bash: formal: command not foundSolution:
  1. Reinstall CLI: Click tray icon → Preferences → Install in PATH
  2. Or create symlink manually (see Setup section)
  3. Or add alias to .bashrc/.zshrc
Solution:
  1. Check resource exists: formal ls
  2. Ensure Connector is running
  3. Check network connectivity

Best Practices

The Formal Endpoint must be running for CLI commands to work. Enable “Launch at startup” in preferences.
When connecting via formal connect, use tab completion to find resources quickly.
formal ls provides an interactive way to explore and connect to resources without memorizing names.
Always disconnect from resources when finished to free up local ports.