Skip to content

Releases: ByteSendApp/ByteSend

v0.9.3 - Random Patches

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 21 Oct 04:20
c82a00f

Added

  • Receive on the domain itself: as well as a subdomain like reply.acme.com, a domain can now receive at anything@acme.com. Because that sends all of the domain's mail to ByteSend, setup shows where its mail goes today (Google Workspace, Microsoft 365 and so on) and asks you to confirm first

Changed

  • Homepage: the full pricing section and comparison table are replaced by a short pricing summary linking to /pricing, and an Explore section linking to receiving, the SMTP relay, the free tools, open source, security and the comparison

v0.9.2: Merge pull request #58 from ByteSendApp/develop

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 21 Oct 03:32
6e3b3de

Added

  • Pricing page at /pricing: the plan cards and calculator, plus every plan limit side by side, what's included on every plan, and a pricing FAQ
  • Compare page at /compare: the full feature comparison with Resend, SendGrid, Postmark and Amazon SES, when each is the better fit, and how to switch
  • Receiving page at /receiving: how receiving works, what people build with it (reply by email, invoice parsing, support inboxes, polling the API) and each plan's allowance
  • Free DMARC checker at /tools/dmarc: check any domain's DMARC record, see what's wrong in plain language, and get a record to publish
  • Free SPF and DKIM checkers at /tools/spf and /tools/dkim, with a /tools page listing all three. SPF counts DNS lookups through every include against the limit of 10; DKIM finds keys under common selectors and checks their strength
  • SMTP relay page at /smtp: connection settings and ready-to-paste setup for Node, Laravel, Django, Rails and WordPress
  • Open source page at /open-source: what the AGPL means for you, how to run ByteSend yourself, and how cloud and self-hosted compare
  • Security page at /security: how your account, email and data are protected, who processes your data, and how to report a vulnerability
  • Receiving in the TypeScript SDK (bytesend-js 0.2.0): bytesend.inbound.list(), get() and downloadAttachment(), with email.received webhooks verified and typed through bytesend.webhooks()

Changed

  • The website footer is grouped into Product, Features, Free tools, Resources and Company

Fixed

  • The DPA and privacy policy list the same sub-processors: NodeByte Hosting, Amazon Web Services (now including S3 for received email), Stripe and Simple Analytics

v0.9.1: Merge pull request #57 from ByteSendApp/develop

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 21 Oct 02:24
a4219f4

Added

  • Receiving on the stats page: emails received, DMARC reports read and the messages they covered over the last 30 days, with a daily chart
  • Receiving health check at /api/health/inbound for status pages. A test email is sent to a hosted address every 10 minutes, so the check covers the whole receiving path, along with the receipt rule and the processing queue

Fixed

  • The website no longer stops responding to taps on phones while the homepage loads. Code samples are now highlighted on the server instead of in the browser

v0.9.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 21 Oct 01:58

Added

  • Receiving email:
    • Every team gets a hosted address that works without DNS changes, with +tags to tell senders apart
    • Receive on a subdomain of your own domain (for example reply.acme.com) by adding one MX record
    • New Inbox page with the message, attachments, headers and SPF, DKIM, DMARC, spam and virus results
    • New email.received webhook event, with signed attachment links that last an hour
    • GET /v1/inbound/emails and GET /v1/inbound/emails/{id} in the API
    • Replies to email you sent are linked to the original through inReplyToEmailId
    • Forwarding rules for an address, a local part or everything
    • Monthly allowances on every plan (from 1,000 on Free to 250,000 on Scale); mail is kept for 30 days
    • The local SES emulator can deliver test mail to ByteSend
  • DMARC reports:
    • Every team gets a report address; add it to your domain's DMARC record and providers' daily reports are read automatically
    • New DMARC page: pass rate over time, every server sending as your domains (ByteSend's own traffic marked), and each report in full
    • The setup tab shows your current DMARC record and the exact record to publish, keeping your existing policy
    • Reports don't count toward your receiving allowance and are kept for 90 days
  • Test mode:
    • Create test API keys (bs_test_...) that never send: emails appear in the dashboard marked Test
    • Deliveries, bounces and complaints are simulated with real webhooks (flagged "test": true), chosen by the recipient address
    • Works before your domain is verified, and doesn't touch usage, bounce rates or suppressions
  • Email page: every email has its own page at /emails/<id> with a larger preview (desktop and mobile widths), all recipients, the domain, campaign and API key it came from, its events, and any replies received in your inbox
  • Set up DNS on Cloudflare: paste a Cloudflare API token on a domain's page and ByteSend adds the records for you. Existing MX, SPF and DMARC records are never overwritten, and the token isn't stored
  • Website: the pricing, features and comparison sections now cover receiving, DMARC reports and test mode, and the homepage has a new backdrop drawn from the ByteSend mark

Fixed

  • Batch sends now respect an API key's domain restriction
  • Pages no longer run off the right edge on phones: cards and sections fit the screen, and long IDs and file names wrap or are shortened
  • Moving a domain that receives email to another sending region keeps receiving working: the identity it receives through is kept, and removed when receiving is turned off or the domain is deleted
  • Deleting a domain works again when its Amazon SES identity is already gone, shows an error if it fails, and accepts the name typed in any case (phone keyboards capitalise it)
  • Verify again on a verified domain now re-checks its DNS straight away, updates the problem banner, and says what it found. Record rows show a problem the DNS monitor found instead of an old "Verified"
  • Moving a domain to another region now waits until its MX record points at the new region. Before, a move could finish with the MX still on the old region, which sent bounces and complaints to the wrong place
  • Installing the repo with pnpm 9 no longer fails on Prisma Studio's pnpm 8 requirement, so the web tests run in CI again

v0.8.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 20 Oct 08:45
af9a17a

Changed

  • Redesigned dashboard, admin and website:
    • One consistent look throughout: denser tables, clearer page headers, stat strips and status badges with consistent meanings
    • Settings now lives in the main sidebar
    • A ⌘K search to jump to any page or domain
    • Breadcrumbs that show names instead of IDs
    • Error and not-found pages that keep you in the app
    • New sign-in and account screens
    • The email editor shows emails at inbox width on a white page
    • The home page shows a live preview of the product instead of an old screenshot
    • Pricing cards in USD, GBP or EUR, and a full site footer
  • Domains show their sending region by name and their sent volume and bounce rate for the last 30 days
  • Unsubscribe and confirm-subscription pages are plainer and unbranded, since your subscribers see them

Added

  • Local SES and SNS emulator (packages/local-ses-sns), ByteSend's own replacement for the upstream image: answers the SES, SNS and STS calls ByteSend makes, verifies every domain straight away, sends real delivery, bounce and complaint events (via SES's simulator addresses or +bounce / +complaint), and shows captured mail at http://localhost:5350. Published as bytesend/local-ses-sns with the other images

Fixed

  • Saving a template failed with "ctx is not defined"
  • Self-hosted system emails (invites, sign-in) now send from a verified domain; they checked for statuses that don't exist and always used the first domain
  • pnpm dx:up failed because the minio/minio and bytesend/local-ses-sns images don't exist. It now starts only Postgres, Redis and the local SES emulator; RustFS storage and the containerised app are opt-in profiles. New pnpm dev:local and pnpm dx:migrate use .env.local, so local development no longer has to run against production

v0.7.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 20 Oct 02:10
263d8ea

Added

  • Dashboard overview: the dashboard home now opens with a getting-started checklist, sending status (and exactly why sending is limited, when it is), usage against the monthly and daily limits, 7-day bounce and complaint rates against the pause thresholds, domain health and recent emails, above the existing analytics
  • Domain DNS monitoring: verified domains are re-checked twice a day, and if their DKIM, SPF or MAIL FROM records change, team admins are emailed (once the problem shows on two checks in a row) and again when it's fixed. The domain page shows the problem while it lasts
  • Usage alerts for paid plans: teams on paid plans are told at 80% and 100% of the emails included in their plan, once each per month
  • Team notifications work: Discord, Slack, Teams, Telegram and webhook providers now receive events. Previously nothing was ever sent to them. Domain verified/failed, DNS problems, usage alerts and campaign started/completed go to every provider. Per-email events (sent, delivered, bounced, complained, opened, clicked) and contact events are opt-in per provider and capped at 20 per minute per provider, so a busy team can't flood a channel
  • Domain age: new sending domains are looked up over RDAP. Domains registered in the last 30 days score higher in spam protection, and admins are alerted when one is added
  • Admins can approve a new team's sending early from the team page
  • Scale plan: $90/mo with 500,000 emails included, 30 domains and 50 team members, and the lowest overage rates
  • Local prices and tax: Checkout shows set prices in pounds and euros for UK and European customers, and can add VAT and sales tax with Stripe Tax (STRIPE_AUTOMATIC_TAX=true), including VAT number collection for businesses

Changed

  • New pricing, now in US dollars: Starter (was Hobby) $5/mo for 25,000 emails, Pro $20/mo for 100,000 and Scale $90/mo for 500,000, with lower overage rates. Existing subscribers keep the price they signed up at
  • Free plan now includes 5,000 emails a month and 200 a day (was 12,500 a month and 5,000 a day)
  • Lite and Lifetime are no longer sold. Teams already on them keep their plan, limits and price
  • New-account limit: free teams can send 50 emails a day during their first 7 days. Paying teams, custom plans and admin-approved teams are exempt
  • The admin panel now uses the main sidebar for its sections instead of a second navigation column
  • "Analytics" in the sidebar is now "Overview"
  • New logo: the Ribbon (an envelope inside a send arrow) is the main logo, and the Send B monogram is the app icon, favicon and team badge. Both are in public/brand/ as SVGs, wordmarks, app icons and avatars

Fixed

  • A subscription's plan is read from its Stripe price, so re-seeding Stripe prices can no longer drop an existing subscriber to the free plan
  • Changing plan in the Stripe customer portal now moves the overage prices to the new plan too. Previously only the monthly price changed, so extra emails kept being billed at the old plan's rates
  • Removed the unused stripe-integration.ts, which no longer compiled
  • docker/prod/compose.yml and the Docker README pulled bytesend/web and bytesend/smtp, which don't exist; they now use the published bytesend/bytesend and bytesend/smtp-proxy images
  • The plans docs listed out-of-date limits and prices (including a 100 emails/month free tier, missing Hobby and Lite plans, and annual billing that isn't offered); they now match the plans in the app
  • Sheets and dialogs on phones no longer run off the edge of the screen, and tall dialogs scroll instead of overflowing
  • The logo in the site header, footer, sidebar, login, profile setup and loading screens is now the crisp vector mark, instead of an image with a dark tile baked in
  • Errors from notification provider settings (e.g. "Provider not found", invalid webhook URLs) now reach the dashboard and API with their message instead of an empty error

v0.6.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 19 Oct 20:10
40e8766

Added

  • Discord bot auto-roles and event log: new members get the Members role (after accepting the rules) and bots get the Bots role; joins, leaves, member and role changes, bans, deleted, edited and bulk-deleted messages, channels, threads, roles, invites and voice activity are logged to EVENT_LOG_CHANNEL_ID
  • Blocklist (Admin → Blocklist) for email addresses, email domains and sending domains. Blocked addresses can't sign up, become an account email or a backup email, and blocked sending domains (and their subdomains) can't be added by any team
  • Ban evasion detection: banning a user now opens a dialog that blocks their email addresses (including + and Gmail dot aliases), optionally blocks their sending domains, and offers to ban related accounts. The users list flags Ban evasion (same mailbox as a banned user) and Possible evasion (same name), and each user page lists related accounts. Unbanning removes what the ban blocked. Users banned before this release have their addresses blocked automatically
  • Admins get a Discord alert when a blocked sign-up is refused, and when a domain on a shared namespace is added

Security

  • Sending domains on dynamic-DNS, tunnel and free-hosting services (DynDNS, No-IP, DuckDNS, ngrok, github.io, vercel.app and similar) can no longer be added on ByteSend Cloud, and email from such hostnames is held for review
  • Spam protection recognises phishing phrases in German, French, Spanish, Italian and Dutch, and more impersonated brands (eBay, Kleinanzeigen, European banks and couriers)

Fixed

  • Signing in by email with a banned or blocked address now shows why, instead of claiming a sign-in link was sent

v0.5.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 19 Oct 16:03
91c33ff

Added

  • ByteSend Discord bot (apps/discord-bot, Go) for the support server:
    • Presence mirrors status.bytesend.cloud
    • Commands: /docs, /faq, /status, /stats, /links and /roles
    • Moderation: /purge, /warn, /timeout, /untimeout, /kick and /ban, with a mod log; they refuse to act on anyone whose top role is at or above the moderator's
    • AutoMod for invite links, mass mentions and repeated messages
    • Automatic FAQ answers in support channels
    • Custom emojis from the application
  • GET /api/stats (Cloud only): the open stats as JSON, cached for an hour
  • Discord linked roles: members connect their ByteSend account at /api/discord/linked-roles to claim roles based on having an account, being on a paid plan, emails sent, or account age. Enable with DISCORD_LINKED_ROLES_CLIENT_ID and DISCORD_LINKED_ROLES_CLIENT_SECRET

v0.4.4

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 19 Oct 15:15
9886232

Added

  • Delivery callback diagnostics on Admin → SES regions: per region, the SNS subscription state and endpoint, each configuration set's event destination, when the last callback arrived, and any callbacks rejected for an unknown topic, with a one-click Repair that resubscribes this site's callback URL and re-enables or re-points broken event destinations

Fixed

  • Adding an SES region with the full callback URL (as the old "Callback URL" label suggested) no longer produces /api/ses_callback/api/ses_callback; the field is now labelled "Site URL" and either form is accepted
  • Sent counts in analytics no longer depend on SES callbacks: an email is counted when ByteSend hands it to SES, so totals stay accurate even if SNS notifications stop arriving

Changed

  • Node.js SDK 0.1.4: package metadata points at the new ByteSendApp/ByteSend repository, and releases publish from it with provenance

v0.4.3

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 19 Oct 14:25
8d341dc

Added

  • S3_COMPATIBLE_REGION sets the storage bucket's region. AWS S3 needs the bucket's real region (e.g. us-east-1); R2 and MinIO keep working with the default auto
  • Python SDK 0.1.3: client.campaigns.delete(), matching the Node.js and Go SDKs
  • Go SDK 0.3.3: ErrorResponse now includes the HTTP StatusCode

Changed

  • ByteSend now lives at github.com/ByteSendApp/ByteSend; docs, READMEs, the site, the status page and package metadata link there
  • Go SDK module path is now github.com/ByteSendApp/ByteSend/packages/go-sdk, matching where the code lives. Update imports from github.com/nodebyteltd/bytesend-go. A new workflow tags packages/go-sdk/v<version> and publishes to the Go module proxy whenever the SDK version changes on main
  • Docker images publish to the GitHub Container Registry under the repository owner's namespace (ghcr.io/bytesendapp/…) instead of a hard-coded ghcr.io/bytesend/… the workflow token couldn't push to
  • SDK-first docs: the campaigns, campaign personalization, contact books, double opt-in, rate limits and error codes guides now show every example in Node.js, Python and Go, with cURL as a fallback tab, instead of cURL or raw fetch only

Fixed

  • Changelog links render as links instead of raw Markdown
  • Go SDK API errors now carry the real error code and message (e.g. RATE_LIMITED); previously every API error came back as INTERNAL_SERVER_ERROR with only the HTTP status text
  • Docs examples that didn't match the SDKs: the contact books guide read book.id instead of the { data, error } result and called contacts.upsert without a contact ID, and the error-codes guide used try/catch and a Python APIError class that don't exist
  • Open stats shows exact email counts instead of rounded figures that looked inconsistent with the totals beneath them
  • Em-dashes removed from site, dashboard, status page and docs copy