Deploying a Shelf Server
Shelf is a flexible web server framework for Dart. Globe supports deploying Shelf applications with zero custom configuration. This page outlines requirements and deployment behaviour.
Project Setup
To create a new project using the Globe template, run the following command:
globe create –t crud_rest_api_shelf
To create a Shelf project manually
- 
Create a basic Dart application: dart create my_shelf_app
- 
Rename lib/my_shelf_app.darttolib/main.dartfor the application entry point
- 
Install the Shelf package: dart pub add shelf
- 
Copy this code into lib/main.dart: import 'dart:io'; import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart' as shelf_io; void main() async { final handler = const Pipeline().addMiddleware(logRequests()).addHandler(_echoRequest); final server = await shelf_io.serve( handler, InternetAddress.anyIPv4, int.tryParse(Platform.environment['PORT'] ?? '8080') ?? 8080, ); print('Serving at http://${server.address.host}:${server.port}'); } Response _echoRequest(Request request) => Response.ok('Request for "${request.url}"... worked!');For Globe to correctly run your backend application, it must listen to the PORTenvironment variable as shown in the example.
- 
Test your application locally: dart run lib/main.dart
- 
Visit http://localhost:8080/helloin your browser to see:Request for "hello"... worked!
Deploying to Globe
- 
Run the deployment command from your project root: globe deploy
- 
For first-time deployments: - Confirm setup when prompted (press Y)
- Enter a name for your project (e.g., my-shelf-app) or accept the default
 
- 
Wait for the deployment to complete. You'll receive a unique URL for accessing your deployment. 
Deployment Behaviour
- Environment: Globe sets the PORTvariable automatically. Your app must listen to it.
- Build runner: Detected and triggered based on Dart project structure.
- Preset: No config needed for Shelf; Globe uses sensible defaults.
- Logs: Real-time logs are available in the dashboard under the Logs tab.
Best practices
- Always listen on the PORTenvironment variable with a fallback for local development.
- Implement proper error handling with appropriate HTTP status codes.
- Use middleware for logging, authentication, and other cross-cutting concerns.
- Separate route handlers into dedicated files for better maintainability.
- Validate and sanitize all user input to prevent security vulnerabilities.
