The development server runs on port 3000 as soon as the sandbox is ready.
// template.ts
import { Template, waitForURL } from 'e2b'
export const template = Template()
.fromNodeImage('21-slim')
.setWorkdir('/home/user/nextjs-app')
.runCmd(
'npx create-next-app@14.2.30 . --ts --tailwind --no-eslint --import-alias "@/*" --use-npm --no-app --no-src-dir'
)
.runCmd('npx shadcn@2.1.7 init -d')
.runCmd('npx shadcn@2.1.7 add --all')
.runCmd(
'mv /home/user/nextjs-app/* /home/user/ && rm -rf /home/user/nextjs-app'
)
.setWorkdir('/home/user')
.setStartCmd('npx next --turbo', waitForURL('http://localhost:3000'))
# template.py
from e2b import Template, wait_for_url
template = (
Template()
.from_node_image("21-slim")
.set_workdir("/home/user/nextjs-app")
.run_cmd(
'npx create-next-app@14.2.30 . --ts --tailwind --no-eslint --import-alias "@/*" --use-npm --no-app --no-src-dir'
)
.run_cmd("npx shadcn@2.1.7 init -d")
.run_cmd("npx shadcn@2.1.7 add --all")
.run_cmd("mv /home/user/nextjs-app/* /home/user/ && rm -rf /home/user/nextjs-app")
.set_workdir("/home/user")
.set_start_cmd("npx next --turbo", wait_for_url('http://localhost:3000'))
)
// build.ts
import { Template, defaultBuildLogger } from 'e2b'
import { template as nextJSTemplate } from './template'
Template.build(nextJSTemplate, 'nextjs-app', {
cpuCount: 4,
memoryMB: 4096,
onBuildLogs: defaultBuildLogger(),
})
# build.py
from e2b import Template, default_build_logger
from .template import template as nextjsTemplate
Template.build(nextjsTemplate, 'nextjs-app',
cpu_count=4,
memory_mb=4096,
on_build_logs=default_build_logger(),
)