Oct 242026v0.9.4featurefixsecuritybreaking80 updatesCopy link
Projects, repositories and environment
Choose which monorepo apps to deploy
New imports ask for an explicit app selection instead of enabling every detected package or port. Add more apps, browse or enter repository folders, and retain saved selections, manually added roots, custom commands and private access when rescanning or reopening a project.
Keep large domain lists manageable
The wizard groups routes by their owning app, shows a total and the first three rows, and offers View all. Apps using the same port keep separate domain ownership; changing deployment mode preserves the selected app's routes and privacy settings.
Build additional services from the repository
Services and Topology share a From repository form with folder, build-context and Dockerfile selection. Save the service, then deploy it through the normal pipeline. Manual paths and retry remain available when browsing fails. Catalog selection gains compact source tabs, search and category filtering while retaining generated credentials.
Preserve Compose topology during detection
A root Dockerfile alongside a Compose file retains the declared services and volumes even when framework detection also matches. Development-only Compose files beside ordinary framework projects remain opt-in; explicitly selected configuration retains precedence.
Skip unrelated workspace pushes
Single-app subfolder projects consider transitive workspace dependencies, shared build inputs and lockfiles before automatic deployment. The update banner uses the same decision. Configure
autoDeployPaths.includeandexcludefor explicit rules; uncertain analysis keeps the deployment instead of silently skipping changes.Read the requested source revision consistently
Retries and explicit-commit deployments read Compose files and
openship.jsondefaults from that commit, instead of mixing an older checkout with the branch's latest configuration.Use one effective environment view
The Compose wizard and service editor resolve defaults and interpolation consistently while preserving the original templates and masked secrets. Save persists intentional service edits; existing projects also offer Cancel without writing changes. Revealed values and late lookup responses no longer restore an old value after saving.
Clarify saving and applying environment changes
Save and Apply & restart describe their separate effects. Runtime-only values appear in a compact disclosure, unchanged image defaults no longer produce recovery warnings, and Apply can resolve an owned live legacy service without a populated per-service deployment record. Missing containers lead to the existing deployment action.
Complete GitHub connections and private clones
Hosted App setup, installation selection and attempt polling use the owning Cloud connection consistently. Self-hosted App creation sends a valid manifest redirect URL. Authorized same-owner private submodules receive scoped, short-lived credentials without persisting tokens in clone URLs or Git configuration.
Show where builds actually run
Remote Docker deployments no longer offer an unsupported local-image build or label a remote build as local. Genuine local bare builds and independent clone-location choices remain available.
Deployments, storage and recovery
Pull managed worker images from packaged installations
Bundled workspace files no longer make a release installation look like a development checkout. Automatic source builds require Git checkout metadata; explicit administrator build contexts still work for source archives. Remote builds use the published protected worker matching the release.
Back up standalone app storage
Project backup policies now capture a single app's persistent volumes even when it has no service rows. Manual, scheduled and pre-deploy runs share the existing backup and restore flow, including integrity verification, confirmation and retention. App restore points remain distinct from deleted-service history (#1444).
Use release commands and roles with attached infrastructure
Supported self-hosted/Desktop Docker projects can keep one primary source app on the normal release-command, worker and scheduler pipeline while preparing attached private image services first. Infrastructure health gates app activation; retries, cancellation and rollback preserve confirmed databases and volumes. General Compose, multiple source apps, Cloud and cluster targets retain their existing role/release-command restrictions.
Explain unsupported role configurations
Refusals describe which saved release command or role must change instead of recommending the Docker runtime already in use. Eligible older projects without a persisted runtime mode can configure roles through the same runtime resolver as deployment.
Check required Compose variables before building
Validate the effective enabled service cohort before image builds, registry pulls or cutover. Errors list missing keys by service without exposing values; frozen rollback settings and explicit service scopes retain their existing precedence.
Retry a completed Docker build
Retry deployment can reuse a retained, ownership-verified image after activation fails. It preserves the source revision and destination, with no rebuild or replacement pull. Missing artifacts fail clearly; unsupported bare/static and source-bind attempts do not offer an image-only retry.
Refresh runtime images deliberately
The wizard exposes runtime versions, build images and production images. On-demand checks compare available image digests, and Refresh images & redeploy uses the normal readiness and rollback pipeline. Configured version tags, digest pins and deployment scope stay intact; unavailable comparisons remain unknown and pins never advance automatically.
Preserve the incumbent through eligible Compose replacements
Supported self-hosted Docker deployments can prepare an overlapping candidate when saved limits, measured headroom, port provenance and storage compatibility permit it. The old service remains until routing and the successful release are committed. Other targets keep normal replacement order; concurrent writable storage needs an explicit opt-in for the exact mount.
Settle interrupted routing recovery before admitting a retry
A timed-out Compose recovery requests cancellation and waits for its in-flight route pass to finish before releasing deployment ownership. Uncertain recovery retains the containers needed for recovery instead of allowing a late route write to overwrite a newer deployment.
Keep image-declared data across redeploys
Self-hosted and Desktop-managed Docker replacements reuse stable project-owned volumes for image
VOLUMEdeclarations. Legacy storage is recovered from the exact verified outgoing container; missing or conflicting ownership stops deployment instead of attaching an unrelated orphan or starting with empty data. Explicit mounts take precedence, and retained owned volumes appear in deletion previews.Require working persistence for bare deployments
Provision writable build, shared-data, process metadata and log directories through the deployment login. Persistence failures stop activation instead of silently leaving data inside a replaceable release directory. Hosts needing one-time permission setup receive actionable guidance.
Start a service with empty storage without erasing its old data
Writable named volumes offer Start with empty storage, with service-name confirmation and a preview of the new and retained volume names. The existing service deployment applies the change; failed admission can retry the same saved volume selection. Other mounts, backups and the previous volume remain available for recovery.
Adapt artifact retention to disk capacity
Automatic retention can reclaim eligible older Docker release artifacts under measured storage pressure while protecting active releases, pins, shared references and ongoing work. Reclamation requires a verified rebuild or immutable-image recovery path. Managed idle-cache budgets scale with filesystem size; application containers and volumes are excluded from pressure cleanup.
Report useful restore failures
When a Docker restore helper exits without delivering its diagnostic output, collect a bounded tail of its logs. Stalled or unavailable log reads cannot hide the original failure or indefinitely delay cancellation and helper cleanup. Restore ordering and the separate attach-input issue are unchanged.
Apply Compose control-plane updates reliably
Explicit updates recreate API, dashboard and edge services even when an earlier image prefetch already changed the environment. Updates wait for application readiness and report failures; PostgreSQL and Redis are not targets of forced recreation.
Expose per-service swap control
Opt into
resources.swapDisabledfor supported Docker services with a positive memory limit and verified swap accounting. Shared validation preserves the required cap across configuration edits. This changes the selected service, without changing host-wide swap or imposing new build limits.Keep deployment timings accurate
Build measurements survive terminal outcome writes, service timings include image preparation, and measurements freeze before cleanup. Unknown durations remain unknown, skipped builds display
0s, and untouched services do not acquire invented measurements.
Clusters, scaling and topology
Deploy to an existing Docker Swarm
Desktop and self-hosted controllers can inspect an existing Linux manager, connect its cluster, and deploy new application or Compose workloads through the shared deployment, routing, scaling and rollback flow. Nodes pull immutable image digests and use release-scoped secrets. Existing Swarm tasks and routing-mesh ports stay protected from standalone adoption and edge takeover. Moving a previously deployed project requires an explicit migration.
Review scaling and database replication
Topology Scale reviews application changes before applying them. Self-hosted Kubernetes can manage PostgreSQL readers and authenticated Redis/Sentinel replication through the existing operators, with verified backups and explicit writer/reader connection changes. Reader removal checks dependent consumers; unsafe Redis reductions use a verified smaller copy that preserves the original until the connection switch is approved. Swarm application scaling remains supported; synchronized database replication requires Kubernetes and is separate from copying a database.
See database members in the overview
Primary and replica cards show their observed roles, health, servers and replication links. Larger graphs can switch to a compact view; Redis Sentinel voters remain distinct from data replicas. Missing observations do not invent a primary or a running member.
Make K3s setup and recovery clearer
Require cgroup v2 before installation, prefer This Server for the initial gateway/control roles, and correct private kubelet connectivity. Retries can migrate an unchanged Openship-owned legacy configuration and finish its required restart; edited or unverified configurations stop with bounded, credential-redacted diagnostics.
Domains, ingress and certificates
Password-protect self-hosted routes and native previews
Configure a shared password at the OpenResty edge. Authenticated requests verify a signed browser cookie locally, without an API, database or Redis lookup per request. Public routes keep their existing path. Password changes and revocation invalidate sessions; protected responses disable caching.
Finish service routing and HTTPS together
Project and service domain saves share the existing routing preparation and certificate checks. First-route setup uses an inline progress viewer, retains explicit edge/DNS-01 consent, and refreshes canonical status after success or partial failure. A ready proxy no longer masks a failed or disconnected HTTPS check.
Publish redirect-only domains without a target port
Compose
www/apex redirects can reach the edge even when the domain has no upstream service port.Leave route-free workloads independent of the edge
Private deployments without hostname routes skip unnecessary edge takeover, challenge and vhost preparation. Fixed-port services retain their explicit bindings; automatic allocations still require verified inventory and durable port claims.
Open pgAdmin without a custom domain
PostgreSQL + pgAdmin supports an explicit Port only option while PostgreSQL stays internal. New catalog services also generate required PostgreSQL, MySQL, MariaDB, MongoDB and Typesense credentials instead of leaving their bootstrap secrets empty.
Keep catalog images available
Convex uses its new official registry namespace with the existing version pin. The retired Mindwire Console/runtime template is hidden and disabled for new installs; existing project data stays unchanged.
Reuse valid parent wildcard certificates
Immediate subdomains can inherit a validated parent wildcard certificate when an exact certificate is absent. Exact certificates retain precedence; read failures preserve the working route rather than initiating replacement issuance or copying private keys.
Replace manual certificates without breaking renewal state
Remove only the selected hostname's obsolete Certbot renewal record after validation. Failed installation restores the prior certificate, key or archive links and renewal configuration before any reload; unrelated lineages remain intact.
Improve routing recovery and diagnostics
Control-plane setup can reclaim its own quarantined dashboard port without taking another workload's claim. ACME 502/504 errors describe challenge forwarding and the temporary listener; safe Cloud routing errors retain their actionable cause instead of blaming a healthy server connection.
Keep tunnel management in the route menu
Cloudflare Tunnel settings move into the existing context menu, retaining per-domain Access settings, retry and readiness behavior without a persistent management row on every card.
Cloud, billing, monitoring and Actions
Manage customer-owned infrastructure from Cloud
Openship Manage Basic costs $5/month per organization with email support; Priority costs $20/month with priority support. Both include two connected servers, plus $3/month per extra server. Paid Cloud includes the Basic allowance once per organization; Priority retains its support fee. Expiration ends management access after the paid period while applications and data remain on the customer's hosts. Self-hosted control planes remain free.
Choose monthly or annual Cloud billing
Hobby, Starter, Pro and Scale cost $12, $24, $47 and $119 per month, or $120, $240, $468 and $1,188 billed annually. The purchase view defaults to Yearly when supported by the provider, shows the monthly equivalent and full annual charge, and retains an explicit Monthly switch. Custom resources use the selected interval through quote, checkout and plan changes. Existing subscriptions retain their saved prices and allowances.
Update entry-level Cloud capacity
New Hobby purchases include 1 vCPU, 4 GB RAM, 50 GB storage and email support. New Scale offers allow 50 projects. These catalog changes do not rewrite existing paid contracts.
Simplify plan selection and payment recovery
Cloud plans, Prepaid PAYG and Manage your server share the purchase view. Manage plans are also available directly when connecting a server. Pending purchases appear under Payments & invoices with a count, and Manage checkout keeps the server allowance and total beside the selected support plan.
Keep management billing and access coordinated
Durable checkout intent and receipt validation protect purchase retries. Paid Cloud organizations receive their included management allowance once, and allowance changes coordinate with server connections. Increasing recurring charges after Cloud coverage ends requires explicit consent.
Recover pending checkout conflicts
Explain when a purchase must be completed or cancelled, and open the existing payment recovery dialog. Checkout limits, pending resource changes, verification failures and cancellation in progress receive specific guidance instead of a generic retry message.
Reconnect Cloud usage streams
Interrupted read-only subscriptions recover from retryable disconnects with bounded backoff. Authentication failures, malformed data and stalled subscriptions still fail clearly; cancellation releases readers, requests and timers.
Recover orphaned Cloud terminals precisely
Refresh expiring namespace credentials for dispatch and teardown, then recover only the marked commands belonging to the interrupted operation. Ownership is cleared only after confirmed process exit; live controllers and another installation's claims remain protected.
Reuse scoped provider credentials and retain throttling guidance
Concurrent Cloud lookups share short-lived namespace tokens after ownership checks. Rejected token generations are invalidated without evicting newer credentials or replaying mutations. HTTP 429/503 and bounded Retry-After guidance survive the transport.
Explain resource-related deployment failures
Supported OOM, heap-limit and storage evidence produces a saved diagnosis and Review capacity action for the affected Cloud space. The explanation survives reloads and compacted logs. Long builds receive optional advice rather than an invented capacity failure; upgrades and retries remain explicit.
Reflect runtime incidents in project status
Known incidents on the active self-hosted workload show Action Required and link to Monitoring & Logs. Status clears after observed recovery; intentional stops, retired workloads and monitoring opt-outs do not create stale attention.
Calculate response averages from requests
Overview and CLI traffic metrics divide total request duration by total request count, with consistent millisecond conversion for Cloud and self-hosted data. Uneven traffic and live/archive refreshes no longer inflate the reported average. Edge collection is unchanged.
Preserve active Actions runners through temporary API failures
Retry transient provider, GitHub and App-token renewal failures without cancelling the worker, releasing its capacity or silently falling back to broader user credentials. Persist supervisor completion before external cleanup and retain verified infrastructure errors when GitHub synchronization finishes.
Merge Actions history reliably
Local timestamps and Cloud date strings sort together without crashing the Actions page. Failed Cloud augmentation preserves the local run list. Service connection/unlink messages also reflect the existing automatic deployment attempt instead of asking users to trigger it twice.
Keep an active personal workspace during account changes
Deleting or leaving the selected team workspace restores the stored session owner's personal workspace instead of failing while clearing the active organization.
Security and credentials
Patch the DOM test environment
Dashboard and webmail tests use Happy DOM 21.0.4, which fixes the module import alias code-execution vulnerability (GHSA-834v-8h66-3h79).
Match runtime security advisories to deployed workloads
Verify a public, signed advisory feed and match affected image digests or observed runtime versions. New runtime rules, deployment changes and Check again refresh bounded container observations; ordinary polling reuses one current observation per project. Findings appear in the existing global critical/update banner with a shared affected-app review; no project visit is needed. The banner reads cached, workspace-authorized evidence without probing containers. Missing evidence stays unknown. Initial notices cover Node.js/Bun Brotli fixes and PHP's October security guidance, including a separate manual configuration warning that an image update alone cannot clear.
Apply reviewed patches through the deployment pipeline
Refresh images & redeploy can pull a replacement behind the same tag, or rebuild the deployed Git revision with refreshed base images. Automatic refresh is off by default and requires explicit consent, a signed affected/fixed digest pair, an eligible image service and unchanged configuration. It pins the approved replacement, uses the normal refresh and environment-resolution flow, preserves persistent volumes, and verifies the deployed result. Late environment changes stop an automatic update for review. Concurrent requests admit one automatic attempt; rollback clears the one-time approval. Explicit digest pins remain fixed.
Deliver security notices through existing notification channels
Verified, enabled channels receive matching alerts by default, with a per-channel opt-out and durable delivery deduplication. Feed checks share authentication-aware polling, conditional requests and backoff with release updates: five minutes when authenticated, one hour without authentication. Advisory metadata cannot supply executable commands.
Pin patched runtimes and build tools
Use Node 22.23.4 and Bun 1.4.4 across the affected control-plane, website, webmail and worker image stages, with verified image digests. Desktop moves to supported Electron 44.9.2; Actions distributions use Go 1.26.9 and updated Git, archive, SSH/HTTP and telemetry dependencies.
Keep runtime regressions in release checks
Exercise the upstream Brotli decoder rejection case, streaming input, private-CA HTTPS, hostname verification and authenticated asynchronous WebSockets. TLS SNI is sent only for DNS names, and package-manager bootstrapping works when
nodeis an alias to Bun.Preserve authority across tenant and terminal boundaries
Service, server and proxied Cloud terminals retain the caller's credential restrictions and recheck expiry, revocation and current administrative access. SaaS-managed customer hosts use verified public destinations, SSH host-key pins and encrypted uploaded credentials; operator identities and private certificate-provider settings remain outside tenant-controlled host configuration.
Scope backup connections at use time
Cloud S3/SFTP destinations pass the shared public-network checks before connecting to the validated address. Server SSH identity and existing host-key pins remain enforced for SFTP; self-hosted private backup storage stays supported.
Grant narrower token capabilities
Personal access tokens and MCP clients can receive project-scoped domain read/write/delete and deployment read/trigger permissions. Minting checks the creator's authority, and cancellation, rollback and deployment deletion retain their administrative requirement.
Protect remote Docker builds from metadata destinations
Rootful Linux SSH and Cloud builds use the project-owned BuildKit worker's IPv4/IPv6 metadata and credential-endpoint policy, including after restart. Missing required executor or policy support fails before repository commands; local Engine API, bare and Kubernetes builds remain outside this policy's scope.
Verify worker publication before releasing dependent packages
Publish and anonymously verify the protected worker for both supported Linux architectures before dependent image and bundled-release publication. Release receipts must match the tag and source commit; missing or private images stop publication.
Keep disabled preview services isolated
Disabled service copies retain their disabled state while host bind mounts and external host/container namespace references are removed. Named/anonymous volumes and sibling service references stay usable; production configuration is unchanged.
Separate webhook endpoint quotas behind shared addresses
Unrelated hooks no longer exhaust one another's source-IP bucket. Endpoint quotas share the existing limiter with a separate aggregate IP ceiling; authentication, signatures and credential redaction remain enforced.
Desktop, webmail, website and documentation
Build Windows installers with patched runtimes
Stage SSH and Docker dependencies from a package manifest so version ranges do not pass through Windows command shims. The packaged dependency load check remains required.
Restore visible offline Desktop startup
Embed the shared generated theme palette in the native loading page so its text and artwork remain visible before the dashboard loads.
Repair older managed webmail host mappings
Backfill the missing host-gateway alias for the explicitly linked webmail service on its own self-hosted mail server. The repair preserves credentials and volumes and takes effect through the next normal deployment.
Preview Office attachments with bounded rendering
XLSX, DOCX and CSV files gain readable, sandboxed previews with limits on parsing and rendered content. Unsupported, encrypted, corrupt or truncated content retains a download option. Active HTML/SVG/XML and unknown attachment types download instead of executing in the signed-in webmail origin.
Update mail and editor dependencies consistently
Align the patched editor dependency graph across direct and nested imports, update Nodemailer and Mailparser, and preserve reviewed runtime overrides in Docker and tarball packages. Existing SMTP modes and credential repair remain supported.
Keep public-page social previews intact
Pricing, marketing, catalog, feature, blog, changelog and mail-guide pages inherit the shared Open Graph and Twitter images while retaining explicit page images and metadata. The release checks validate the rendered image tags and their image responses.
Show GitHub stars in site navigation
Desktop and mobile navigation display the cached repository star count, with an accessible exact count and a fallback when GitHub is unavailable.
Improve operational guidance
Document Docker socket permissions and reconnecting after group changes, update the shared API/SDK/CLI/MCP references, and explain the supported cluster, recovery and runtime-image workflows.
Upgrade notes
Rebuild or recreate the affected control-plane and webmail deployments to apply their runtime updates. Explicit project runtime versions and image digest pins are preserved
Updating Openship alone does not update every deployed app.
- Protected rootful SSH Docker builds require Buildx and root or passwordless sudo for the trusted worker policy and cache filesystem operations. Ordinary explicit CPU/RAM limits and unconfigured resource sharing retain their existing behavior.
- Existing-Swarm support is for Desktop/self-hosted controllers, with stop-first cutover and single-instance persistent services on the connected manager. It does not adopt arbitrary existing stacks or add hosted Cloud clustering. Managed PostgreSQL/Redis replication requires self-hosted Kubernetes operators.