diff --git a/libtrellis/CMakeLists.txt b/libtrellis/CMakeLists.txt
index c6ab645..a904497 100644
--- a/libtrellis/CMakeLists.txt
+++ b/libtrellis/CMakeLists.txt
@@ -29,7 +29,24 @@
         set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
     endif()
 endif()
-set(boost_libs filesystem thread program_options system)
+if (WASI)
+    set(USE_THREADS OFF)
+    add_definitions(
+        -DBOOST_EXCEPTION_DISABLE
+        -DBOOST_NO_EXCEPTIONS
+        -DBOOST_SP_NO_ATOMIC_ACCESS
+        -DBOOST_AC_DISABLE_THREADS
+        -DBOOST_NO_CXX11_HDR_MUTEX
+    )
+else()
+    set(USE_THREADS ON)
+endif()
+set(boost_libs filesystem program_options system)
+if (USE_THREADS)
+    list(APPEND boost_libs thread)
+else()
+    add_definitions(-DNO_THREADS)
+endif()
 set(Boost_NO_BOOST_CMAKE ON)
 find_package(PythonInterp 3.5 REQUIRED)
 
@@ -180,6 +197,13 @@
 target_link_libraries(${PROGRAM_PREFIX}ecpmulti trellis ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${link_param})
 setup_rpath(${PROGRAM_PREFIX}ecpmulti)
 
+if (WASI)
+    foreach (tool ecpbram ecppack ecpunpack ecppll ecpmulti)
+        # set(CMAKE_EXECUTABLE_SUFFIX) breaks CMake tests for some reason
+        set_property(TARGET ${PROGRAM_PREFIX}${tool} PROPERTY SUFFIX ".wasm")
+    endforeach()
+endif()
+
 if (BUILD_SHARED)
     install(TARGETS trellis ${PROGRAM_PREFIX}ecpbram ${PROGRAM_PREFIX}ecppack ${PROGRAM_PREFIX}ecppll ${PROGRAM_PREFIX}ecpunpack ${PROGRAM_PREFIX}ecpmulti ${PythonInstallTarget}
             LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROGRAM_PREFIX}trellis
diff --git a/libtrellis/include/BitDatabase.hpp b/libtrellis/include/BitDatabase.hpp
index 6708ac6..26c88ca 100644
--- a/libtrellis/include/BitDatabase.hpp
+++ b/libtrellis/include/BitDatabase.hpp
@@ -7,8 +7,10 @@
 #include <cstdint>
 #include <boost/optional.hpp>
 #include <mutex>
+#ifndef NO_THREADS
 #include <boost/thread/shared_mutex.hpp>
 #include <atomic>
+#endif
 #include <set>
 #include <unordered_set>
 #include "Util.hpp"
@@ -331,8 +333,12 @@
 private:
     explicit TileBitDatabase(const string &filename);
 
+#ifdef NO_THREADS
+    bool dirty = false;
+#else
     mutable boost::shared_mutex db_mutex;
     atomic<bool> dirty{false};
+#endif
     map<string, MuxBits> muxes;
     map<string, WordSettingBits> words;
     map<string, EnumSettingBits> enums;
diff --git a/libtrellis/include/DatabasePath.hpp b/libtrellis/include/DatabasePath.hpp
index cab8a29..288f670 100644
--- a/libtrellis/include/DatabasePath.hpp
+++ b/libtrellis/include/DatabasePath.hpp
@@ -6,6 +6,15 @@
 
 #if BOOST_VERSION >= 106100
 
+#if defined(__wasm)
+
+std::string get_database_path()
+{
+    return "/share/trellis/database";
+}
+
+#else
+
 #include <boost/dll/runtime_symbol_info.hpp>
 
 std::string get_database_path()
@@ -16,6 +25,8 @@
     return database_folder;
 }
 
+#endif
+
 #else
 
 /*
diff --git a/libtrellis/src/BitDatabase.cpp b/libtrellis/src/BitDatabase.cpp
index 9cf5ad3..5a571c8 100644
--- a/libtrellis/src/BitDatabase.cpp
+++ b/libtrellis/src/BitDatabase.cpp
@@ -6,8 +6,10 @@
 
 #include <algorithm>
 #include <fstream>
+#ifndef NO_THREADS
 #include <boost/thread/shared_lock_guard.hpp>
 #include <boost/thread/lock_guard.hpp>
+#endif
 #include <boost/range/algorithm/copy.hpp>
 #include <boost/range/adaptors.hpp>
 
@@ -335,7 +337,9 @@
 
 void TileBitDatabase::config_to_tile_cram(const TileConfig &cfg, CRAMView &tile, bool is_tilegroup, set<string> *tg_matches) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     for (auto arc : cfg.carcs)
         muxes.at(arc.sink).set_driver(tile, arc.source);
     set<string> found_words, found_enums;
@@ -397,7 +401,9 @@
 
 TileConfig TileBitDatabase::tile_cram_to_config(const CRAMView &tile) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     TileConfig cfg;
     BitSet coverage;
     for (auto mux : muxes) {
@@ -431,7 +437,9 @@
 
 void TileBitDatabase::load()
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     ifstream in(filename);
     if (!in) {
         throw runtime_error("failed to open tilebit database file " + filename);
@@ -466,7 +474,9 @@
 
 void TileBitDatabase::save()
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     ofstream out(filename);
     if (!out) {
         throw runtime_error("failed to open tilebit database file " + filename + " for writing");
@@ -488,7 +498,9 @@
 
 vector<string> TileBitDatabase::get_sinks() const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     vector<string> result;
     boost::copy(muxes | boost::adaptors::map_keys, back_inserter(result));
     return result;
@@ -496,13 +508,17 @@
 
 MuxBits TileBitDatabase::get_mux_data_for_sink(const string &sink) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     return muxes.at(sink);
 }
 
 vector<string> TileBitDatabase::get_settings_words() const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     vector<string> result;
     boost::copy(words | boost::adaptors::map_keys, back_inserter(result));
     return result;
@@ -510,13 +526,17 @@
 
 WordSettingBits TileBitDatabase::get_data_for_setword(const string &name) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     return words.at(name);
 }
 
 vector<string> TileBitDatabase::get_settings_enums() const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     vector<string> result;
     boost::copy(enums | boost::adaptors::map_keys, back_inserter(result));
     return result;
@@ -524,13 +544,17 @@
 
 EnumSettingBits TileBitDatabase::get_data_for_enum(const string &name) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     return enums.at(name);
 }
 
 vector<FixedConnection> TileBitDatabase::get_fixed_conns() const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     vector<FixedConnection> result;
     for (const auto &csink : fixed_conns) {
         for (const auto &conn : csink.second) {
@@ -560,7 +584,9 @@
 
 void TileBitDatabase::add_routing(const TileInfo &tile, RoutingGraph &graph) const
 {
+#ifndef NO_THREADS
     boost::shared_lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     int row, col;
     tie(row, col) = tile.get_row_col();
     Location loc(col, row);
@@ -603,7 +629,9 @@
 
 void TileBitDatabase::add_mux_arc(const ArcData &arc)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     dirty = true;
     if (muxes.find(arc.sink) == muxes.end()) {
         MuxBits mux;
@@ -630,7 +658,9 @@
 
 void TileBitDatabase::add_setting_word(const WordSettingBits &wsb)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     dirty = true;
     if (words.find(wsb.name) != words.end()) {
         WordSettingBits &curr = words.at(wsb.name);
@@ -653,7 +683,9 @@
 
 void TileBitDatabase::add_setting_enum(const EnumSettingBits &esb)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     dirty = true;
     if (enums.find(esb.name) != enums.end()) {
         EnumSettingBits &curr = enums.at(esb.name);
@@ -677,7 +709,9 @@
 
 void TileBitDatabase::add_fixed_conn(const Trellis::FixedConnection &conn)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     fixed_conns[conn.sink].insert(conn);
     dirty = true;
 }
@@ -691,19 +725,25 @@
 
 void TileBitDatabase::remove_fixed_sink(const string &sink)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     fixed_conns.erase(sink);
 }
 
 void TileBitDatabase::remove_setting_enum(const string &enum_name)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     enums.erase(enum_name);
 }
 
 void TileBitDatabase::remove_setting_word(const string &word_name)
 {
+#ifndef NO_THREADS
     boost::lock_guard<boost::shared_mutex> guard(db_mutex);
+#endif
     words.erase(word_name);
 }
 
diff --git a/libtrellis/src/Database.cpp b/libtrellis/src/Database.cpp
index 191a39e..3344f44 100644
--- a/libtrellis/src/Database.cpp
+++ b/libtrellis/src/Database.cpp
@@ -19,7 +19,9 @@
 
 // Cache Tilegrid data, to save time parsing it again
 static map<string, pt::ptree> tilegrid_cache;
+#ifndef NO_THREADS
 static mutex tilegrid_cache_mutex;
+#endif
 
 void load_database(string root) {
     db_root = root;
@@ -124,7 +126,9 @@
     string tilegrid_path = db_root + "/" + part.family + "/" + part.device + "/tilegrid.json";
     {
         ChipInfo info = get_chip_info(part);
+#ifndef NO_THREADS
         lock_guard <mutex> lock(tilegrid_cache_mutex);
+#endif
         if (tilegrid_cache.find(part.device) == tilegrid_cache.end()) {
             pt::ptree tg_parsed;
             pt::read_json(tilegrid_path, tg_parsed);
@@ -160,10 +164,14 @@
 }
 
 static unordered_map<TileLocator, shared_ptr<TileBitDatabase>> bitdb_store;
+#ifndef NO_THREADS
 static mutex bitdb_store_mutex;
+#endif
 
 shared_ptr<TileBitDatabase> get_tile_bitdata(const TileLocator &tile) {
+#ifndef NO_THREADS
     lock_guard <mutex> bitdb_store_lg(bitdb_store_mutex);
+#endif
     if (bitdb_store.find(tile) == bitdb_store.end()) {
         assert(!db_root.empty());
         string bitdb_path = db_root + "/" + tile.family + "/tiledata/" + tile.tiletype + "/bits.db";
diff --git a/libtrellis/tools/ecpbram.cpp b/libtrellis/tools/ecpbram.cpp
index a1bc205..7e424f1 100644
--- a/libtrellis/tools/ecpbram.cpp
+++ b/libtrellis/tools/ecpbram.cpp
@@ -41,6 +41,7 @@
 #include "Chip.hpp"
 #include "Database.hpp"
 #include "DatabasePath.hpp"
+#include "wasmexcept.hpp"
 
 using std::map;
 using std::pair;
@@ -124,11 +125,6 @@
 int main(int argc, char **argv)
 {
     bool verbose = false;
-#ifdef _WIN32
-    uint32_t seed_nr = GetCurrentProcessId();
-#else
-    uint32_t seed_nr = getpid();
-#endif
     namespace po = boost::program_options;
 
     std::string database_folder = get_database_path();;
@@ -197,14 +193,26 @@
             return 1;
         }
 
+        // If -s is provided: seed with the given value.
+        // If -s is not provided: seed with the PID and current time, which are unlikely 
+        // to repeat simultaneously.
+        uint32_t seed_nr;
         if (vm.count("seed")) {
             seed_nr = vm.at("seed").as<int>();
 
             if (verbose)
                 fprintf(stderr, "Seed: %d\n", seed_nr);
+        } else {
+#if defined(__wasm)
+            seed_nr = 0;
+#elif defined(_WIN32)
+            seed_nr = GetCurrentProcessId();
+#else
+            seed_nr = getpid();
+#endif
         }
 
-        x  =  uint64_t(seed_nr) << 32;
+        x  = uint64_t(seed_nr) << 32;
         x ^= uint64_t(seed_nr) << 20;
         x ^= uint64_t(seed_nr);
 
diff --git a/libtrellis/tools/ecpmulti.cpp b/libtrellis/tools/ecpmulti.cpp
index 83232e1..20ddaec 100644
--- a/libtrellis/tools/ecpmulti.cpp
+++ b/libtrellis/tools/ecpmulti.cpp
@@ -6,6 +6,7 @@
 #include "DatabasePath.hpp"
 #include "Tile.hpp"
 #include "version.hpp"
+#include "wasmexcept.hpp"
 #include <iostream>
 #include <boost/program_options.hpp>
 #include <stdexcept>
diff --git a/libtrellis/tools/ecppack.cpp b/libtrellis/tools/ecppack.cpp
index d6aea40..6bf2895 100644
--- a/libtrellis/tools/ecppack.cpp
+++ b/libtrellis/tools/ecppack.cpp
@@ -6,7 +6,7 @@
 #include "Tile.hpp"
 #include "BitDatabase.hpp"
 #include "version.hpp"
-
+#include "wasmexcept.hpp"
 #include <iostream>
 #include <boost/program_options.hpp>
 #include <stdexcept>
diff --git a/libtrellis/tools/ecppll.cpp b/libtrellis/tools/ecppll.cpp
index 13e6b26..a3e5b3c 100644
--- a/libtrellis/tools/ecppll.cpp
+++ b/libtrellis/tools/ecppll.cpp
@@ -37,6 +37,7 @@
 #include <string>
 #include <boost/program_options.hpp>
 #include "version.hpp"
+#include "wasmexcept.hpp"
 using namespace std;
 
 enum class pll_mode{
diff --git a/libtrellis/tools/ecpunpack.cpp b/libtrellis/tools/ecpunpack.cpp
index a5752a8..1029356 100644
--- a/libtrellis/tools/ecpunpack.cpp
+++ b/libtrellis/tools/ecpunpack.cpp
@@ -4,6 +4,7 @@
 #include "Database.hpp"
 #include "DatabasePath.hpp"
 #include "version.hpp"
+#include "wasmexcept.hpp"
 #include <iostream>
 #include <boost/optional.hpp>
 #include <boost/program_options.hpp>
diff --git a/libtrellis/tools/wasmexcept.hpp b/libtrellis/tools/wasmexcept.hpp
new file mode 100644
index 0000000..657d9dc
--- /dev/null
+++ b/libtrellis/tools/wasmexcept.hpp
@@ -0,0 +1,19 @@
+#if defined(__wasm)
+
+#include <cstdint>
+#include <iostream>
+
+extern "C" {
+// FIXME: WASI does not currently support exceptions.
+void *__cxa_allocate_exception(size_t thrown_size) throw() { return malloc(thrown_size); }
+bool __cxa_uncaught_exception() throw();
+void __cxa_throw(void *thrown_exception, struct std::type_info *tinfo, void (*dest)(void *)) { std::terminate(); }
+}
+
+namespace boost {
+void throw_exception(std::exception const &e) { 
+	std::cerr << "boost::exception(): " << e.what() << std::endl;
+}
+} // namespace boost
+
+#endif
