{"_id":"reed","_rev":"73-137ea108c5c9a0b0486307896b8fe456","name":"reed","description":"Redis + markdown blogging/website core","dist-tags":{"latest":"0.9.8-2"},"versions":{"0.0.2":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.2","homepage":"http://www.agnos.is/","repository":{"url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":""},"devDependencies":{},"_id":"reed@0.0.2","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.4","files":[""],"_defaultsLoaded":true,"dist":{"shasum":"023ee2d137df8ce72c18366168ebdf6e35fb0813","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.2.tgz","integrity":"sha512-o6YgXSpLhRK8qd32QQA850eU9F6SeNGYMWeYp3QylQ9jtyrBhFE4dNrvLcgaBEgjD1plMJXHeBHa1IUSg+3jlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiHNj0StEq1XAwoYm6iqrZ4/CCvpZBEGgaLBeDez9iCQIgR3tLjfFuWGPW9Rs3R2IKlIx3N8PaXVIO5OnpsfWknhk="}]},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.3":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.3","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":""},"devDependencies":{},"_id":"reed@0.0.3","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.4","files":[""],"_defaultsLoaded":true,"dist":{"shasum":"66bb414eca94088ec2d27d852f1cddcfa7a1c213","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.3.tgz","integrity":"sha512-n60eCOxfpBtq47ON2Enpvn3gOuKeoMimVI4dOQNwwaGes/tp/JpmV7BJVtK3DE072/EnUGXD7dW0kp8hHJCUsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1M4vwSQCnkj25OX+nNdhM9H/fNyl5vyLT9TKUfiUagAiBu2qLHryqusTxdpltkrzjphiPy3QCTiMv3QD1U338xUw=="}]},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"cd8943dffcffb1996273a8721b173ea11293652d","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4.tgz","integrity":"sha512-uZXGs6wMYvQ98Xa8Jeh4W309WYaPMx/oa3D6Kk/D5PdnEo0tqCyIbtN7kNWOLH9G2PdeV+PP/vsg7WYMepIP7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBsyUGexXb/RuO5lj1j7g3F2xzgVhq11+MUTMEW5zmrAiEA9q0kNyNhsQXAloE6+rAyu98ixR02QHstYaFtc8Yv5bU="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-1":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-1","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"a4796ad2d60976e867c320be9591a80263d1fd8d","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-1.tgz","integrity":"sha512-UV+c0UB46KL4V+t0FDTgisoJ0r4RFpnGe1Bb2wVXcApSDoTVD86i9af3SnzG6BGcV4CW2ihyRCrTSdi4CzoA1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRG8I9uYTqDsX8EEcWmOCGJtYoDxvAxil+BMGBSSpL9wIhAMt/HOn+R5pKi7Jnfb4va/hQrKODyuySSJJZqrMojucp"}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-2":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-2","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-2","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"41bc90ff91c109c6cd164e022c16fe66adbed797","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-2.tgz","integrity":"sha512-iwGbRND5rA6/XOaPrHyeSLt4XxSo74T3sprEcBpUa93Z4B2C/5vI0QRWEVt0PXFAFB6qO1lIzgjMXmv3LTNsIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOwgBZOuQVhg4yvEOay7Eo8ByldpH7lbP+E9kiO+jwSAiEApwKAqjYislx+4pq9SipgmZf7NpHXkTpwoklAyFcP8FI="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-3":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-3","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-3/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-3","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"e9dee3d50794c4326cc960a4933f8ec3b669d5bc","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-3.tgz","integrity":"sha512-dKu8RgPytRk2lafdP5Drvp9lfPmbW+WxIVijHSDBi6lsFzgFFhbiaxVRkNskgnMUqwwmQLDVsa2DmvwE3GVpqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDG4//x2Wj8pNyQaQMajkEYsmiC6H8fCVRIVZgBX7Q/XAiAfHL6DsnFVK0LcvggdYeIW1We7WHCQ6tToanz62mT+mg=="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-4":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-4","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-4/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-4","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"bcda07c8abaccc44c1e82109bdc28cc70c3336a8","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-4.tgz","integrity":"sha512-uoIGcZGJaz7DLk9UEbcnczjTyAy7XzdH+UgE1XSGetwp3uqNvgTR91mKTx999eubzeYgQwbUtETGHlikRKoktQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKvkuAdSfsoh756HR9b/r2sDZ18VZ6DrI7TQPtObEKiAiEAjmRN1kg+jqgtl4Q547v618ma/mnf7gpemAbbpL6XL9E="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-5":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-5","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-5/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-5","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"1ad8cf243f039a0f0a86768d308ea1eb1c558997","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-5.tgz","integrity":"sha512-I+An8qud6VrAWzDk90NPlKCOzq7EXnujdnFB9xS4CgbH7RdZ3NIXP+zDha4A6osP93nosNkLkLCKb69QX+/cPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7DVBm7eYvPHs05bkeN1bUuSRIGuKO8h66+eEMO0x1yAiEArTid+k0pdQY/bai6g0VwvN6Z0+dNoHqVwjB21OpIEEw="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.4-6":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.4-6","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.4-6/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.4-6","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"71700f19f141174f6489a3d4a6139830d558b826","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.4-6.tgz","integrity":"sha512-/evbR455M5lEOUlH7ltWjnxUn9sRSdydbcJyWY3UNvTu+578yQgrwFggU5L+ktwfCaw1Xd73tHT9w7qIgqq8JQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfK+MM3w52PydHlZ16dx8EELeDDVLO+5OAQlWGfR4CmAiBXJAypwbOUyHt5Mdg7xFtGqgddiJzsEqp/L5TbJOGoUg=="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.0.5":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging core","tags":["redis","blog"],"version":"0.0.5","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.0.5/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.0.5","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"341b99031cb468078d3a6418495538455d7d080f","tarball":"https://registry.npmjs.org/reed/-/reed-0.0.5.tgz","integrity":"sha512-NEAi1EUDmM5n8V8bXaReEjMMSVx+FQ7F5+YpAQpcvtg0gwwU+uzBa63LsZi6doAT7yFytkOn+TmxA5xexjm2CA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgrgQbpsC1QJ0tM/OW8eRa/y0ZuMUZs7pitVMSzJgMSgIgeSCewbTsRHT7o5FlaKJpBtfgGXeLWjpq1/tdDKIj4ok="}]},"scripts":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.0":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.0","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.0","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"c7b79f12c99727835a817fe6c551d0a3f936faa6","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.0.tgz","integrity":"sha512-iAA++wuc5bV1ejso2hqmESG+uc1uWE67W+2POaTCyFbHmGNw03JlPhEcJ1bLF22tQkocR6U5/2tIMw4xHsSmOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEFnX36uFzQBw1vgGpoSh5fC4DMTGgAKcheKCsCkC29AIgZBeXh1fBd9aWnU9X28Bedk8CT4Nrr0K2EnqTRviJMws="}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.1":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.1","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"78694e5d5e8d296f1000500cc33fd58d2bfc4b7c","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.1.tgz","integrity":"sha512-2VhKq1CaKkEZUwE1kmBUxwIb/rSKvBikpMNlbfBCAjc3L78HFVRdbnI+Hfr0t8etyVqkXDGb9ZoqVk4/HIdItw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIbqbIdjoZYMMGmvzcmiAvGsK1/YUdjtP+BcW6DURZkwIhANZr/TYI0J3QqcUCO7BMWQ9YOz+9BpyAHUxW/Yt3btSy"}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.1-1":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.1-1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.1-1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.1-1","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"6b9ef0f3a2d38fe6a6dae6c408b031905b127901","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.1-1.tgz","integrity":"sha512-yMgN/eq+7FQq9w9XLofwopWskbDigR+4zVTGl49ZAHW7E8F/OE2oHBDG84HVs2AD0AY8U7u9pnlaPRU8hryafw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC247gIsiD3YfPEpp2cpox3t71vnhMN6tTWQZgfjf/CbAIhAKjVPBy5SjrH9XOd0sBbuln3uqUrMwmQXBj8Zkg94Gtw"}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.2":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.2","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.2","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.4","_defaultsLoaded":true,"dist":{"shasum":"64cd104be102d5b4e30badae991261315b51786d","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.2.tgz","integrity":"sha512-H0W1j7pfj+KaYGkDV+aRIj/JJT7kDJT12YQuLZBcEhHYHb0gseZohImTQuPbLJCaWZxHsv68gcSzXpwQAHn9jw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/0DAPXi0aC0oWVYk3GReP7djp3RnQuzE2sUu1MOc09AIgJObNs6d+3006s2Ufi/XLuGxiRvDNfjegSUoMW2hvGUM="}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.2-1":{"author":{"name":"projectmoon","url":"http://www.agnos.is/"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.2-1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.2-1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.2-1","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.4","_defaultsLoaded":true,"dist":{"shasum":"50355fedcf5db801667b2e38cdb74e6dddf9178e","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.2-1.tgz","integrity":"sha512-jPV16mxFjf7md1xL05eR98kucYfM6TqxtuUYOQF+Srd3bM5spgfMHkwkzEs8dxD/E4UVLmLJbhLx+FFuVvzXQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC95+/tqIcomuLOUPdqwpSNKlOmibI/rlThVWtlGipoNgIhANpME3oXSrmAwOv2mnt/1Kb0o2VWiy0Ya0e5u+TkTJn8"}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.2-2":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.2-2","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmJsonOpts":{"file":"/home/jeff/.npm/reed/0.9.2-2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"reed@0.9.2-2","_engineSupported":true,"_npmVersion":"1.0.13","_nodeVersion":"v0.5.4","_defaultsLoaded":true,"dist":{"shasum":"ed25e0e2ffa60accb8328799b3ac6b373c251ba2","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.2-2.tgz","integrity":"sha512-8nwclPkB2JcCzv4u40eYERvyNOr2hbjr/RqkAjrpxvCtcZPXccZySanExinfHKrA1LQhU9D5fEdPqXCncAerVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGidYC2VEUoHOb4vn3Wnhw8pPBpN2LaoIR3rjJH5MYk3AiAl8R0A4W/DDApT9Oc1UBl3ULQcHKOSflZN9aR4dp+CIg=="}]},"scripts":{},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"}},"0.9.3":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.3","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.3","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"223764a246f921c8f472d255330f595a70d08830","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.3.tgz","integrity":"sha512-4+bPmtMEVXCVeiyyz+408rkzVTC7p0ycs+4t9dL1imQHonbK89nDua//nO3hfaso9pvXkUNyQ9T8PtT7H7KDDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVS5uZJJqU4+zZyUWeub58MpGd2Q3tEdmI3Bch26VjGwIhALIY81nKVG1Khzd9qS5EzGBXS187hCQ6SuSikxe5KmQB"}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.4":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.4","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.4","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"5f21f615e048c725b5ee64368b2bd15156abf007","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.4.tgz","integrity":"sha512-Jsq9O4CHL3IfnZmiJgz1bIDdeuCEn2SLHwhMABwgKszTdPEOgkk5nLCTxumEOMwh7mmq4OC4pPLVBvDV6u5DwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFhEJh0mZwZGokhCgIqLOkV5H+ci5R9+X11OjBoQhZqFAiAO7SjJbqf6iDFdgG5KZA8ZkIbftuETCDbLRCk+YALXgw=="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.5":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.5","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.5","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"7aa7c1cd828f37d42cc9444415eb13e1ce783cea","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.5.tgz","integrity":"sha512-okkF5fvU+3cYLg2qS46lpp9Ka7v6QN84KTp3738Li/7KCRCeWqYq+tV7+Mz56ruMsmkoaFr9rGHcgCobjmDVXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFmRn1OqfCbjvLGOGulEbFBnYIkpCnCPBFTbgliQuwmQAiB6Oph++vfonQ3DvSsx9IEc8gm8nM93K0cbICqM44oAqA=="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.5-1":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.5-1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.5-1","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"faf1e02d56a9ebe50ec330f997db7571716eed2d","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.5-1.tgz","integrity":"sha512-ycuJwakFWsuv38EJv/OcOwPrupxpImSw36vMXWnnzzK//aFmleEyV7McSwiVC0P6X5DXc6xB2CN43SlXUvQt8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDjNhIM/g45Xw5twJws1LpJSYTlf3hjteMs2+yLerdptAiEAtI7ITAvf3pKjJf1w40pH9aAkR9Fs0yNdgO/EnFS/4ZA="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.6":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.6","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.6","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"62cf8c8a44259bb656574c15b01c8af788c95218","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.6.tgz","integrity":"sha512-QbqUPZexhHf2hfzXjfJXg6GU29NUICxS+jrmaUS3JeShzDZOjfXUqJus2wa0EighgdVFhmbhubzYmj+AWwnSVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGb+M8BlGH7LYHrAJFvYeByih4eGgHC0KdNeOYcdAnpeAiEAxEOGUPSPESNeijjRcAYWvDqLjhnzFEy8djZGUzE5aww="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.7":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.7","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.7","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"ccd9d0ace35cc0d4e6e1f519be74a1d98d5efb57","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.7.tgz","integrity":"sha512-kXDEoHBXc8mKjYZDqKaCxz5jXYzv9pPvEUHU2yvqA9X0/BUIRIxADuNy2wQmY1ABkNr/pUp5ZjYQE12ztwU3tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGU1U1kywQVbeck8OxMDVG2h8k+ozTxCPsKn20jjZdXhAiAIjrKCbYRNscWX3uJBX3hbQ25M1kAasCmS4zDmVpGorA=="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.8":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.8","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{"vows":""},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.8","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"b6fb3637a5fc746732a12dd3774274ee65899477","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.8.tgz","integrity":"sha512-43A4+W/IlUW4L/RgNxMUn7WFmdwyV4+2JY9hDtf7IThad8fVaUdR3A2uQKgebf70zW+VJ40tV9nTPtrNFZDiAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGzBV992dVV8dXfbyuyvq2eKibPSpuDnruqSC9yPKl4pAiEA6q4Ay1k6a5Q47wXCBaU3nZRVy19IDYNgxKrnWrvDR2s="}]},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.8-1":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.8-1","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{"vows":""},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.8-1","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.4","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"e83cb578e03bbe6d3682a60cde082bb39f1e6f8d","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.8-1.tgz","integrity":"sha512-ugvShVOvFJKi8wlAHfWTJcj4u/QFzTMxvXr2xAEkRtUfqolgv4q9f9SSoGlm5jtjDY9mz3c5TEUDsV/DA0iQ0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9R8LLBq6+1w77JAMO0P/FhaYUQIe35Nkc01LL1QvgHAIhAIXU5VMaMMP1lrFkGyfuI6vOoRqUaCjwU9nw//61vPio"}]},"readme":"reed\n====\n\nA Markdown-based blogging and website core backed by Redis and the\nfilesystem.\n\nFeatures:\n\n* Asynchronously turn all markdown (.md) files in a directory into a blog\n  stored in the hyper-fast Redis database.\n* Turn all markdown files in a (separate) directory into static pages.\n* Files are watched for changes and the Redis store is automagically updated.\n* Transparently access Redis or the filesystem to find a blog post.\n* Markdown metadata to describe your blog posts.\n* Fully event-based programming paradigm.\n\nWhat reed does not do:\n\n* Comments. Use a system like Disqus or roll your own. Comments might be added\n  as a separate library later.\n\nWhat is reed?\n-------------\nReed is a (very) lightweight blogging **core** that turns markdown files in a\ndirectory into a blog. It is **not** a fully featured blogging system. If you\nare looking for that, check out Wheat or another blog engine.\n\nReed is intended for developers who want to integrate simple blogging\nfunctionality into their node.js website or application. It makes as little\nassumptions as possible about your environment in order to give maximum\nflexibility.\n\nHow to use reed\n----------------\nFirst, install it:\n\n`npm install reed`\n\nMake sure Redis 2.2 or greater is also installed and running. After\nRedis and reed are installed, use it thus:\n\n```js\nvar reed = require(\"reed\");\nreed.on(\"ready\", function() {\n\t//ready.\n\treed.get(\"a post\", function(err, metadata, html) {\n\t\t//you have a post.\n\t});\n});\n\nreed.open(\".\"); //looks for .md files in current directory.\n```\n\nIn the above example, .md files will be pulled out of the current directory and\nindexed into the Redis database by the `index` function. After having indexed\nthem, we can `list` the titles in order of post/updated date (that is, last\nmodified date).\n\nConfiguration\n-------------\nReed can connect to Redis running on separate hosts, non-standard\nports or using authentication. This requires the use of the\n`configure` function before calling `open`.\n\n```js\nvar reed = require(\"reed\");\n\n//configure reed to connect to another redis\n//must be done *before* reed.open()\nreed.configure({\n    host: 'some.other.host.org',\n    port: 1337,\n    password: '15qe93rktkf39i4'\n});\n\nreed.on(\"ready\", function() {\n\t//ready.\n\treed.get(\"a post\", function(err, metadata, html) {\n\t\t//you have a post.\n\t});\n});\n\nreed.open(\".\"); //looks for .md files in current directory.\n```\n\nAny property not overridden in the configuration object will use the\nRedis defaults. For example, it is possible to override just the port.\n\nRetrieving Posts\n----------------\nTo retrieve an individual post and its associated metadata, use the `get`\nfunction:\n\n```js\nreed.get(\"First Post\", function(err, metadata, htmlContent) {\n\tconsole.log(JSON.stringify(metadata);\n\tconsole.log(htmlContent);\n});\n```\n\nIf retrieval of the post was successful, `err` will be null. `metadata` will be\nan object containing a `markdown` property that stores the original markdown\ntext, a `lastModified` property that stores the last modified date as UNIX\nepoch time, plus any user-defined information (see below). `htmlContent` will be\nthe post content, converted from markdown to HTML.\n\nIf the post could not be retrieved, `err` will be an object containing error\ninformation (exactly what depends on the error thrown), and other two objects\nwill be `undefined`.\n\nNote that the `get` function will hit the Redis database first, and then look\non the filesystem for a title. So, if you have a new post that has not yet\nbeen indexed, it will get automagically added to the index via `get`.\n\n### Article Naming and Metadata ###\nEvery article in the blog is a markdown file in the specified directory. The\nfilename is considered the \"id\" or \"slug\" of the article, and must be named\naccordingly. Reed article ids must have no spaces. Instead, spaces are mapped\nfrom `-`s:\n\n> \"the first post\" -> the-first-post.md\n\nThese ids are case sensitive, so The-First-Post.md is different than\nthe-first-post.md.\n\n#### Metadata ####\nSimilar to  Wheat, articles support user-defined metadata at the top of the\narticle. These take the form of simple headers. They are transferred into the\nmetadata object as properties.\n\nthe-first-post.md:\n\n```\nTitle: The First Post\nAuthor: me\nSomeOtherField: 123skidoo\n```\n\nThe headers will be accessible thus:\n\n* metadata.title\n* metadata.author\n* metadata.someOtherField\n\nField names can only alphabetical characters. So, \"Some-Other-Field\" is not a\nvalid article header.\n\nNote: starting in 0.9.3, metadata fields are camelCase, rather than all lower\ncase.\n\nBlog API\n--------\nReed exposes the following functions:\n\n* `configure(options)`: Configures reed. The options object can be\n  used to specify connection settings for Redis. Supported settings\n  are `host`, `port` and `password`. Any such configuration must be done\n  *before* calling `open`.\n* `open(dir)`: Opens the given path for reed. When first opened, reed will scan\n  the directory for .md files and add them to redis.\n* `close()`: Closes reed, shuts down the Redis connection, stops watching all\n  .md files, and clears up state.\n* `get(id, callback)`: Retrieves a blog post. The callback receives `error`,\n  `metadata`, and `htmlContent`.\n* `all(callback)`: Retrieves all blog posts. The callback receives `error` and\n  `posts`, which is a list of post objects, each containing `metadata` and\n   `htmlContent` properties.\n* `getMetadata(id, callback)`: Retrieves only the metadata for a blog post. The\n  callback receives `error` (if there was an error), and `metadata`, an object\n  containing the metadata from the blog post.\n* `list(callback)`: Retrieves all post IDs, sorted by last modified date. The\n  callback receives `error` if there was an error, and `titles`, which is a\n  list of post IDs.\n* `remove(id, callback)`: Removes a blog post. The callback receives `error`, if\n  an error occurred.\n* `removeAll(callback)`: Removes all blog posts. The callback is called after\n  all posts have been deleted, and receives `error` if there was an error during\n  deletion. **This deletion is not transactional!**\n* `index(callback)`: Forces a full refresh of the opened directory. This should\n  usually not be necessary, as reed should automatically take care of posts\n  being added and updated. The callback receives `error` if indexing was\n  prematurely interrupted by an error.\n* `refresh()`: Forces a refresh of the Redis index, removing any entries that\n  are no longer present on the filesystem. This should usually not be necessary,\n  as reed should handle this internally.\n  \n**Note**: `get`, `list`, `index`, `remove`, and `removeAll` asynchronously\nblock until reed is in a ready state. This means they can be called before\n`open`, and they will run after opening has completed.\n\nReed exposes the following events:\n\n* `error`: Fired when there is an error in certain internal procedures. Usually,\n  inspecting the error object of callbacks is sufficient.\n* `ready`: Fired when reed has loaded.\n* `add`: Fired when a post is added to the blog. Note: posts updated while reed\n  is not running are currently considered `add` events.\n* `update`: Fired when a blog post is updated while reed is running. Note: posts\n  updated while reed is not running are currently considered `add` events.\n* `remove`: Fired when a blog post is removed (from the filesystem, through an\n  API call, etc). The callback receives the full path of the file that was\n  removed.\n\nPages API\n---------\nReed 0.9 introduces pages functionality. This operates similarly to the blog\nfunctionality. Each page is a markdown file in a specified directory. The main\ndifference is that the pages API is not indexed like blog posts are. There\nare no events exposed by the pages API, and there is no way to get a list of\nall pages in the system.\n\nThis functionality is useful for static pages on a website. A simple example,\nusing [Express](http://www.expressjs.com) to send the HTML of a reed page to\na user:\n\n```javascript\napp.get('/pages/:page', function(req, res) {\n\treed.pages.get(req.params.page, function(err, metadata, htmlContent) {\n\t\t//In a real scenario, you should use a view\n\t\t//and make use of the metadata object.\n\t\tif (err) {\n\t\t\tres.send('There was an error: ' + JSON.stringify(err));\n\t\t}\n\t\telse {\n\t\t\tres.send(htmlContent);\n\t\t}\n\t});\n});\n```\n\nThe pages API is contained within the `pages` namespace:\n\n* `pages.open(dir, callback)`: Opens the given path for reed pages. This\n  directory should be separate from the blog directory. Calling open()\n  more than once will cause it to throw an error. The callback is called once\n  the page system is running.\n* `pages.get(title, callback)`: Attempts to find the page with the given title.\n  The  callback receives `error`, `metadata`, and `htmlContent`, as in the\n  regular `get` method.\n* `pages.remove(title, callback)`: Removes the specified page, deleting it from\n  Redis and the filesystem.\n* `pages.close()`: Closes the pages portion of reed.\n\nContributors\n============\nThese people have contributed to the development of reed in some way or another:\n\n* [ProjectMoon](https://github.com/ProjectMoon): primary author.\n* [algesten](https://github.com/algesten): bug fixes and redis conf.\n\nLicense\n=======\nMIT License. Detailed in the LICENSE file.\n","maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]},"0.9.8-2":{"author":{"name":"ProjectMoon"},"name":"reed","email":"rei@thermetics.net","description":"Redis + markdown blogging/website core","tags":["redis","blog"],"version":"0.9.8-2","homepage":"http://www.agnos.is/","repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"},"engines":{"node":">= 0.4.0"},"directories":{"lib":"./lib"},"main":"./lib/reed.js","dependencies":{"redis":"","node-markdown":"","async":""},"devDependencies":{"vows":""},"_npmUser":{"name":"projectmoon","email":"rei@thermetics.net"},"_id":"reed@0.9.8-2","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.4","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"6708961e7f2555908ded5137b844799275d41ac8","tarball":"https://registry.npmjs.org/reed/-/reed-0.9.8-2.tgz","integrity":"sha512-ZHTjHSozcOaKVYOktBK8lRQeS01bCvPZhPAHQYa7pDCPTZxpF9R7SMNb/wVQ9jv6Q+kj/jr02bybsWqIX5Ak3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBDy5MKJURVaQLKg8hUkt6wVMMtVT5TW/Mm+7qIbOnEAIgK1rt7C62kPwCvJJMO0P9rv7KvcsOSV+zGGlpKerdPZc="}]},"readme":"reed\n====\n\nA Markdown-based blogging and website core backed by Redis and the\nfilesystem.\n\nFeatures:\n\n* Asynchronously turn all markdown (.md) files in a directory into a blog\n  stored in the hyper-fast Redis database.\n* Turn all markdown files in a (separate) directory into static pages.\n* Files are watched for changes and the Redis store is automagically updated.\n* Transparently access Redis or the filesystem to find a blog post.\n* Markdown metadata to describe your blog posts.\n* Fully event-based programming paradigm.\n\nWhat reed does not do:\n\n* Comments. Use a system like Disqus or roll your own. Comments might be added\n  as a separate library later.\n\nWhat is reed?\n-------------\nReed is a (very) lightweight blogging **core** that turns markdown files in a\ndirectory into a blog. It is **not** a fully featured blogging system. If you\nare looking for that, check out Wheat or another blog engine.\n\nReed is intended for developers who want to integrate simple blogging\nfunctionality into their node.js website or application. It makes as little\nassumptions as possible about your environment in order to give maximum\nflexibility.\n\nHow to use reed\n----------------\nFirst, install it:\n\n`npm install reed`\n\nMake sure Redis 2.2 or greater is also installed and running. After\nRedis and reed are installed, use it thus:\n\n```js\nvar reed = require(\"reed\");\nreed.on(\"ready\", function() {\n\t//ready.\n\treed.get(\"a post\", function(err, metadata, html) {\n\t\t//you have a post.\n\t});\n});\n\nreed.open(\".\"); //looks for .md files in current directory.\n```\n\nIn the above example, .md files will be pulled out of the current directory and\nindexed into the Redis database by the `index` function. After having indexed\nthem, we can `list` the titles in order of post/updated date (that is, last\nmodified date).\n\nConfiguration\n-------------\nReed can connect to Redis running on separate hosts, non-standard\nports or using authentication. This requires the use of the\n`configure` function before calling `open`.\n\n```js\nvar reed = require(\"reed\");\n\n//configure reed to connect to another redis\n//must be done *before* reed.open()\nreed.configure({\n    host: 'some.other.host.org',\n    port: 1337,\n    password: '15qe93rktkf39i4'\n});\n\nreed.on(\"ready\", function() {\n\t//ready.\n\treed.get(\"a post\", function(err, metadata, html) {\n\t\t//you have a post.\n\t});\n});\n\nreed.open(\".\"); //looks for .md files in current directory.\n```\n\nAny property not overridden in the configuration object will use the\nRedis defaults. For example, it is possible to override just the port.\n\nRetrieving Posts\n----------------\nTo retrieve an individual post and its associated metadata, use the `get`\nfunction:\n\n```js\nreed.get(\"First Post\", function(err, metadata, htmlContent) {\n\tconsole.log(JSON.stringify(metadata);\n\tconsole.log(htmlContent);\n});\n```\n\nIf retrieval of the post was successful, `err` will be null. `metadata` will be\nan object containing a `markdown` property that stores the original markdown\ntext, a `lastModified` property that stores the last modified date as UNIX\nepoch time, plus any user-defined information (see below). `htmlContent` will be\nthe post content, converted from markdown to HTML.\n\nIf the post could not be retrieved, `err` will be an object containing error\ninformation (exactly what depends on the error thrown), and other two objects\nwill be `undefined`.\n\nNote that the `get` function will hit the Redis database first, and then look\non the filesystem for a title. So, if you have a new post that has not yet\nbeen indexed, it will get automagically added to the index via `get`.\n\n### Article Naming and Metadata ###\nEvery article in the blog is a markdown file in the specified directory. The\nfilename is considered the \"id\" or \"slug\" of the article, and must be named\naccordingly. Reed article ids must have no spaces. Instead, spaces are mapped\nfrom `-`s:\n\n> \"the first post\" -> the-first-post.md\n\nThese ids are case sensitive, so The-First-Post.md is different than\nthe-first-post.md.\n\n#### Metadata ####\nSimilar to  Wheat, articles support user-defined metadata at the top of the\narticle. These take the form of simple headers. They are transferred into the\nmetadata object as properties.\n\nthe-first-post.md:\n\n```\nTitle: The First Post\nAuthor: me\nSomeOtherField: 123skidoo\n```\n\nThe headers will be accessible thus:\n\n* metadata.title\n* metadata.author\n* metadata.someOtherField\n\nField names can only alphabetical characters. So, \"Some-Other-Field\" is not a\nvalid article header.\n\nNote: starting in 0.9.3, metadata fields are camelCase, rather than all lower\ncase.\n\nBlog API\n--------\nReed exposes the following functions:\n\n* `configure(options)`: Configures reed. The options object can be\n  used to specify connection settings for Redis. Supported settings\n  are `host`, `port` and `password`. Any such configuration must be done\n  *before* calling `open`.\n* `open(dir)`: Opens the given path for reed. When first opened, reed will scan\n  the directory for .md files and add them to redis.\n* `close()`: Closes reed, shuts down the Redis connection, stops watching all\n  .md files, and clears up state.\n* `get(id, callback)`: Retrieves a blog post. The callback receives `error`,\n  `metadata`, and `htmlContent`.\n* `all(callback)`: Retrieves all blog posts. The callback receives `error` and\n  `posts`, which is a list of post objects, each containing `metadata` and\n   `htmlContent` properties.\n* `getMetadata(id, callback)`: Retrieves only the metadata for a blog post. The\n  callback receives `error` (if there was an error), and `metadata`, an object\n  containing the metadata from the blog post.\n* `list(callback)`: Retrieves all post IDs, sorted by last modified date. The\n  callback receives `error` if there was an error, and `titles`, which is a\n  list of post IDs.\n* `remove(id, callback)`: Removes a blog post. The callback receives `error`, if\n  an error occurred.\n* `removeAll(callback)`: Removes all blog posts. The callback is called after\n  all posts have been deleted, and receives `error` if there was an error during\n  deletion. **This deletion is not transactional!**\n* `index(callback)`: Forces a full refresh of the opened directory. This should\n  usually not be necessary, as reed should automatically take care of posts\n  being added and updated. The callback receives `error` if indexing was\n  prematurely interrupted by an error.\n* `refresh()`: Forces a refresh of the Redis index, removing any entries that\n  are no longer present on the filesystem. This should usually not be necessary,\n  as reed should handle this internally.\n  \n**Note**: `get`, `list`, `index`, `remove`, and `removeAll` asynchronously\nblock until reed is in a ready state. This means they can be called before\n`open`, and they will run after opening has completed.\n\nReed exposes the following events:\n\n* `error`: Fired when there is an error in certain internal procedures. Usually,\n  inspecting the error object of callbacks is sufficient.\n* `ready`: Fired when reed has loaded.\n* `add`: Fired when a post is added to the blog. Note: posts updated while reed\n  is not running are currently considered `add` events.\n* `update`: Fired when a blog post is updated while reed is running. Note: posts\n  updated while reed is not running are currently considered `add` events.\n* `remove`: Fired when a blog post is removed (from the filesystem, through an\n  API call, etc). The callback receives the full path of the file that was\n  removed.\n\nPages API\n---------\nReed 0.9 introduces pages functionality. This operates similarly to the blog\nfunctionality. Each page is a markdown file in a specified directory. The main\ndifference is that the pages API is not indexed like blog posts are. There\nare no events exposed by the pages API, and there is no way to get a list of\nall pages in the system.\n\nThis functionality is useful for static pages on a website. A simple example,\nusing [Express](http://www.expressjs.com) to send the HTML of a reed page to\na user:\n\n```javascript\napp.get('/pages/:page', function(req, res) {\n\treed.pages.get(req.params.page, function(err, metadata, htmlContent) {\n\t\t//In a real scenario, you should use a view\n\t\t//and make use of the metadata object.\n\t\tif (err) {\n\t\t\tres.send('There was an error: ' + JSON.stringify(err));\n\t\t}\n\t\telse {\n\t\t\tres.send(htmlContent);\n\t\t}\n\t});\n});\n```\n\nThe pages API is contained within the `pages` namespace:\n\n* `pages.open(dir, callback)`: Opens the given path for reed pages. This\n  directory should be separate from the blog directory. Calling open()\n  more than once will cause it to throw an error. The callback is called once\n  the page system is running.\n* `pages.get(title, callback)`: Attempts to find the page with the given title.\n  The  callback receives `error`, `metadata`, and `htmlContent`, as in the\n  regular `get` method.\n* `pages.remove(title, callback)`: Removes the specified page, deleting it from\n  Redis and the filesystem.\n* `pages.close()`: Closes the pages portion of reed.\n\nContributors\n============\nThese people have contributed to the development of reed in some way or another:\n\n* [ProjectMoon](https://github.com/ProjectMoon): primary author.\n* [algesten](https://github.com/algesten): bug fixes and redis conf.\n\nLicense\n=======\nMIT License. Detailed in the LICENSE file.\n","maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}]}},"maintainers":[{"name":"projectmoon","email":"rei@thermetics.net"}],"time":{"modified":"2022-06-26T10:34:51.563Z","created":"2011-06-16T14:13:15.952Z","0.0.2":"2011-12-07T15:33:55.335Z","0.0.3":"2011-12-07T15:33:55.335Z","0.0.4":"2011-12-07T15:33:55.335Z","0.0.3-1":"2011-06-19T12:50:36.965Z","0.0.4-1":"2011-12-07T15:33:55.335Z","0.0.4-2":"2011-12-07T15:33:55.335Z","0.0.4-3":"2011-12-07T15:33:55.335Z","0.0.4-4":"2011-12-07T15:33:55.335Z","0.0.4-5":"2011-12-07T15:33:55.335Z","0.0.4-6":"2011-12-07T15:33:55.335Z","0.0.5":"2011-12-07T15:33:55.335Z","0.9.0":"2011-12-07T15:33:55.335Z","0.9.1":"2011-12-07T15:33:55.335Z","0.9.1-1":"2011-12-07T15:33:55.335Z","0.9.2":"2011-12-07T15:33:55.335Z","0.9.2-1":"2011-12-07T15:33:55.335Z","0.9.2-2":"2011-12-07T15:33:55.335Z","0.9.3":"2011-12-07T15:35:48.285Z","0.9.4":"2011-12-07T18:50:23.446Z","0.9.5":"2011-12-07T18:52:34.085Z","0.9.5-1":"2011-12-07T19:09:41.501Z","0.9.6":"2011-12-12T16:45:33.571Z","0.9.7":"2011-12-12T21:28:12.792Z","0.9.8":"2012-02-01T17:09:49.612Z","0.9.8-1":"2012-03-12T15:34:42.510Z","0.9.8-2":"2012-03-12T15:35:38.922Z"},"author":{"name":"ProjectMoon"},"repository":{"type":"git","url":"git://github.com/ProjectMoon/reed.git"}}