diff --git a/psc-docs/CTags.hs b/psc-docs/CTags.hs
new file mode 100644
--- /dev/null
+++ b/psc-docs/CTags.hs
@@ -0,0 +1,13 @@
+module Ctags (dumpCtags) where
+
+import qualified Language.PureScript as P
+import Tags
+import Data.List (sort)
+
+dumpCtags :: [(String, P.Module)] -> [String]
+dumpCtags = sort . concat . (map renderModCtags)
+
+renderModCtags :: (String, P.Module) -> [String]
+renderModCtags (path, mdl) = sort tagLines
+  where tagLines = map tagLine $ tags mdl
+        tagLine (name, line) = name ++ "\t" ++ path ++ "\t" ++ show line
diff --git a/psc-docs/ETags.hs b/psc-docs/ETags.hs
new file mode 100644
--- /dev/null
+++ b/psc-docs/ETags.hs
@@ -0,0 +1,15 @@
+module Etags (dumpEtags) where
+
+import qualified Language.PureScript as P
+import Tags
+
+dumpEtags :: [(String, P.Module)] -> [String]
+dumpEtags = concat . (map renderModEtags)
+
+renderModEtags :: (String, P.Module) -> [String]
+renderModEtags (path, mdl) = ["\x0c", path ++ "," ++ show tagsLen] ++ tagLines
+  where tagsLen = sum $ map length tagLines
+        tagLines = map tagLine $ tags mdl
+        tagLine (name, line) = "\x7f" ++ name ++ "\x01" ++ show line ++ ","
+
+
diff --git a/purescript.cabal b/purescript.cabal
--- a/purescript.cabal
+++ b/purescript.cabal
@@ -1,5 +1,5 @@
 name: purescript
-version: 0.6.9.1
+version: 0.6.9.2
 cabal-version: >=1.8
 build-type: Simple
 license: MIT
@@ -160,7 +160,8 @@
     main-is: Main.hs
     buildable: True
     hs-source-dirs: psc-docs
-    other-modules:
+    other-modules: CTags
+                   ETags
     ghc-options: -Wall -O2
 
 executable psc-hierarchy
