Self host your own Vercel
Find a file
Salama Ashoush 0db1205e0b
fix(cli): fix project resolution in env vars subcommands and services env response (#59)
* fix(cli): fix project resolution in env vars subcommands and services env response parsing

Two bugs fixed:

1. `environments vars` subcommands (get, set, delete, import, export) used
   `cmd.parent!.parent!.opts().project` to read the `--project` flag, traversing
   one level too high in the command hierarchy. The `--project` flag is defined on
   the `vars` command, so the correct traversal is `cmd.parent!.opts().project`.
   The `list` subcommand already did this correctly.

   Before: `temps envs vars -p my-app delete KEY` → "Project undefined not found"
   After:  `temps envs vars -p my-app delete KEY` → successfully deletes

2. `services env` command crashed with "envVars is not iterable" because the API
   endpoint returns `HashMap<String, String>` (a plain object) but the CLI expected
   `Array<EnvironmentVariableInfo>`. Added handling to convert the object response
   into the expected array format.

   Before: `temps services env --id 1 -p my-app` → "envVars is not iterable"
   After:  `temps services env --id 1 -p my-app` → displays variables correctly

* docs: add CLI env vars fixes to changelog [Unreleased]
2026-04-05 11:24:10 +02:00
.github fix: configurable db pool, multi-preset detection, enter-submit wizards (#52) 2026-03-31 22:11:08 +02:00
apps/temps-cli fix(cli): fix project resolution in env vars subcommands and services env response (#59) 2026-04-05 11:24:10 +02:00
assets/screenshots fix(deployer): remove unnecessary u64 cast flagged by clippy 2026-02-16 11:14:33 +01:00
crates fix(deps): resolve all 18 dependabot vulnerabilities (#60) 2026-04-05 11:23:37 +02:00
docs fix: configurable db pool, multi-preset detection, enter-submit wizards (#52) 2026-03-31 22:11:08 +02:00
examples fix(deps): resolve all 18 dependabot vulnerabilities (#60) 2026-04-05 11:23:37 +02:00
images chore: update Docker configurations and backup service enhancements 2026-02-24 15:12:00 +01:00
mcp fix(core): lifecycle management, bounded caches, and memory safety across 11 crates 2026-02-20 19:22:26 +01:00
scripts fix: configurable db pool, multi-preset detection, enter-submit wizards (#52) 2026-03-31 22:11:08 +02:00
sdks fix(deps): resolve all 18 dependabot vulnerabilities (#60) 2026-04-05 11:23:37 +02:00
skills fix(docs): use correct TimescaleDB-HA volume path for data persistence 2026-03-25 11:38:05 +01:00
web fix(email): email tracking fixes, analytics endpoints, SDK regen, settings validation (#57) 2026-04-02 18:36:15 +02:00
.dockerignore feat: Add preview environment functionality for projects 2025-11-11 11:48:17 +01:00
.gitignore chore: commit remaining unstaged changes from CAS refactor and presets 2026-03-26 19:57:28 +01:00
.pre-commit-config.yaml fix(platform): proxy log retention, service UX improvements, vulnerability scanner filtering, and resource monitoring (#14) 2026-02-26 07:36:27 +01:00
_typos.toml chore: add new configuration for flate2 crate and update .gitignore 2026-02-28 07:59:23 +01:00
Cargo.lock fix(deps): resolve all 18 dependabot vulnerabilities (#60) 2026-04-05 11:23:37 +02:00
Cargo.toml fix(deps): resolve all 18 dependabot vulnerabilities (#60) 2026-04-05 11:23:37 +02:00
CHANGELOG.md fix(cli): fix project resolution in env vars subcommands and services env response (#59) 2026-04-05 11:24:10 +02:00
CLAUDE.md feat: enhance Docker deployment process with .temps.yaml support 2026-03-02 15:53:40 +01:00
cliff.toml feat(dependencies): update package versions and clean up Cargo.lock 2026-02-16 08:25:46 +01:00
CONTRIBUTING.md fix(docs): use correct TimescaleDB-HA volume path for data persistence 2026-03-25 11:38:05 +01:00
docker-compose.yml chore: simplify Docker Compose configuration for PostgreSQL service 2026-02-24 15:12:37 +01:00
Dockerfile feat(import): Implement Docker container import functionality 2025-11-13 11:27:54 +01:00
Dockerfile.release feat(docker): Add Dockerfile for release and enhance CI/CD workflow 2025-11-15 14:23:09 +01:00
LICENSE Update dependencies, add license files, and improve error handling in the web application. Refactor project structure for better clarity and maintainability. 2025-10-21 22:57:54 +02:00
LICENSE-MIT feat(dependencies): update package versions and clean up Cargo.lock 2026-02-16 08:25:46 +01:00
NOTICE Update dependencies, add license files, and improve error handling in the web application. Refactor project structure for better clarity and maintainability. 2025-10-21 22:57:54 +02:00
README.md feat(domains): enhance domain management with wildcard support and pagination 2026-02-28 11:20:05 +01:00
RELEASE_CHECKLIST_v0.0.7.md docs: update release checklist with verified items 2026-03-25 13:19:44 +01:00
SECURITY.md feat(dependencies): update package versions and clean up Cargo.lock 2026-02-16 08:25:46 +01:00
temps-demo-slow.gif feat(analytics): improve dashboard with drag-to-zoom, referrer tracking, and UX fixes 2026-02-17 15:16:17 +01:00
temps-demo.gif feat(analytics): improve dashboard with drag-to-zoom, referrer tracking, and UX fixes 2026-02-17 15:16:17 +01:00

Temps

The open-source, self-hosted deployment platform.

Deploy, observe, and scale -- from a single binary.

License GitHub Release Rust GitHub Stars

Website | Documentation | Quick Start | GitHub


Temps — from bare server to deployed in under 3 minutes
From bare server to fully deployed — in under 3 minutes (166s).

curl -fsSL https://temps.sh/deploy.sh | bash

Temps Dashboard

Stop paying for 6 different SaaS tools. Temps replaces your deployment platform, analytics, error tracking, session replay, uptime monitoring, and transactional email -- all self-hosted, all in one binary.


Features

Git Push to Deploy Push to Git, Temps builds and deploys. Auto-detects frameworks, creates preview URLs, and handles zero-downtime rollouts.

Deployments

Built-in Analytics & Session Replay Web analytics with funnels, visitor tracking, and session replay (rrweb). Sentry-compatible error tracking. No external services.

Analytics

Pingora-Powered Proxy Runs on Cloudflare's Pingora engine. Auto TLS via Let's Encrypt (HTTP-01 & DNS-01), custom domains, and full request logging.

Domains

Managed Services Provision Postgres, Redis, S3 (MinIO), and MongoDB alongside your apps. Temps handles creation, backups, and teardown.

Monitoring

Request Logs & Proxy Visibility Every HTTP request logged with method, path, status, response time, and routing metadata. Filter and search without extra tooling.

Proxy Logs

Monitoring & Alerts Monitors for deploy failures, runtime crashes, certificate expiry, and backup health. Get notified before problems reach users.

Project Overview

Transactional Email Add sender domains with DKIM records through the UI. Send transactional emails via @temps-sdk/node-sdk. No external email service needed.

AI-Ready (MCP Server) Ship with a Model Context Protocol server (@temps-sdk/mcp) so AI agents can deploy, monitor, and manage your infrastructure through natural language.

Works with your stack

Next.js Vite Go Python Rust Java .NET NestJS Docker

Any language, any framework. Auto-detected or bring your own Dockerfile.


Quick Start

curl -fsSL https://temps.sh/deploy.sh | bash

Tested on: Ubuntu 24.04 / 22.04  |  Also works on macOS


What Temps replaces

What you get Instead of paying for
Git deployments + preview URLs Vercel / Netlify / Railway ($20+/mo)
Web analytics + funnels PostHog / Plausible ($0-450/mo)
Session replay PostHog / FullStory ($0-2000/mo)
Error tracking Sentry ($26+/mo)
Uptime monitoring Better Uptime / Pingdom ($20+/mo)
Managed Postgres/Redis/S3 AWS RDS / ElastiCache ($50+/mo)
Transactional email + DKIM Resend / SendGrid ($20-100/mo)
Request logs + proxy Cloudflare ($0-200/mo)
Total with Temps $0 (self-hosted)

Temps vs. Alternatives

Feature Temps Coolify Dokploy CapRover Dokku Railway Vercel
Self-hosted Yes Yes Yes Yes Yes No No
Single binary install Yes No No No No -- --
Git push deploy Yes Yes Yes Yes Yes Yes Yes
Multi-node / clustering No Yes Yes Yes No Yes Yes
Web analytics Yes No No No No Yes Yes
Session replay Yes No No No No No No
Error tracking (Sentry-compatible) Yes No No No No No No
Uptime monitoring Yes No No No No No No
Transactional email + DKIM Yes No No No No No No
Managed Postgres/Redis/S3 Yes Yes Yes Partial Plugin Yes Add-on
Pingora proxy (Cloudflare-grade) Yes No No No No No No
Auto TLS (HTTP-01 + DNS-01) Yes Yes Yes Yes Plugin Yes Yes
Request-level logging Yes No No No No Partial Partial
Preview deployments Yes Yes Yes No No Yes Yes
Built with Rust Yes No No No No No No
Free & open source Yes Yes Yes Yes Yes No No

Tech Stack

  • Backend: Rust, Axum, Sea-ORM, Pingora (Cloudflare's proxy engine), Bollard (Docker API)
  • Frontend: React 19, TypeScript, Tailwind CSS, shadcn/ui
  • Database: PostgreSQL + TimescaleDB
  • Architecture: 30+ workspace crates, three-layer service architecture

SDKs

Package Description
@temps-sdk/node-sdk Platform API client + Sentry-compatible error tracking
@temps-sdk/react-analytics React analytics, session replay, Web Vitals, engagement tracking
@temps-sdk/kv Serverless key-value store
@temps-sdk/blob File storage (S3-compatible)
@temps-sdk/cli Command-line interface
@temps-sdk/mcp Model Context Protocol server for AI agents
Quick examples

Analytics -- wrap your React app, everything else is automatic:

import { TempsAnalyticsProvider } from '@temps-sdk/react-analytics';

export default function App({ children }) {
  return <TempsAnalyticsProvider>{children}</TempsAnalyticsProvider>;
}

Error tracking -- Sentry-compatible, drop-in replacement:

import { ErrorTracking } from '@temps-sdk/node-sdk';

ErrorTracking.init({ dsn: 'https://key@your-instance.temps.dev/1' });

try {
  riskyOperation();
} catch (error) {
  ErrorTracking.captureException(error);
}

KV store -- Redis-like API, zero config:

import { kv } from '@temps-sdk/kv';

await kv.set('user:123', { name: 'Alice', plan: 'pro' }, { ex: 3600 });
const user = await kv.get('user:123');

Blob storage -- upload and serve files:

import { blob } from '@temps-sdk/blob';

const { url } = await blob.put('avatars/user-123.png', fileBuffer);
const files = await blob.list({ prefix: 'avatars/' });

Contributing

We welcome contributions. See CONTRIBUTING.md for guidelines.

git clone https://github.com/gotempsh/temps.git
cd temps
cargo build --release

License

Dual-licensed under MIT or Apache 2.0.