Migrate from Strapi to MeshBase

Switch from self-hosted Strapi complexity to MeshBase simplicity. This guide covers exporting your Strapi content and importing it to MeshBase.

Why Switch from Strapi?

🚫No Server Management

Strapi requires hosting, updates, security patches. MeshBase is fully managedβ€”we handle infrastructure.

⚑Better Performance

MeshBase API is faster. No database queries to optimize, no server to scale.

πŸ”’Security Included

No need to secure your own server. MeshBase handles authentication, rate limiting, and DDoS protection.

πŸ’°Lower Total Cost

When you factor in hosting, maintenance, and developer time, MeshBase is more cost-effective.

Migration Steps

1

Export from Strapi

Use Strapi's export plugin or database export

2

Transform Schemas

Convert Strapi content types to MeshBase format

3

Import to MeshBase

Use MeshBase API to create content and entries

Export from Strapi

Option 1: Export Plugin

npm install strapi-plugin-import-export-entries
# Configure in Strapi admin, then export your content

Option 2: Database Export

For PostgreSQL/MySQL:

# PostgreSQL
pg_dump strapi_db > strapi_export.sql

# MySQL
mysqldump -u user -p strapi_db > strapi_export.sql

Option 3: API Export Script

// export-strapi.js
const axios = require('axios');
const fs = require('fs');

async function exportStrapi() {
  const types = ['articles', 'pages', 'products']; // Your content types
  const data = {};
  
  for (const type of types) {
    const response = await axios.get(`http://localhost:1337/api/${type}`, {
      headers: { Authorization: `Bearer YOUR_TOKEN` }
    });
    data[type] = response.data.data;
  }
  
  fs.writeFileSync('strapi-export.json', JSON.stringify(data, null, 2));
  console.log('βœ… Strapi data exported!');
}

exportStrapi();

Transform to MeshBase Format

// transform.js
const fs = require('fs');
const strapiData = JSON.parse(fs.readFileSync('strapi-export.json', 'utf8'));

const meshbaseData = {};

// Transform each content type
for (const [contentType, entries] of Object.entries(strapiData)) {
  meshbaseData[contentType] = entries.map(entry => {
    const { id, attributes, ...rest } = entry;
    
    // Flatten Strapi's nested structure
    return {
      ...attributes,
      // Handle relations
      ...transformRelations(attributes),
      // Handle media
      ...transformMedia(attributes)
    };
  });
}

function transformRelations(attrs) {
  const result = {};
  for (const [key, value] of Object.entries(attrs)) {
    if (value?.data) {
      // Strapi relation format
      result[key] = Array.isArray(value.data) 
        ? value.data.map(r => r.id)
        : value.data.id;
    }
  }
  return result;
}

function transformMedia(attrs) {
  const result = {};
  for (const [key, value] of Object.entries(attrs)) {
    if (value?.data?.attributes?.url) {
      // Strapi media format - you'll need to upload these to MeshBase
      result[key] = value.data.attributes.url;
    }
  }
  return result;
}

fs.writeFileSync('meshbase-import.json', JSON.stringify(meshbaseData, null, 2));
console.log('βœ… Data transformed for MeshBase!');

Import to MeshBase

Create content types

First, create matching content types in MeshBase dashboard or via API.

Import entries

// import-to-meshbase.js
const data = require('./meshbase-import.json');

const API_URL = 'https://api.meshbase.io/v1';
const API_KEY = 'your-admin-key';

async function importToMeshBase() {
  for (const [contentType, entries] of Object.entries(data)) {
    console.log(`Importing ${entries.length} ${contentType}...`);
    
    for (const entry of entries) {
      await fetch(`${API_URL}/${contentType}`, {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${API_KEY}`,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(entry)
      });
    }
  }
  console.log('βœ… Import complete!');
}

importToMeshBase();

Field Type Mapping

StrapiMeshBase
stringtext
textrichtext
richtextrichtext
numbernumber
date/datetimedatetime
booleanboolean
mediamedia
relationrelation
jsonjson

After Migration

πŸŽ‰

Migration Complete!

Once migrated, you can decommission your Strapi server and save on hosting costs. No more server maintenance!

  • β†’Update API endpoints in your application
  • β†’Test all content displays correctly
  • β†’Set up MeshBase webhooks for deployments
  • β†’Shut down Strapi server and celebrate! 🎊