{"id":18863,"library":"transmute-framework","title":"Transmute Framework","description":"Transmute Framework is a JavaScript library for building decentralized applications on Ethereum and IPFS. It converts JavaScript objects to IPFS hashes and stores them on Ethereum smart contracts, enabling immutable event logs and event-sourced models. The latest stable version is 0.9.3, released after a major refactor adding JOSE/COSE/SCITT support. The project appears to be in active development but with infrequent releases (major versions months apart). Key differentiators include Redux-like event stream processing, built-in EventStore contracts, and support for multiple environments (local Ganache, Minikube, cloud). Alternative frameworks like Truffle and Embark offer broader dApp development features but less focus on event sourcing and IPFS integration.","status":"active","version":"0.2.5","language":"javascript","source_language":"en","source_url":"ssh://git@github.com/transmute-industries/transmute","tags":["javascript","transmute"],"install":[{"cmd":"npm install transmute-framework","lang":"bash","label":"npm"},{"cmd":"yarn add transmute-framework","lang":"bash","label":"yarn"},{"cmd":"pnpm add transmute-framework","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Required for Ethereum interaction (smart contracts, accounts).","package":"web3","optional":false},{"reason":"Required for IPFS daemon communication to store and retrieve data.","package":"ipfs-http-client","optional":false},{"reason":"Used for contract abstraction and management.","package":"truffle-contract","optional":true}],"imports":[{"note":"Package is ESM-only as of v0.9.x. CommonJS require may not work.","wrong":"const EventStore = require('transmute-framework');","symbol":"EventStore","correct":"import { EventStore } from 'transmute-framework';"},{"note":"Named export, not default. Also available via CJS destructuring but ESM recommended.","wrong":"const EventStoreFactory = require('transmute-framework').EventStoreFactory;","symbol":"EventStoreFactory","correct":"import { EventStoreFactory } from 'transmute-framework';"},{"note":"TypeScript type/interface export, not a default export. Use type import if needed.","wrong":"import TransmuteConfig from 'transmute-framework';","symbol":"TransmuteConfig","correct":"import { TransmuteConfig } from 'transmute-framework';"}],"quickstart":{"code":"// Install dependencies\n// npm i transmute-framework web3 ipfs-http-client\n\nimport { EventStore, EventStoreFactory } from 'transmute-framework';\nimport Web3 from 'web3';\nimport ipfsHttpClient from 'ipfs-http-client';\n\n// Configuration for local Ganache and IPFS\nconst transmuteConfig = {\n  ipfsConfig: {\n    host: '127.0.0.1',\n    port: 5001,\n    protocol: 'http'\n  },\n  web3Config: {\n    providerUrl: 'http://127.0.0.1:8545'\n  }\n};\n\n// Initialize EventStore contract\nconst eventStore = new EventStore({\n  eventStoreArtifact: require('./build/contracts/EventStore.json'),\n  ...transmuteConfig\n});\n\nasync function main() {\n  await eventStore.init();\n  const accounts = await eventStore.web3.eth.getAccounts();\n\n  // Write an event\n  const event = {\n    key: {\n      type: 'ACCOUNT_CREATED',\n      value: accounts[0]\n    },\n    value: {\n      name: 'Alice'\n    }\n  };\n  await eventStore.write(accounts[0], event.key, event.value);\n\n  // Read events\n  const events = await eventStore.getSlice(0, 10);\n  console.log('Events:', events);\n}\n\nmain().catch(console.error);","lang":"typescript","description":"Initializes EventStore with local Ganache and IPFS, writes a key-value event, and reads event slice."},"warnings":[{"fix":"Update imports and config to new schema documented in migration guide.","message":"BREAKING CHANGE: Major refactor in v0.9.0 - renamed several exports and changed IPFS/Ethereum configuration schema.","severity":"breaking","affected_versions":">=0.9.0"},{"fix":"Use import syntax or run Node with --experimental-modules flag.","message":"BREAKING CHANGE: v0.9.0 switched to ESM-only exports. CommonJS require() will not work in Node.js without ESM flags.","severity":"breaking","affected_versions":">=0.9.0"},{"fix":"Replace callback pattern with await createEventStore(account).","message":"DEPRECATED: EventStoreFactory.createEventStore() no longer accepts a callback; use async/await.","severity":"deprecated","affected_versions":">=0.9.0"},{"fix":"Encrypt data before passing to EventStore.write(). Use libraries like crypto-js.","message":"Encryption is not handled by the framework. Sensitive data stored on Ethereum/IPFS is public.","severity":"gotcha","affected_versions":"all"},{"fix":"Run truffle migrate before using EventStore. Check contract address.","message":"EventStore contract must be deployed first via migration or EventStoreFactory; writes will fail if contract not found.","severity":"gotcha","affected_versions":"all"},{"fix":"Verify IPFS daemon and Ganache are running, and ports match transmuteConfig.","message":"IPFS and Ethereum nodes must be running and accessible; errors with 'connect ECONNREFUSED' indicate misconfiguration.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Run npm install transmute-framework and ensure import path is correct.","cause":"Package not installed or import path incorrect.","error":"Error: Cannot find module 'transmute-framework'"},{"fix":"Use import { EventStore } from 'transmute-framework'; for ESM.","cause":"Using wrong import style (e.g., require instead of import).","error":"Error: EventStore is not a constructor"},{"fix":"Await eventStore.init() before calling write().","cause":"EventStore not initialized properly (init() not called).","error":"Error: write is not a function"},{"fix":"Start ipfs daemon and check ipfsConfig host/port.","cause":"IPFS daemon not running or wrong port.","error":"Error: connect ECONNREFUSED 127.0.0.1:5001"},{"fix":"Check EventStore contract address and event structure; ensure account is owner.","cause":"Contract call reverted (e.g., invalid event format or not owner).","error":"Error: Returned error: VM Exception while processing transaction: revert"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}