Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
e31d5a7
chore(deps): update Dockerfile dependencies to latest versions
claude Dec 16, 2025
9e89edf
chore(deps): update all tool versions across the codebase
claude Dec 16, 2025
540b403
use pnpm 9.15.9
amirhmoradi Dec 17, 2025
9e79314
Downgrade pnpm version to 9.15.9
amirhmoradi Dec 17, 2025
0f69bbb
Downgrade pnpm version to 9.15.9
amirhmoradi Dec 17, 2025
2e32b0a
Update pnpm version in Dockerfile.server
amirhmoradi Dec 17, 2025
9f84dd4
Downgrade pnpm version in package.json
amirhmoradi Dec 17, 2025
f6b756e
Downgrade pnpm version in package.json
amirhmoradi Dec 17, 2025
1ac3d1c
Downgrade pnpm version in package.json
amirhmoradi Dec 17, 2025
dfc15cd
Downgrade pnpm version in package.json
amirhmoradi Dec 17, 2025
ed701df
Downgrade package manager to [email protected]
amirhmoradi Dec 17, 2025
23b14cf
Update pnpm and Docker versions in Dockerfile
amirhmoradi Dec 20, 2025
0a8753d
Update pnpm version in Dockerfile.cloud
amirhmoradi Dec 20, 2025
bb0a53d
Downgrade pnpm version in Dockerfile.schedule
amirhmoradi Dec 20, 2025
3849a20
Downgrade pnpm version in Dockerfile.server
amirhmoradi Dec 20, 2025
a8064af
Downgrade pnpm version in package.json
amirhmoradi Dec 20, 2025
e1896c2
Downgrade pnpm version in package.json
amirhmoradi Dec 20, 2025
3bdf029
Downgrade pnpm version in package.json
amirhmoradi Dec 20, 2025
1988a14
Downgrade package manager version to [email protected]
amirhmoradi Dec 20, 2025
93fa192
Downgrade package manager version to [email protected]
amirhmoradi Dec 20, 2025
67d5e1a
Update Docker version in server setup script
amirhmoradi Dec 20, 2025
01c0b46
fix(selectAIProvider): add authorization header for Gemini provider
krishna2206 Dec 31, 2025
eb14a68
feat: add solid colors for avatar
mcfdez Dec 31, 2025
0897417
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 4, 2026
13ad8cb
Merge pull request #3371 from mcfdez/feat/solid-color-avatars
Siumauricio Jan 4, 2026
d2ce587
feat(compose): include composeId in deployment and redeployment respo…
Siumauricio Jan 4, 2026
2eb73b9
feat(preview): :sparkles: add manual rebuild option for preview deplo…
tanmay-pathak Jan 4, 2026
eb9d140
chore: uninstall ununused hi-base32 package
bdkopen Jan 6, 2026
016aa02
chore: uninstall unused `otpauth` package
bdkopen Jan 6, 2026
9aa03ef
Merge pull request #3402 from bdkopen/remove-otpauth-package
Siumauricio Jan 6, 2026
068deec
Merge pull request #3401 from bdkopen/remove-hi-base32-package
Siumauricio Jan 6, 2026
8db7a42
Made the deployments list items responsive by stacking the metadata/a…
mhbdev Jan 6, 2026
fe5efd7
Added a built-in password generator to the shared input
mhbdev Jan 6, 2026
5005f91
fix: admin permission frontend side, should be able to see what owner…
vikyw89 Jan 6, 2026
b19d3e9
Merge branch 'canary' of github.com:amirhmoradi/dokploy into claude/u…
amirhmoradi Jan 8, 2026
0c62bc0
fix: create migrations and update to latest railpack
amirhmoradi Jan 8, 2026
d12f029
chore: uninstall `@nerimity/mimiqueue`
bdkopen Jan 10, 2026
1e11f60
Initial plan
Copilot Jan 10, 2026
14d359d
Fix GitLab View Repository links to use correct URL and namespace
Copilot Jan 10, 2026
d894b2a
feat(stripe): add customer_email to payment metadata
Siumauricio Jan 12, 2026
4001f1d
feat(billing): implement invoice display and retrieval functionality
Siumauricio Jan 12, 2026
4e0cb2a
feat(billing): add billing invoices page and update billing components
Siumauricio Jan 12, 2026
edc8efe
refactor(servers): replace DropdownMenuItem with Button for Setup Ser…
Siumauricio Jan 12, 2026
f303962
fix(database): update container name query to use exact match
Siumauricio Jan 12, 2026
2acaaed
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 12, 2026
2b0ae65
Merge pull request #3438 from Dokploy/feat/add-invoices-billing
Siumauricio Jan 12, 2026
10c0de9
Merge pull request #3431 from Dokploy/copilot/fix-invalid-link-view-r…
Siumauricio Jan 12, 2026
6d94da1
feat(backup): add functionality to keep the latest N backups after ru…
Siumauricio Jan 12, 2026
ccfd7f5
Merge pull request #3439 from Dokploy/3102-web-server-backup-keep-the…
Siumauricio Jan 12, 2026
85424ba
chore(dependencies): update semver to version 7.7.3 and add @types/se…
Siumauricio Jan 12, 2026
11af6a5
feat(docker): enhance reloadDockerResource to accept version paramete…
Siumauricio Jan 12, 2026
167dacc
feat(settings): enhance getUpdateData and reloadDockerResource for im…
Siumauricio Jan 12, 2026
d490111
Merge pull request #3441 from Dokploy/3260-dokploy-automatically-upda…
Siumauricio Jan 12, 2026
0c0944d
Update package.json
Siumauricio Jan 12, 2026
7921f75
Merge pull request #3427 from bdkopen/remove-@nerimity/mimiqueue
Siumauricio Jan 12, 2026
7583d5f
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 12, 2026
6ca6ff3
Merge branch 'canary' into preview-deploy-rebuild
Siumauricio Jan 12, 2026
6b9bcbc
feat(schema): extend deployJobSchema to include 'redeploy' type and e…
Siumauricio Jan 12, 2026
831a181
Merge pull request #3389 from tanmay-pathak/preview-deploy-rebuild
Siumauricio Jan 12, 2026
a2b16d4
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 12, 2026
60d69d2
Delete .claude/settings.local.json
Siumauricio Jan 12, 2026
4383e46
Merge pull request #3290 from amirhmoradi/claude/update-dockerfile-de…
Siumauricio Jan 12, 2026
13b64e4
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 12, 2026
fdf88b1
feat(build): add Railpack version selection with manual input option
Siumauricio Jan 12, 2026
5ddcdd8
Merge branch 'canary' into auto-password-generator
Siumauricio Jan 12, 2026
18d980c
feat: enable password generator for database inputs and disable it fo…
Siumauricio Jan 12, 2026
1ed941b
Merge pull request #3409 from mhbdev/auto-password-generator
Siumauricio Jan 12, 2026
8b370d4
Merge pull request #3370 from krishna2206/fix/gemini-ai-error
Siumauricio Jan 12, 2026
8f95546
Merge pull request #3410 from vikyw89/canary
Siumauricio Jan 12, 2026
fd6f61f
[autofix.ci] apply automated fixes
autofix-ci[bot] Jan 12, 2026
15b0ca7
fix(input): add type safety for input reference handling
Siumauricio Jan 12, 2026
2b779f9
Merge pull request #3444 from Dokploy/feat/add-railpack-selector-version
Siumauricio Jan 12, 2026
b965ded
Merge pull request #3407 from mhbdev/fix-ui-deployments-page
Siumauricio Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ jobs:
- name: Install Nixpacks
if: matrix.job == 'test'
run: |
export NIXPACKS_VERSION=1.39.0
export NIXPACKS_VERSION=1.41.0
curl -sSL https://nixpacks.com/install.sh | bash
echo "Nixpacks installed $NIXPACKS_VERSION"
- name: Install Railpack
if: matrix.job == 'test'
run: |
export RAILPACK_VERSION=0.15.0
export RAILPACK_VERSION=0.15.4
curl -sSL https://railpack.com/install.sh | bash
echo "Railpack installed $RAILPACK_VERSION"
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,7 @@ yarn-error.log*
*.pem


.db
.db

# Development environment
.devcontainer
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ curl -sSL https://railpack.com/install.sh | sh

```bash
# Install Buildpacks
curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.35.0/pack-v0.35.0-linux.tgz" | tar -C /usr/local/bin/ --no-same-owner -xzv pack
curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.39.1/pack-v0.39.1-linux.tgz" | tar -C /usr/local/bin/ --no-same-owner -xzv pack
```

## Pull Request
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,18 @@ RUN curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh --ver
# Install Nixpacks and tsx
# | VERBOSE=1 VERSION=1.21.0 bash

ARG NIXPACKS_VERSION=1.39.0
ARG NIXPACKS_VERSION=1.41.0
RUN curl -sSL https://nixpacks.com/install.sh -o install.sh \
&& chmod +x install.sh \
&& ./install.sh \
&& pnpm install -g tsx

# Install Railpack
ARG RAILPACK_VERSION=0.2.2
ARG RAILPACK_VERSION=0.15.4
RUN curl -sSL https://railpack.com/install.sh | bash

# Install buildpacks
COPY --from=buildpacksio/pack:0.35.0 /usr/local/bin/pack /usr/local/bin/pack
COPY --from=buildpacksio/pack:0.39.1 /usr/local/bin/pack /usr/local/bin/pack

EXPOSE 3000
CMD [ "pnpm", "start" ]
2 changes: 1 addition & 1 deletion Dockerfile.cloud
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ RUN curl https://rclone.org/install.sh | bash
RUN pnpm install -g tsx

EXPOSE 3000
CMD [ "pnpm", "start" ]
CMD [ "pnpm", "start" ]
2 changes: 1 addition & 1 deletion Dockerfile.schedule
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ COPY --from=build /prod/schedules/dist ./dist
COPY --from=build /prod/schedules/package.json ./package.json
COPY --from=build /prod/schedules/node_modules ./node_modules

CMD HOSTNAME=0.0.0.0 && pnpm start
CMD HOSTNAME=0.0.0.0 && pnpm start
2 changes: 1 addition & 1 deletion Dockerfile.server
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ COPY --from=build /prod/api/dist ./dist
COPY --from=build /prod/api/package.json ./package.json
COPY --from=build /prod/api/node_modules ./node_modules

CMD HOSTNAME=0.0.0.0 && pnpm start
CMD HOSTNAME=0.0.0.0 && pnpm start
1 change: 0 additions & 1 deletion apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
"@dokploy/server": "workspace:*",
"@hono/node-server": "^1.14.3",
"@hono/zod-validator": "0.3.0",
"@nerimity/mimiqueue": "1.2.3",
"dotenv": "^16.4.5",
"hono": "^4.7.10",
"pino": "9.4.0",
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const deployJobSchema = z.discriminatedUnion("applicationType", [
titleLog: z.string().optional(),
descriptionLog: z.string().optional(),
server: z.boolean().optional(),
type: z.enum(["deploy"]),
type: z.enum(["deploy", "redeploy"]),
applicationType: z.literal("application-preview"),
serverId: z.string().min(1),
}),
Expand Down
10 changes: 9 additions & 1 deletion apps/api/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
deployPreviewApplication,
rebuildApplication,
rebuildCompose,
rebuildPreviewApplication,
updateApplicationStatus,
updateCompose,
updatePreviewDeployment,
Expand Down Expand Up @@ -54,7 +55,14 @@ export const deploy = async (job: DeployJob) => {
previewStatus: "running",
});
if (job.server) {
if (job.type === "deploy") {
if (job.type === "redeploy") {
await rebuildPreviewApplication({
applicationId: job.applicationId,
titleLog: job.titleLog || "Rebuild Preview Deployment",
descriptionLog: job.descriptionLog || "",
previewDeploymentId: job.previewDeploymentId,
});
} else if (job.type === "deploy") {
await deployPreviewApplication({
applicationId: job.applicationId,
titleLog: job.titleLog || "Preview Deployment",
Expand Down
2 changes: 1 addition & 1 deletion apps/dokploy/__test__/drop/drop.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ if (typeof window === "undefined") {
}

const baseApp: ApplicationNested = {
railpackVersion: "0.2.2",
railpackVersion: "0.15.4",
applicationId: "",
previewLabels: [],
createEnvFile: true,
Expand Down
2 changes: 1 addition & 1 deletion apps/dokploy/__test__/traefik/traefik.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createRouterConfig } from "@dokploy/server";
import { expect, test } from "vitest";

const baseApp: ApplicationNested = {
railpackVersion: "0.2.2",
railpackVersion: "0.15.4",
rollbackActive: false,
applicationId: "",
previewLabels: [],
Expand Down
146 changes: 126 additions & 20 deletions apps/dokploy/components/dashboard/application/build/show.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { Cog } from "lucide-react";
import { useEffect } from "react";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
Expand All @@ -20,8 +20,39 @@ import {
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { api } from "@/utils/api";

// Railpack versions from https://github.com/railwayapp/railpack/releases
export const RAILPACK_VERSIONS = [
"0.15.4",
"0.15.3",
"0.15.2",
"0.15.1",
"0.15.0",
"0.14.0",
"0.13.0",
"0.12.0",
"0.11.0",
"0.10.0",
"0.9.2",
"0.9.1",
"0.9.0",
"0.8.0",
"0.7.0",
"0.6.0",
"0.5.0",
"0.4.0",
"0.3.0",
"0.2.2",
] as const;

export enum BuildType {
dockerfile = "dockerfile",
heroku_buildpacks = "heroku_buildpacks",
Expand Down Expand Up @@ -65,7 +96,7 @@ const mySchema = z.discriminatedUnion("buildType", [
}),
z.object({
buildType: z.literal(BuildType.railpack),
railpackVersion: z.string().nullable().default("0.2.2"),
railpackVersion: z.string().nullable().default("0.15.4"),
}),
z.object({
buildType: z.literal(BuildType.static),
Expand Down Expand Up @@ -152,6 +183,8 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => {
});

const buildType = form.watch("buildType");
const railpackVersion = form.watch("railpackVersion");
const [isManualRailpackVersion, setIsManualRailpackVersion] = useState(false);

useEffect(() => {
if (data) {
Expand All @@ -163,6 +196,14 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => {
};

form.reset(resetData(typedData));

// Check if railpack version is manual (not in the predefined list)
if (
data.railpackVersion &&
!RAILPACK_VERSIONS.includes(data.railpackVersion as any)
) {
setIsManualRailpackVersion(true);
}
}
}, [data, form]);

Expand All @@ -186,7 +227,7 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => {
data.buildType === BuildType.static ? data.isStaticSpa : null,
railpackVersion:
data.buildType === BuildType.railpack
? data.railpackVersion || "0.2.2"
? data.railpackVersion || "0.15.4"
: null,
})
.then(async () => {
Expand Down Expand Up @@ -403,23 +444,88 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => {
/>
)}
{buildType === BuildType.railpack && (
<FormField
control={form.control}
name="railpackVersion"
render={({ field }) => (
<FormItem>
<FormLabel>Railpack Version</FormLabel>
<FormControl>
<Input
placeholder="Railpack Version"
{...field}
value={field.value ?? ""}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<>
<FormField
control={form.control}
name="railpackVersion"
render={({ field }) => (
<FormItem>
<FormLabel>Railpack Version</FormLabel>
<FormControl>
{isManualRailpackVersion ? (
<div className="space-y-2">
<Input
placeholder="Enter custom version (e.g., 0.15.4)"
{...field}
value={field.value ?? ""}
/>
<Button
type="button"
variant="outline"
size="sm"
onClick={() => {
setIsManualRailpackVersion(false);
field.onChange("0.15.4");
}}
>
Use predefined versions
</Button>
</div>
) : (
<Select
onValueChange={(value) => {
if (value === "manual") {
setIsManualRailpackVersion(true);
field.onChange("");
} else {
field.onChange(value);
}
}}
value={field.value ?? "0.15.4"}
>
<SelectTrigger>
<SelectValue placeholder="Select Railpack version" />
</SelectTrigger>
<SelectContent>
<SelectItem value="manual">
<span className="font-medium">
✏️ Manual (Custom Version)
</span>
</SelectItem>
{RAILPACK_VERSIONS.map((version) => (
<SelectItem key={version} value={version}>
v{version}
{version === "0.15.4" && (
<Badge
variant="secondary"
className="ml-2 px-1 text-xs"
>
Latest
</Badge>
)}
</SelectItem>
))}
</SelectContent>
</Select>
)}
</FormControl>
<FormDescription>
Select a Railpack version or choose manual to enter a
custom version.{" "}
<a
href="https://github.com/railwayapp/railpack/releases"
target="_blank"
rel="noreferrer"
className="text-primary underline underline-offset-4"
>
View releases
</a>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</>
)}
<div className="flex w-full justify-end">
<Button isLoading={isLoading} type="submit">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,9 +256,9 @@ export const ShowDeployments = ({
return (
<div
key={deployment.deploymentId}
className="flex items-center justify-between rounded-lg border p-4 gap-2"
className="flex flex-col gap-4 rounded-lg border p-4 sm:flex-row sm:items-center sm:justify-between"
>
<div className="flex flex-col">
<div className="flex flex-1 flex-col min-w-0">
<span className="flex items-center gap-4 font-medium capitalize text-foreground">
{index + 1}. {deployment.status}
<StatusTooltip
Expand Down Expand Up @@ -313,8 +313,8 @@ export const ShowDeployments = ({
)}
</div>
</div>
<div className="flex flex-col items-end gap-2 max-w-[300px] w-full justify-start">
<div className="text-sm capitalize text-muted-foreground flex items-center gap-2">
<div className="flex w-full flex-col items-start gap-2 sm:w-auto sm:max-w-[300px] sm:items-end sm:justify-start">
<div className="text-sm capitalize text-muted-foreground flex flex-wrap items-center gap-2">
<DateTooltip date={deployment.createdAt} />
{deployment.startedAt && deployment.finishedAt && (
<Badge
Expand All @@ -333,7 +333,7 @@ export const ShowDeployments = ({
)}
</div>

<div className="flex flex-row items-center gap-2">
<div className="flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:justify-end">
{deployment.pid && deployment.status === "running" && (
<DialogAction
title="Kill Process"
Expand All @@ -355,6 +355,7 @@ export const ShowDeployments = ({
variant="destructive"
size="sm"
isLoading={isKillingProcess}
className="w-full sm:w-auto"
>
Kill Process
</Button>
Expand All @@ -364,6 +365,7 @@ export const ShowDeployments = ({
onClick={() => {
setActiveLog(deployment);
}}
className="w-full sm:w-auto"
>
View
</Button>
Expand Down Expand Up @@ -405,6 +407,7 @@ export const ShowDeployments = ({
variant="secondary"
size="sm"
isLoading={isRollingBack}
className="w-full sm:w-auto"
>
<RefreshCcw className="size-4 text-primary group-hover:text-red-500" />
Rollback
Expand Down
Loading