Environment

Managing environment variables, secrets, and R session state

Overview

Framework provides tools for managing environment variables (secrets, credentials) and R session state. Keep sensitive data out of your code and version control while maintaining reproducibility.

Environment Variables

The .env File

Store sensitive values in a .env file at your project root:

# .env (gitignored)
# Database credentials
DB_HOST=db.example.com
DB_USER=analyst
DB_PASSWORD=secret123

# API keys
OPENAI_API_KEY=sk-...
S3_ACCESS_KEY=AKIA...
S3_SECRET_KEY=...

Framework's .gitignore templates automatically exclude .env files to prevent accidental exposure.

Using env() in Configuration

Reference environment variables in settings.yml using env():

connections:
  analytics:
    driver: postgres
    host: env("DB_HOST")
    user: env("DB_USER")
    password: env("DB_PASSWORD")

connections:
  storage_buckets:
    default:
      bucket: my-reports-bucket
      region: us-east-1
      access_key: env("S3_ACCESS_KEY")
      secret_key: env("S3_SECRET_KEY")
  default_storage_bucket: default

This keeps credentials out of version control while allowing configuration to be shared.

Default .env Template

When you create a new project, Framework generates a .env template with common variables:

# Framework environment defaults
# Populate these values before running scaffold() or publishing.

# PostgreSQL connection (example)
POSTGRES_HOST=
POSTGRES_PORT=5432
POSTGRES_DB=
POSTGRES_SCHEMA=public
POSTGRES_USER=
POSTGRES_PASSWORD=

# S3-compatible object storage (AWS S3, MinIO, etc.)
S3_ENDPOINT=
S3_BUCKET=
S3_REGION=
S3_ACCESS_KEY=
S3_SECRET_KEY=
S3_SESSION_TOKEN=

R Session Management

Clear Environment

Reset your R session while optionally keeping specific objects:

# Clear everything
env_clear()

# Keep specific objects
env_clear(keep = c("config", "raw_data"))

env_clear() removes:

  • All objects from the global environment
  • Open plot devices
  • Loaded packages (except base packages)
  • Runs garbage collection

Environment Summary

Get an overview of your current R session:

env_summary()

This displays:

  • R version and platform
  • Loaded packages with versions
  • Objects in global environment (sorted by size)
  • Memory usage

Example output:

=== Environment Summary ===

R Version: R version 4.3.2 (2023-10-31)
Platform: aarch64-apple-darwin20

Loaded Packages (5):
  • framework (0.1.0)
  • dplyr (1.1.4)
  • ggplot2 (3.4.4)
  • readr (2.1.4)
  • tibble (3.2.1)

Objects in Global Environment: 12
  Top 10 by size:
    large_dataset [tbl_df] - 45.2 MB
    model_results [list] - 12.3 MB
    summary_stats [data.frame] - 0.8 KB
    ...

Memory in use: 234.5 MB

Best Practices

Never Hardcode Secrets

# Bad - secrets in config
password: "my_secret_password"

# Good - reference environment variable
password: env("DB_PASSWORD")

Check .gitignore

Framework warns if .env isn't gitignored:

Warning: .env is NOT in .gitignore!
  Add it to prevent accidentally committing secrets.

All Framework project templates include .env in .gitignore by default.

Use Descriptive Variable Names

# Good - clear purpose
PROD_DB_PASSWORD=...
STAGING_DB_PASSWORD=...
ANALYTICS_API_KEY=...

# Avoid - ambiguous
PASSWORD=...
KEY=...

Document Required Variables

Add comments to your .env template:

# Required for database connections
# Get credentials from your team lead
DB_HOST=
DB_PASSWORD=

# Optional - only needed for S3 publishing
S3_ACCESS_KEY=