How to Run OpenSEO in Local Development Without Authentication
Set the environment variable AUTH_MODE=local_noauth before starting the development server to bypass all authentication requirements and run OpenSEO as a single-admin local instance.
The every-app/open-seo repository ships with a specialized development mode that eliminates the need for Cloudflare Access or Better-Auth configuration during local testing. By activating local_noauth mode, developers can immediately access the full admin interface without credentials, streamlining the development workflow for UI features and API integrations.
Step-by-Step Local Setup
Configure the Environment Variable
The local_noauth mode is controlled through a single environment variable that the preflight checker evaluates at startup. According to src/lib/selfhost-preflight.ts, the system specifically checks for the string "local_noauth" to determine whether to bypass external authentication providers 【/src/lib/selfhost-preflight.ts†L50-L57】.
Set the variable in your shell before running any commands:
export AUTH_MODE=local_noauth
On Windows PowerShell:
$env:AUTH_MODE="local_noauth"
Start the Development Server
With the environment variable defined, launch the Vite-based development environment using the standard package script. The pnpm dev command reads the configuration from vite.config.ts and starts the UI and backend worker, typically available at http://localhost:5173.
AUTH_MODE=local_noauth pnpm dev
The same environment variable is referenced by the rank-tracking bootstrap script (scripts/seed-rank-tracking.ts) which automatically creates a default project for the local admin upon startup 【/scripts/seed-rank-tracking.ts†L20-L23】.
Verify Configuration (Optional)
Run the self-host preflight utility to confirm that your local environment is correctly configured for no-auth development:
pnpm ts-node scripts/selfhost-preflight.ts
With AUTH_MODE=local_noauth, this check validates that no external auth provider configuration is required and confirms the instance will operate as a single-admin deployment 【/src/lib/selfhost-preflight.ts†L50-L57】.
Seed Default Data (Optional)
To populate the local instance with a default organization, user, and project, execute the seeding scripts. The scripts/seed-projects.ts file bootstraps the local admin’s organization, user profile, and a “Default” project, mirroring what a real deployment would have 【/scripts/seed-projects.ts†L13-L15】.
AUTH_MODE=local_noauth pnpm ts-node scripts/seed-projects.ts
This step provides immediate data to explore the SEO dashboard features without manually creating resources.
Technical Implementation Details
Authentication Middleware Bypass
When AUTH_MODE=local_noauth is active, the authentication middleware implements a short-circuit that grants admin access automatically. In src/middleware/ensure-user/resolve.ts, the code checks the environment variable and immediately returns the local admin context, preventing redirects to Cloudflare Access or Better-Auth endpoints 【/src/middleware/ensure-user/resolve.ts†L15-L16】.
This bypass treats the entire deployment as a single-tenant instance owned by the default administrator, eliminating all login flows while preserving the admin permission structure.
Docker-Based Configuration
For containerized local development, include the AUTH_MODE variable in your Docker Compose configuration. The repository's README.md references the Docker self-host guide for this purpose 【/README.md†L48-L51】.
services:
app:
environment:
- AUTH_MODE=local_noauth
The docs/SELF_HOSTING_DOCKER.md file contains complete instructions for containerized deployments using the local_noauth option.
Summary
- Set
AUTH_MODE=local_noauthto disable authentication requirements in the every-app/open-seo codebase - The
src/lib/selfhost-preflight.tsfile validates this mode during startup 【/src/lib/selfhost-preflight.ts†L50-L57】 - The development server starts normally with
pnpm devand serves the UI athttp://localhost:5173 src/middleware/ensure-user/resolve.tshandles the runtime authentication bypass 【/src/middleware/ensure-user/resolve.ts†L15-L16】- Seeding scripts in
scripts/seed-projects.tscreate default data for immediate testing 【/scripts/seed-projects.ts†L13-L15】
Frequently Asked Questions
Is local_noauth mode safe for production deployments?
No. The local_noauth mode is designed exclusively for local development and testing. As implemented in src/middleware/ensure-user/resolve.ts, this mode grants unrestricted admin access to all requests without verification 【/src/middleware/ensure-user/resolve.ts†L15-L16】. Production environments must use Cloudflare Access or Better-Auth with secure AUTH_MODE configuration.
What user account gets created when I run the seed scripts?
The scripts/seed-projects.ts file creates a default local admin organization, user profile, and a "Default" project when executed with AUTH_MODE=local_noauth 【/scripts/seed-projects.ts†L13-L15】. This structure mirrors authenticated deployments but assigns ownership to the synthetic local admin account.
Can I switch from local_noauth to authenticated mode later?
Yes. Simply unset or change the AUTH_MODE environment variable and restart the server. The application reads this configuration at startup in src/lib/selfhost-preflight.ts 【/src/lib/selfhost-preflight.ts†L50-L57】. However, you must configure proper Cloudflare Access or Better-Auth credentials before restarting, as the system will enforce authentication once the bypass is disabled.
Which source files control the local_noauth behavior?
The primary logic resides in two locations: src/lib/selfhost-preflight.ts handles the initial environment validation 【/src/lib/selfhost-preflight.ts†L50-L57】, while src/middleware/ensure-user/resolve.ts implements the runtime authentication bypass 【/src/middleware/ensure-user/resolve.ts†L15-L16】. The seeding utilities in scripts/seed-projects.ts and scripts/seed-rank-tracking.ts provide the data layer support for this mode 【/scripts/seed-projects.ts†L13-L15】 【/scripts/seed-rank-tracking.ts†L20-L23】.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →