Skip to main content

Nerdit

A self-hosted PaaS for your own machine, built so an AI agent can run it.

Point Nerdit at a folder or a Git repository: it builds the app, runs it as a supervised service, gives it a URL, and wires it to a database or a local model when it needs one. You drive it from the nerdit CLI, the local dashboard, or an AI agent through its MCP server. The agent gets the same operations as the CLI, behind scoped tokens and an audit log.

nerdit deploy ./my-app --wait       # build, run, wait until healthy
nerdit serve llama3.1:8b --gpus 1   # local model behind an OpenAI-compatible API

Your apps, data and models stay on your hardware. The optional Nerdit Cloud account adds remote access and hosted URLs, but it doesn't run your apps. An unlinked machine keeps working on its own.

Free during the public beta, with up to five linked machines per account.

How it works

One daemon, nerditd, runs on your machine next to Docker:

  nerdit CLI ───┐                 ┌─ apps (Docker, health-checked, restarted)
  dashboard ────┼─ REST ► nerditd ┼─ models (Ollama / vLLM, or an external API)
  AI agent (MCP)┘                 ├─ databases (Postgres, Redis)
                                  └─ Caddy: URLs + TLS

An app says what it needs in a nerdit.toml next to its code:

[deploy]
name = "my-app"
port = 8000

[ai.default]
provider = "ollama"      # or "api" for an external endpoint
model = "llama3.1:8b"

The app starts with OPENAI_BASE_URL and OPENAI_API_KEY set. To move from a local model to a hosted API, you change the config. The app code stays the same.

Install

curl -fsSL https://get.nerdit.ai | sh
nerdit doctor

This installs one signed archive: the CLI, the daemon and a pinned Caddy. You don't need Python. It also registers a service and starts the daemon. You need Docker installed and running. The dashboard is at http://127.0.0.1:9321/.

For your first deployment, see the quickstart. Other install methods are listed below.

Use it with an AI agent

Nerdit ships an MCP server with 59 tools. Your agent can deploy, wire and diagnose apps without a shell.

Claude Code, Cursor and other local clients (stdio)

On the machine where nerdit is installed:

claude mcp add nerdit -- nerdit mcp

Other clients take the equivalent entry:

{
  "mcpServers": {
    "nerdit": { "command": "nerdit", "args": ["mcp"] }
  }
}

If your client doesn't inherit your shell's PATH, use an absolute path to nerdit.

The server acts with the credentials of your nerdit CLI. Give an agent a narrow token rather than your admin one:

nerdit token create --role submitter --scope my-app --expires-in 24h

The readonly role can list and read but not write. A token scoped to a service can only change that service. See Security for how the CLI selects a token.

Claude on the web or desktop (remote, through Nerdit Cloud)

Link the machine with nerdit link. Then open Connect in app.nerdit.ai and add the connection URL it shows as a custom connector in Claude. You approve which machines or projects the assistant can reach. No token leaves your machine. See the guide.

Over HTTP

Set [mcp].http_enabled = true to serve the same tools at http://127.0.0.1:9321/api/mcp, behind a bearer token. See MCP setup.

What to ask

Deploy the app in ./todo-api, give it a Postgres database, and tell me the URL once it's healthy.

blog is crash-looping. Find out why and fix it.

Serve qwen2.5:7b and point my-chatbot at it instead of the OpenAI API.

A typical run: capabilities → deploy (with dry_run first) → wait_for_service → diagnose_service and service_logs if something fails. An agent that has no files on the machine can use write_app_files, then deploy_app. It can also use deploy_git.

The API is built for agents to retry safely:

  • Every write is idempotent, so a retry never runs an action twice.
  • Every write is audited.
  • Errors carry a stable code and a recovery hint.
  • Reads are bounded, so no single call floods the context window.
  • Secrets are write-only: an agent can set them but never read them back.

What you get

  • Deploy from a folder, a Git URL or a template, using a Dockerfile or the Python or Node buildpacks. Images are versioned, and deploys support --dry-run, --wait and --rollback.
  • Services restart with backoff and have HTTP and TCP health checks and stable ports. A redeploy cuts over with no downtime.
  • URLs and TLS come from an embedded Caddy. It routes by path or subdomain, serves your own domains, advertises over mDNS on the LAN, and uses an internal CA that you can pin.
  • Models run through Ollama or vLLM on your GPU, or through an external API. Apps get the same environment variables either way.
  • Databases: managed Postgres and Redis. Nerdit creates the credentials and binds them into apps through [db.*].
  • Projects group several services in one nerdit.toml (nerdit apply). Variables are plain or secret. Secrets are encrypted at rest and can be rotated.
  • Backups cover the control plane, with an offline restore. A managed database also gets a logical dump (nerdit db dump) that you can restore while it runs.

Other install methods

pip. Needs Python 3.11+ and Docker, on Linux, macOS, or Windows through WSL2:

python3 -m venv ~/.venvs/nerdit && source ~/.venvs/nerdit/bin/activate
python -m pip install nerdit
nerdit init && nerdit doctor

The CLI, the daemon, the dashboard, MCP and mDNS are all included. The pip package doesn't bundle Caddy or register a startup service. Install Caddy yourself if you want HTTPS, and run nerdit init again after a reboot. See installation.

From source.

git clone https://github.com/nerdit-ai/nerdit && cd nerdit
python -m venv venv && venv/bin/pip install -e ".[dev,mcp]"
(cd src/nerdit/daemon/web && npm ci && npm run build)   # dashboard, required
venv/bin/nerdit init

Platforms

  • Linux: Ubuntu 22.04 or 24.04, with systemd.
  • macOS: Apple Silicon. Models run on the CPU.
  • Windows: through WSL2 only.
  • GPUs: NVIDIA needs Linux or WSL2. AMD support is experimental and behind a flag.

No telemetry

The daemon collects no product telemetry. Linking to Nerdit Cloud, public relay traffic and external AI APIs send only the data their feature needs. The optional [posthog] dashboard analytics hook is off by default and reports to your own PostHog project.

Nerdit Cloud

app.nerdit.ai adds:

  • remote access and assistant connections
  • deploys from GitHub
  • hosted URLs

Your machine connects out to the cloud, so you open no inbound port. Hosted shares are private to you by default. Public access needs an explicit publication and follows the Terms.

Questions or feedback: feedback@nerdit.ai.

License

Apache-2.0, see LICENSE. "Nerdit" and the logo are trademarks and are not covered by the code license, see NOTICE.

Contributing

Issues and pull requests are welcome. CONTRIBUTING.md explains how contributions land in releases.

Release files for nerdit 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nerdit 0.7.0
File Size Uploaded
nerdit-0.7.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nerdit 0.7.0
File Interpreter ABI Platform
nerdit-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.3 MB

Release files / nerdit-0.7.0.tar.gz

Download URL nerdit-0.7.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
2aea62482b1cbd5ca2bb3efd6e2be205a1b9a8e0a6b355b0a0c1b2633e50b99c
BLAKE2b-256 checksum
How to use checksums
ecbffe3686425807af70b6086eb7e0d2fc571b24a9eb69eb27100877ce6ec20b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / nerdit-0.7.0-py3-none-any.whl

Download URL nerdit-0.7.0-py3-none-any.whl
Size 1.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b3edf5421ef47755cce203ff795bf4ac8d77c9c5391e6f3f25d9da0d8e2c8b8b
BLAKE2b-256 checksum
How to use checksums
0a87e7b1bc73cbd581d8f7e4e4202d7b8d5f6efce4f1ef35e210d007d5d6537c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page