# Documentation - [Introduction](https://docs.servers.dev/index.md): Deploy Kotlin Multiplatform and Ktor projects to every target from one Gradle build. - [Getting started](https://docs.servers.dev/getting-started.md): Go from nothing to a live Ktor server in about five minutes. - [Project structure](https://docs.servers.dev/project-structure.md): The platform deploys a Gradle build. It looks at every module in the build and decides what each one is. You do not write a config file for this. - [The primary module](https://docs.servers.dev/primary-module.md): A project can have several Ktor servers. Each one gets its own host, and one of them also serves the project's bare host, `my-app.atoll.app`. That one is the primary module. - [Changelog](https://docs.servers.dev/changelog.md): What changed in each release. The CLI, server and panel share one version number. - [Web apps](https://docs.servers.dev/targets/web.md): The platform builds the browser target of a Kotlin Multiplatform module and serves the result as a static site on its own host. - [Ktor servers](https://docs.servers.dev/targets/server.md): The platform builds every Ktor server in your project and runs it on its own host. When the load goes up, it adds replicas. - [Android apps](https://docs.servers.dev/targets/android.md): The platform builds your Android app with the rest of your project, signs it with your keystore and attaches the APK and App Bundle to the deployment. It can also upload the App Bundle to Google Play's internal track. - [Desktop apps](https://docs.servers.dev/targets/desktop.md): The platform packages your Compose Desktop app on every deploy and attaches the result to the deployment. - [iOS apps](https://docs.servers.dev/targets/ios.md): Build an unsigned iOS simulator app on a macOS build runner. - [Deploying with the CLI](https://docs.servers.dev/deploy/cli.md): `atoll deploy` uploads your project and deploys every target in it. It is the same command on your laptop and in CI. - [Deployments and statuses](https://docs.servers.dev/deploy/deployments.md): A deployment is one run of the platform over one version of your source: build every target, then put each one live. Every `atoll deploy`, git push, pull request update and promote creates a new deployment. - [Previews](https://docs.servers.dev/deploy/previews.md): A preview is a deployment of a pull request. It runs next to production, on its own hosts, so you can try a change before you merge it. - [Promote and rollback](https://docs.servers.dev/deploy/promote-and-rollback.md): Promoting puts the outputs of a finished deployment live again, without building it again. Rolling back is a promote of an older production deployment. - [Deploy from GitHub](https://docs.servers.dev/deploy/git.md): Connect GitHub so pushes deploy to production and pull requests get previews. - [Continuous integration](https://docs.servers.dev/deploy/ci.md): Run your Gradle checks on every push and pull request, and see the result on the commit. - [App distribution](https://docs.servers.dev/deploy/distribution.md): Share a deployment's Android, desktop and iOS builds with testers or customers through a link. People open it in a browser, without an account, and get the right file for their device. - [Environment variables](https://docs.servers.dev/configure/environment-variables.md): Env vars configure your project without changing its code: database URLs, API keys, feature flags. The platform passes them to your Gradle build, to your running Ktor servers, or both. - [Custom domains](https://docs.servers.dev/configure/custom-domains.md): Serve a Ktor server or a web app on your own domain. The platform checks your DNS records and issues the TLS certificate. - [Firewall](https://docs.servers.dev/configure/firewall.md): Block IPs, write custom rules, turn on managed rulesets and attack mode, and watch the traffic they stop. - [Scaling](https://docs.servers.dev/run/scaling.md): Set the size, the number of replicas and scale to zero for each Ktor server in production. - [Regions](https://docs.servers.dev/run/regions.md): Pick where a project's Ktor servers run, and move a project to another region. - [Build runners](https://docs.servers.dev/run/runners.md): Build Windows installers, macOS installers and iOS apps on Macs and Windows machines: your own, or the platform's. - [Storage](https://docs.servers.dev/storage/overview.md): Create managed Postgres databases, Redis caches and Files buckets, and connect them to your projects. - [Postgres](https://docs.servers.dev/storage/postgres.md): A managed Postgres database for your Ktor servers, with daily backups and restore to any moment of the last 7 days. - [Redis](https://docs.servers.dev/storage/redis.md): A managed Redis-compatible store (Valkey) for caches, sessions and queues, kept on disk. - [Files](https://docs.servers.dev/storage/files.md): An S3-compatible bucket for uploads and assets, reached with any S3 client and billed by what it holds. - [Runtime logs](https://docs.servers.dev/observe/logs.md): Read what your Ktor servers print while they run, in the panel's Logs tab or with `atoll logs`. - [Metrics](https://docs.servers.dev/observe/metrics.md): Requests, latency, error rate, replicas, CPU and memory of each Ktor server, from the last hour up to the last 30 days. - [Overview dashboards](https://docs.servers.dev/observe/overview.md): The org overview shows deployments, traffic and errors across your projects; a project's Overview tab shows what is live and what to do next. - [Teams and roles](https://docs.servers.dev/teams/teams.md): Projects belong to orgs. You invite people to an org and give each one a role. Seats are free. - [Email notifications](https://docs.servers.dev/teams/notifications.md): The platform emails you when something you care about happens: a deploy failed, came back, or went live, an org is close to its spend limit, or one of its build runners went offline. - [Billing and spend limits](https://docs.servers.dev/teams/billing.md): The platform bills each org for what it uses. Every calendar month (UTC) starts with a free amount of each resource. There are no seat fees. - [Your account](https://docs.servers.dev/account/account.md): Sign up, verify your email, choose how you sign in, and set your name and the panel's theme. - [Access tokens and CLI sign-in](https://docs.servers.dev/account/tokens.md): Create personal access tokens for CI and scripts, and approve `atoll login` in the browser. - [Organizations](https://docs.servers.dev/account/organizations.md): Create organizations for your teams, switch between them, rename, leave and delete them. - [Finding your way around the panel](https://docs.servers.dev/account/panel.md): The sidebar, quick search and keyboard shortcuts of the web panel. - [Deploy a Ktor server](https://docs.servers.dev/guides/deploy-a-ktor-server.md): This guide builds the smallest Ktor server the platform can deploy, puts it live, and gives it a database URL. It takes about ten minutes. - [Full-stack Kotlin in one deploy](https://docs.servers.dev/guides/full-stack-kotlin.md): This guide deploys a project with two Ktor servers, a Compose web app and an Android app, all from one Gradle build and one command. - [Deploy from GitHub Actions](https://docs.servers.dev/guides/deploy-from-github-actions.md): Deploy from a GitHub Actions workflow with a personal access token and the atoll CLI. - [CLI reference](https://docs.servers.dev/reference/cli.md): `atoll` is a single native binary for Linux, macOS and Windows. Run `atoll --help` or `atoll --help` for the same information in your terminal. - [Environment variables and secrets](https://docs.servers.dev/reference/env.md): Every detail of project env vars: scopes, secrets, shared env vars, CI vars and the CLI commands. - [Custom domains](https://docs.servers.dev/reference/domains.md): Serve a project on your own domain, e.g. `www.example.com`, with an automatic HTTPS certificate. Custom domains always serve production; previews keep their hosts. - [FAQ](https://docs.servers.dev/faq.md) - [Self-hosting the platform](https://docs.servers.dev/self-hosting/overview.md): This guide installs the platform on your own servers (bare metal or VMs) with k3s, one Helm chart for the platform and a helmfile for everything it depends on. - [Requirements](https://docs.servers.dev/self-hosting/requirements.md) - [Install](https://docs.servers.dev/self-hosting/install.md): Install the platform step by step, from bare nodes to a working API. - [Configuration](https://docs.servers.dev/self-hosting/configuration.md): Two layers: - [Settings reference](https://docs.servers.dev/self-hosting/settings.md): Every environment variable the server reads, with its default. - [Billing settings](https://docs.servers.dev/self-hosting/billing-settings.md): The platform always meters usage. Billing (plans, limits, Stripe) is on only when a Stripe secret key is set; without it every deployment is admitted, apps are never stopped, and the billing API answers 404. - [Build runners](https://docs.servers.dev/self-hosting/runners.md): The platform builds on Linux. Some files can only be built on another OS: Windows installers (`.msi`, `.exe`) need Windows, macOS installers need macOS. A build runner is a Windows or macOS host that builds them for the server. - [Image registry](https://docs.servers.dev/self-hosting/registry.md): How build images are stored and pulled, and how the registry authenticates. - [Storage](https://docs.servers.dev/self-hosting/storage.md): What backs users’ Postgres, Redis and Files stores, and how to configure them or turn them off. - [Firewall](https://docs.servers.dev/self-hosting/firewall.md): What the project Firewall installs on your cluster, its settings, region clusters, geolocation and troubleshooting. - [Backups and restore](https://docs.servers.dev/self-hosting/backups.md) - [Upgrades](https://docs.servers.dev/self-hosting/upgrades.md): Upgrade the platform, its dependencies and k3s safely. - [Monitoring](https://docs.servers.dev/self-hosting/monitoring.md): Metrics, logs, dashboards and alerts for your install. - [Troubleshooting](https://docs.servers.dev/self-hosting/troubleshooting.md): Start with the overview: - [Running the platform on Kubernetes](https://docs.servers.dev/self-hosting/kubernetes.md): With `ATOLL_RUNTIME=kubernetes` the server builds and runs projects on a cluster instead of its own host: This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.