theseus 1.0.3+2

  • Installing
  • Versions
  • 0


Theseus port version 1.0.2

Theseus is a library for generating and solving mazes. It also includes routines for rendering mazes (and their solutions) to both ASCII art, and to PNG image files.

There is also an included utility for generating mazes from the command-line.


Theseus supports the following types of mazes:

  • Orthogonal. This is the traditional maze layout of rectangular passages.
  • Delta. This maze type tesselates the field into triangles.
  • Sigma. The field is tesselated into hexagons.
  • Upsilon. The maze field consists of tiled octogons and squares.

Mazes may be generated using any of the following features:

  • Symmetry. The maze may be reflected in x, y, x and y, or radially. (Not all maze types support symmetry yet.)
  • Randomness. A maze with low randomness will result in many long, straight corridors. Higher randomness gives a maze with more twists and turns.
  • Weave. Mazes with high weave will frequently pass over or under existing passages. Low weave mazes will prefer to remain on the same plane.
  • Braid. Mazes with high braid will trade dead-ends for circular loops in the maze. Thus, braided mazes will tend to have multiple possible solutions.
  • Wrap. Mazes may wrap in x, y, or x and y together. A maze that wraps in any of its dimensions will allow the passages to go from one side of the maze to the other, by moving beyond the far edge of the maze. Another way to think of it is that a maze that wraps in one dimension may be mapped onto a cylinder, and a maze that wraps in both dimensions may be mapped onto a torus.
  • Masks. Mazes may be constrained with masks, which are basically boolean grids that define where a passage is allowed to exist. With masks, you can create mazes that fit pre-defined geometry, or wrap around text.

Theseus supports the following output types:

  • ASCII. Using the ASCII output, you can simply print a maze to the console to see what it looks like. Not all features can be displayed well in ASCII mode, but it works well enough to see what the maze will be like.
  • PNG or Canvas. Mazes that are rendered to PNG may be highly customized, and even allow you to specify custom paths to be rendered.

Theseus supports the following solution algorithms:

  • Recursive Backtracking. This is a fast, efficient algorithm for solving mazes that have no circular loops (e.g. unbraided mazes).
  • A star Search. The A* search algorithm really shines with mazes that are highly braided, and is guaranteed to provide you with the shortest path through the maze.

Orthogonal mazes may be converted to their unicursal equivalent. A unicursal maze is one which has only a single path that covers every cell in the field exactly once. This style is maze is often called a "labyrinth". See Theseus::OrthogonalMaze#to_unicursal for more information.

Theseus is also designed to allow you to step through both the generation of the maze, as well as the computation of the solution. This lets you (for instance) animate the construction (and solution) of the maze by drawing individual PNG frames for each step! And since Theseus includes an implementation of A* Search, this gives you an interesting way to visualize (among other things) how that algorithm works.

Lastly, Theseus can be used to manually build mazes (or any other grid-based structure) by hand. See Theseus::Maze for more information.


Theseus is designed to be super simple to use. See 'example' folder.


Theseus is created by Jamis Buck. It is made available in the public domain, completely unencumbered by rules, restrictions, or any other nonsense.

Please prefer good over evil.



  • Fix AStar solver


  • Fix all PNG formatters


  • Migrate to test package


  • Initial version, created by Stagehand

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  theseus: ^1.0.3+2

2. Install it

You can install packages from the command line:

with pub:

$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:theseus/theseus.dart';
Version Uploaded Documentation Archive
1.0.3+2 Jun 19, 2016 Go to the documentation of theseus 1.0.3+2 Download theseus 1.0.3+2 archive
1.0.3+1 Jun 19, 2016 Go to the documentation of theseus 1.0.3+1 Download theseus 1.0.3+1 archive
1.0.3 Jun 18, 2016 Go to the documentation of theseus 1.0.3 Download theseus 1.0.3 archive
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Oct 10, 2018, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.0.0
  • pana: 0.12.4


Detected platforms: unsure

Low code quality prevents platform classification.

Health issues and suggestions

Fix lib/src/solvers/backtracker.dart. (-99.58 points)

Analysis of lib/src/solvers/backtracker.dart failed with 19 errors, 1 hint, including:

line 21 col 41: The argument type '() → Position' can't be assigned to the parameter type 'Position'.

line 21 col 52: The argument type '() → Position' can't be assigned to the parameter type 'Position'.

line 39 col 22: The argument type 'List' can't be assigned to the parameter type 'BacktrackerStackItem'.

line 39 col 64: The method 'dup' isn't defined for the class 'List<int>'.

line 46 col 36: Undefined name 'x'.

Fix lib/src/path.dart. (-43.75 points)

Analysis of lib/src/path.dart failed with 2 errors:

line 108 col 26: The argument type '(Position, dynamic) → Null' can't be assigned to the parameter type '(dynamic, dynamic) → void'.

line 113 col 26: The argument type '(Position, dynamic) → Null' can't be assigned to the parameter type '(dynamic, dynamic) → void'.

Fix lib/src/maze.dart. (-25 points)

Analysis of lib/src/maze.dart failed with 1 error:

line 944 col 44: The function expression type '(List<dynamic>, int) → bool' isn't of type '(dynamic, int) → bool'. This means its parameter or return type does not match what is expected. Consider changing parameter type(s) or the returned type(s).

Fix additional 23 files with analysis or formatting issues. (-0.50 points)

Additional issues in the following files:

  • lib/src/formatters/png/sigma.dart (1 hint)
  • lib/ruby_port.dart (Run dartfmt to format lib/ruby_port.dart.)
  • lib/src/algorithms/algorithms.dart (Run dartfmt to format lib/src/algorithms/algorithms.dart.)
  • lib/src/algorithms/base.dart (Run dartfmt to format lib/src/algorithms/base.dart.)
  • lib/src/algorithms/recursive_backtracker.dart (Run dartfmt to format lib/src/algorithms/recursive_backtracker.dart.)
  • lib/src/delta_maze.dart (Run dartfmt to format lib/src/delta_maze.dart.)
  • lib/src/formatters/ascii.dart (Run dartfmt to format lib/src/formatters/ascii.dart.)
  • lib/src/formatters/ascii/delta.dart (Run dartfmt to format lib/src/formatters/ascii/delta.dart.)
  • lib/src/formatters/ascii/orthogonal.dart (Run dartfmt to format lib/src/formatters/ascii/orthogonal.dart.)
  • lib/src/formatters/ascii/sigma.dart (Run dartfmt to format lib/src/formatters/ascii/sigma.dart.)
  • lib/src/formatters/ascii/upsilon.dart (Run dartfmt to format lib/src/formatters/ascii/upsilon.dart.)
  • lib/src/formatters/formatters.dart (Run dartfmt to format lib/src/formatters/formatters.dart.)
  • lib/src/formatters/png.dart (Run dartfmt to format lib/src/formatters/png.dart.)
  • lib/src/formatters/png/delta.dart (Run dartfmt to format lib/src/formatters/png/delta.dart.)
  • lib/src/formatters/png/orthogonal.dart (Run dartfmt to format lib/src/formatters/png/orthogonal.dart.)
  • lib/src/formatters/png/upsilon.dart (Run dartfmt to format lib/src/formatters/png/upsilon.dart.)
  • lib/src/mask.dart (Run dartfmt to format lib/src/mask.dart.)
  • lib/src/orthogonal_maze.dart (Run dartfmt to format lib/src/orthogonal_maze.dart.)
  • lib/src/sigma_maze.dart (Run dartfmt to format lib/src/sigma_maze.dart.)
  • lib/src/solvers/astar.dart (Run dartfmt to format lib/src/solvers/astar.dart.)
  • lib/src/solvers/base.dart (Run dartfmt to format lib/src/solvers/base.dart.)
  • lib/src/solvers/solvers.dart (Run dartfmt to format lib/src/solvers/solvers.dart.)
  • lib/src/upsilon_maze.dart (Run dartfmt to format lib/src/upsilon_maze.dart.)

Maintenance issues and suggestions

Fix platform conflicts. (-20 points)

Low code quality prevents platform classification.

Package is too old. (-100 points)

The package was released more than two years ago.

Use analysis_options.yaml. (-10 points)

Rename old .analysis_options file to analysis_options.yaml.

Read more about the setup of analysis-options.yaml.

Add SDK constraint in pubspec.yaml. (-5 points)

For information about setting SDK constraint, please see

Maintain an example.

None of the files in your example/ directory matches a known example patterns. Common file name patterns include: main.dart, example.dart or you could also use theseus.dart.


Package Constraint Resolved Available
Dev dependencies
image ^1.1.0
test ^0.12.0