diff --git a/compact-adjacency-matrix/README.md b/compact-adjacency-matrix/README.md
new file mode 100644
index 00000000..c6f805e5
--- /dev/null
+++ b/compact-adjacency-matrix/README.md
@@ -0,0 +1,102 @@
+
+
+# CompactAdjacencyMatrix
+
+> Compact adjacency matrix constructor.
+
+
+
+## Usage
+
+```javascript
+var CompactAdjacencyMatrix = require( '@stdlib/utils/compact-adjacency-matrix' );
+```
+
+#### CompactAdjacencyMatrix( N )
+
+Returns a compact adjacency matrix instance.
+
+```javascript
+var adj = new CompactAdjacencyMatrix( 4 );
+// returns
+
+// ...
+
+adj.addEdge( 0, 1 );
+adj.addEdge( 0, 2 );
+adj.addEdge( 1, 2 );
+adj.addEdge( 2, 3 );
+```
+
+
+
+
+
+
+
+## Examples
+
+
+
+```javascript
+var CompactAdjacencyMatrix = require( '@stdlib/utils/compact-adjacency-matrix' );
+
+// Create a new adjacency matrix:
+var adj = new CompactAdjacencyMatrix( 4 );
+
+// Add edges:
+adj.addEdge( 1, 0 );
+adj.addEdge( 1, 2 );
+adj.addEdge( 0, 2 );
+adj.addEdge( 2, 3 );
+
+// Compute the indegrees and outdegrees for each vertex:
+var id;
+var od;
+var i;
+for ( i = 0; i < 4; i++ ) {
+ id = adj.inDegree( i );
+ od = adj.outDegree( i );
+ console.log( 'vertex: %d. indegree: %d. outdegree: %d.', i, id, od );
+}
+
+// Print the list of all edges:
+console.log( adj.edges );
+// => [ [ 0, 2 ], [ 1, 0 ], [ 1, 2 ], [ 2, 3 ] ]
+
+// Convert the adjacency matrix to an adjacency list representation:
+console.log( adj.toAdjacencyList() );
+// => [ [ 2 ], [ 0, 2 ], [ 3 ], [] ]
+
+// Compute a topological ordering:
+console.log( adj.toposort() );
+// => [ [ 1, 0, 2, 3 ], null ]
+```
+
+
+
+
+
+
+
+
diff --git a/compact-adjacency-matrix/test/test.js b/compact-adjacency-matrix/test/test.js
new file mode 100644
index 00000000..115fd754
--- /dev/null
+++ b/compact-adjacency-matrix/test/test.js
@@ -0,0 +1,50 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2021 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var instanceOf = require( '@stdlib/assert/instance-of' );
+var CompactAdjacencyMatrix = require( './../lib' );
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof CompactAdjacencyMatrix, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'the function is a constructor', function test( t ) {
+ var mat = new CompactAdjacencyMatrix( 4 );
+ t.strictEqual( instanceOf( mat, CompactAdjacencyMatrix ), true, 'returns an instance' );
+ t.end();
+});
+
+tape( 'the constructor does not require the `new` keyword', function test( t ) {
+ var compactAdjacencyMatrix;
+ var mat;
+
+ compactAdjacencyMatrix = CompactAdjacencyMatrix;
+ mat = compactAdjacencyMatrix( 4 );
+ t.strictEqual( instanceOf( mat, CompactAdjacencyMatrix ), true, 'returns an instance' );
+ t.end();
+});