Static server middleware for Angel.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 9a038de Nov 14, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
example 2.0.1 Nov 13, 2018
lib Bump to 2.1.1 Nov 14, 2018
test 2.0.1 Nov 13, 2018
.gitignore Ignore media Nov 14, 2018
.travis.yml Build both dev and stable Dart Jul 9, 2018 Bump to 2.1.1 Nov 14, 2018
LICENSE Initial commit Apr 21, 2016 2.1.0 Nov 14, 2018
analysis_options.yaml Dart 2 fixes + bump version + allow buffering Jul 9, 2018
pubspec.yaml Bump to 2.1.1 Nov 14, 2018


Pub build status

Static server infrastructure for Angel.

Can also handle Range requests now, making it suitable for media streaming, ex. music, video, etc.


In pubspec.yaml:

    angel_static: ^2.0.0-alpha


To serve files from a directory, you need to create a VirtualDirectory. Keep in mind that angel_static uses package:file instead of dart:io.

import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart';
import 'package:angel_static/angel_static.dart';
import 'package:file/local.dart';

main() async {
  var app = new Angel();
  var fs = const LocalFileSystem();

  // Normal static server
  var vDir = new VirtualDirectory(app, fs, source: new Directory('./public'));

  // Send Cache-Control, ETag, etc. as well
  var vDir = new CachingVirtualDirectory(app, fs, source: new Directory('./public'));

  // Mount the VirtualDirectory's request handler

  // Start your server!!!
  await new AngelHttp(app).startServer();

Push State

VirtualDirectory also exposes a pushState method that returns a request handler that serves the file at a given path as a fallback, unless the user is requesting that file. This can be very useful for SPA's.

// Create VirtualDirectory as well
var vDir = new CachingVirtualDirectory(...);

// Mount it

// Fallback to index.html on 404


The VirtualDirectory API accepts a few named parameters:

  • source: A Directory containing the files to be served. If left null, then Angel will serve either from web (in development) or build/web (in production), depending on your ANGEL_ENV.
  • indexFileNames: A List<String> of filenames that should be served as index pages. Default is ['index.html'].
  • publicPath: To serve index files, you need to specify the virtual path under which angel_static is serving your files. If you are not serving static files at the site root, please include this.
  • callback: Runs before sending a file to a client. Use this to set headers, etc. If it returns anything other than null or true, then the callback's result will be sent to the user, instead of the file contents.