Spry LogoDocumentation
Core Concepts

Environment Variables

Recommended Spry environment setup using direnv and .envrc, with details on creation, invocation, and workflow integration.

Environment Variables and .envrc in Spry

Spry supports environment-based configuration, allowing you to manage environment specific values in a clean, isolated way.
The recommended method is to use a directory-scoped .envrc file along with direnv.
This ensures all developers or automation pipelines can share consistent environment setups without hardcoding sensitive or system-specific details.


Why use .envrc?

  • Isolation: Configuration applies only to the current project directory.
  • Consistency: All contributors share the same environment setup.
  • Security: direnv only loads .envrc after explicit approval using direnv allow.
  • Automation-ready: Integrates seamlessly with Spry's dev and deployment workflows.

The recommended practice is to define your environment variables in a local .envrc file.
When you use direnv, it automatically loads these values each time you enter the project directory.

Create .envrc

Create a file named .envrc in the root of your Spry project directory.

.envrc
# .envrc (bash/zsh)
export SPRY_DB="sqlite://sqlpage.db?mode=rwc"
export PORT=9227

Your project structure should look like this:

Spryfile.md
.envrc

Once the file is created, run the following command in your terminal:

direnv allow

This grants direnv permission to load environment variables from .envrc into your shell whenever you enter this directory.


Creating .envrc using a Task

If you prefer automating .envrc creation through a Spry task or script, you can do so using a shell task.

Usage — envrc env -C ./.envrc Syntax

Sometimes, you may see documentation or examples using:

```envrc env -C ./.envrc --gitignore --descr "Generate .envrc file and add it to local .gitignore if it's not already there"
export SPRY_DB="sqlite://scf-2025.3.sqlite.db?mode=rwc"
export PORT=9227
```
What does this mean?

This syntax illustrates how environment variables can be defined and loaded. It creates the .envrc file** by itself.

Manual Script-Based Creation

# Create .envrc file with default values
echo 'export SPRY_DB="sqlite://sqlpage.db?mode=rwc"' > .envrc
echo 'export PORT=9227' >> .envrc

Then run:

direnv allow

Execute via Spry Task

Spry also allows running the environment setup through a task defined in your Spry workflow.
If your Spry configuration includes a task named env, you can execute it as follows:

spry rb task env

This command internally runs the equivalent of:

```envrc env -C ./.envrc --gitignore --descr "Generate .envrc file and add it to local .gitignore if it's not already there"
export SPRY_DB="sqlite://scf-2025.3.sqlite.db?mode=rwc"
export PORT=9227
```

After running the task, you should still execute:

direnv allow

to authorize direnv to load the variables defined in .envrc.


Summary

MethodDescriptionUsage
ManualCreate .envrc manually, then enable it with direnv allow.cat > .envrc ... then direnv allow
Recommended: Task-basedAutomates the recommended command using a Spry task.spry rb task env then direnv allow

By following these approaches, you can ensure consistent, isolated, and easily maintainable environment setups across all Spry-based projects.

The values shown above (SPRY_DB, PORT) are example values used for demonstration.
Replace them with your project's actual database URL, credentials, and desired port number.

How is this guide?

Last updated on

On this page