Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Euler Lite

euler-lite is an open-source frontend codebase for Euler V2. It packages lending, borrowing, portfolio, rewards, and optional product pages into a self-hosted interface that operators can configure and theme.

Use Euler Lite as a starting codebase rather than assuming it supports every deployment or workflow. It uses the Euler V2 SDK; verify the repository revision, configured chains, data sources, transaction plans, and contracts for your deployment.

Product scope

Euler UI exposes the core flows a lending frontend needs:

  • Lend: deposit assets into selected Euler vaults to earn yield.
  • Borrow: open and manage debt positions against accepted collateral.
  • Portfolio: track positions and performance.
  • Rewards: show supported Merkl, Incentra, and Fuul reward programs.
  • Multichain: configure networks represented in the app's supported chain registry and wallet setup. An unknown chain can require code, registry, address, and data-source changes.
  • Optional pages: toggle Earn, Lend, Explore, entity branding, vault-type labels, reward integrations, policy links, and social links through configuration.

Prerequisites

  • Node.js 24+ (24.14.1 recommended)
  • npm
  • Git
  • A Reown Project ID (formerly WalletConnect), obtainable at reown.com

Quick start

git clone https://github.com/euler-xyz/euler-lite
cd euler-lite
npm ci
cp .env.example .env
# Fill in required values (see below)
npm run dev

The app will be available at http://localhost:3000.

Required environment variables

VariableDescription
APPKIT_PROJECT_ID (or NUXT_PUBLIC_APP_KIT_PROJECT_ID)Reown (WalletConnect) project ID.
NUXT_PUBLIC_APP_URLYour app's public URL.
RPC_URL_<chainId>RPC endpoint per chain (e.g. RPC_URL_1 for Ethereum).
SUBGRAPH_URL_<chainId> (or NUXT_PUBLIC_SUBGRAPH_URI_<chainId>)Subgraph URI per chain. SUBGRAPH_URL_* is server-only and preferred; NUXT_PUBLIC_SUBGRAPH_URI_* remains supported.

The server reads RPC_URL_<chainId> and the matching subgraph setting at startup. Environment variables alone do not establish complete support for an unknown chain; verify the app registry, wallet configuration, contract addresses, SDK adapters, and data sources.

# Ethereum Mainnet
RPC_URL_1=https://your-rpc-endpoint.com
SUBGRAPH_URL_1=https://your-subgraph-host/euler-mainnet/latest/gn
 
# Arbitrum
RPC_URL_42161=https://your-arbitrum-rpc.com
SUBGRAPH_URL_42161=https://your-subgraph-host/euler-arbitrum/latest/gn

API endpoints

VariableDefaultDescription
V3_API_URL (or EULER_SDK_V3_API_URL)https://v3.euler.financeEuler V3 upstream used by the internal server proxy and SDK configuration.
EULER_SDK_V3_API_KEYOptional server-side V3 API key forwarded as X-API-Key.
SWAP_API_URL (or NUXT_PUBLIC_SWAP_API_URL)Euler swap API.
PYTH_API_KEYOptional server-side API key sent as Bearer authentication by the internal update proxy (/api/internal/pyth/updates) to its hard-coded https://hermes.pyth.network upstream.

SDK data-source controls

VariableDefaultDescription
SERVER_VAULT_CACHE_SOURCEfallbackServer snapshot builder adapter chain: fallback, onchain, or v3.
NUXT_PUBLIC_BROWSER_VAULT_SOURCEfallbackBrowser fast SDK adapter chain: fallback, onchain, or v3. Plan-time SDK reads remain onchain.
DISABLE_SERVER_VAULT_CACHEfalseDisable internal server vault snapshots and let the browser use the configured RPC pipeline.
DEPRECATED_CHAINSComma-separated chain IDs shown collapsed in the chain selector and skipped by warm-cache cycles.
ONCHAIN_SDK_CHAINSChain selection for configured onchain SDK reads; verify current syntax in the repository.
EVAULT_FETCH_CHUNK_CHAINSChain selection for chunked EVault fetching; verify current syntax in the repository.

The current implementation routes these server functions under internal paths such as /api/internal/v3, /api/internal/pyth/updates, and /api/internal/vaults. Treat internal routes as implementation details and verify them against the pinned repository revision before building integrations around them.

Customization

Euler UI is designed to be rebranded with minimal code changes:

  • Theme colors: edit the THEME CONFIGURATION section at the top of assets/styles/variables.scss. Accent, status, chart, and graph palettes (plus their light/dark overrides and derived shadows/glows) all flow from these CSS custom properties.
  • Logo: the logo renders as an inline SVG using currentColor, so it follows the accent color by default. Set NUXT_PUBLIC_CONFIG_LOGO_URL to use a custom logo, with the built-in Euler logo as fallback.
  • Favicon: replace favicon.ico and favicon.svg in public/favicons/.
  • Token icons: drop overrides into assets/tokens/<symbol>.png. Icons otherwise resolve from a unified server-side token list aggregating the Euler SDK list, DefiLlama, Uniswap, and Merkl.
  • Branding and feature flags: toggle pages (Earn, Lend, Explore), entity branding, vault-type labels, reward integrations (Merkl, Incentra, Fuul), social links, policy URLs, titles, and more via NUXT_PUBLIC_CONFIG_* environment variables.
  • Curated Earn vaults: point the app at your own labels repository with chain-specific earn-vaults.json files to restrict which EulerEarn vaults are shown. With the default euler-xyz/euler-labels repository, entries selected by the configured labels and discovery logic may appear. Verify the filtering behavior against the pinned Euler Lite and labels revisions.

See the repository README for the full list of NUXT_PUBLIC_CONFIG_* flags and SDK data-source controls.

Security boundaries

Keep RPC credentials, API keys, signer material, and other secrets in server-only variables and a secret manager. Any NUXT_PUBLIC_* value is delivered to the browser and must be treated as public. Review which server endpoints proxy privileged upstreams, restrict CORS to intended origins, configure a content-security policy, rate-limit exposed endpoints, and avoid embedding unrestricted provider keys in client bundles.

Self-hosting also makes the operator responsible for dependency updates, domain and TLS configuration, wallet/app identifiers, policy links, monitoring, logging, incident response, and validation of every enabled chain and transaction flow.

Build and deployment

npm run build
npm run preview   # preview locally

The repository includes a Dockerfile with Doppler integration for runtime secret injection:

docker build --build-arg APP_PORT=3000 -t euler-lite .
 
docker run -p 3000:3000 \
  -e DOPPLER_TOKEN=your-doppler-token \
  -e DOPPLER_PROJECT=euler-lite \
  -e DOPPLER_CONFIG=production \
  euler-lite

To run without Doppler, pass the required environment variables directly and override the default CMD:

docker run -p 3000:3000 \
  -e V3_API_URL=https://v3.euler.finance \
  -e EULER_SDK_V3_API_KEY=your-v3-api-key \
  -e SWAP_API_URL=https://swap.euler.finance \
  -e APPKIT_PROJECT_ID=your-project-id \
  -e RPC_URL_1=https://your-rpc.com \
  -e SUBGRAPH_URL_1=https://your-subgraph.com \
  euler-lite node .output/server/index.mjs

Repository

Source, issue tracker, and full configuration reference: github.com/euler-xyz/euler-lite.

Read next